Arduino Elektronik Örnekler ve Projeler

Arduino ile 2WD Elektrikli Araba

Hiç kendinize bir 2WD Elektrikli Araba yapmak ve özellikle Android uygulamanız aracılığıyla kablosuz olarak kontrol etmek istediniz mi? Bu yazıda, android uygulaması aracılığıyla kendi 2WD Elektrikli Arabanızı nasıl kontrol edebileceğinize dair bazı kavramları ve basit çalışma detaylarını paylaşacağım.

2WD Elektrikli Arabanın video sunumu

Aşağıda tüm proje için blok diyagram bulunmaktadır:

Gerekli Parçalar

  • 1 x ATMega8
  • 1 x L293D motor sürücüsü
  • 1 x HC-05 Bluetooth modülü
  • 1 x 16MHz Kristal
  • 1 x AMS 1117 5V lineer voltaj regülatörü
  • 2 x DC motor
  • 2 x 3.7V Pil
  • 1 x Pil tutucu
  • 1 x LCD 16×2 mavi arka ışık
  • 6 x LED
  • 1 x 660Ω direnç
  • 2 x 0.1µF Kondansatör
  • 2 x 10µF Kondansatör
  • 2 x 22µF Kondansatör
  • 1 x Zil
  • 1 x SPDT Anahtarı
  • 1 x 2.1mm DC güç girişi

Donanım için şema

Şematikten de görebileceğiniz gibi, birkaç bölüme ayrılmıştır:

Bölüm 1: Ortak LM7805’e kıyasla daha düşük düşüş voltajına sahip AMS1117-5V voltaj regülatörünü kullanan güç kaynağı.Veri sayfası AMS1117-5V

Bölüm 2: Mikrodenetleyici (Atmega8/Atmega 328) arabanın tüm çalışmasını kontrol etmek için.Atmega 328 Veri Sayfası/Atmega 8 Veri Sayfası

Bölüm 3: L293D Motor Kontrolörü IC. Bu IC’yi kullanmanın amacı, motorun yönünü ve ayrıca motorun dönüş hızını kontrol etmektir.L293D Veri Sayfası

Bölüm 4: Arabanın mevcut durumunu görüntülemek için LCD Ekran. Örneğin, “İleri” , “Geri” ve görüntülemek istediğiniz herhangi bir bilgi.

Bölüm 5: Bu modülün cep telefonundan iletilen seri verileri alacağı ve mikrodenetleyicinin yanıt olarak ne yapması gerektiğini söylediği Bluetooth modülü.

Şimdi, L293D IC’yi ve bir motoru çift yönlü olarak kontrol etmek için nasıl kullanılacağını biraz daha açıklamak istiyorum. Pin konfigürasyonlarını daha iyi anlamak için lütfen L293D’nin veri sayfasına bakın.

Yüksek ~+5V, Düşük ~0V, X = yüksek veya düşük.

Yukarıdaki doğruluk tablosunda, Pin 1 (E1) düşükse, Pin 2 ve Pin 7’nin durumundan bağımsız olarak motorun durduğunu gözlemleyebilirsiniz. Bu nedenle, sürücünün çalışması için E1’i yüksek tutmak veya sadece etkinleştirmeyi bağlamak için gereklidir. 5 volta kadar pinler.

Pim 1 yüksekken, Pim 2 yükseğe ayarlanır ve Pim 7 aşağıya çekilirse, akım Pim 2’den Pim 7’ye akar ve motoru saat yönünün tersine hareket ettirir. Pim 2 ve Pim 7’nin durumları ters çevrilirse, akım Pim 7’den Pim 2’ye akar ve motoru saat yönünde hareket ettirir.

Yukarıdaki konsept, IC’nin diğer tarafı için de geçerlidir. Motorunuzu Pin 11 ve Pin 14’e bağlayın; Pin 10 ve Pin 15 giriş pinleridir ve pin 9 (E2) sürücüyü etkinleştirir.

Daha sonra, Bluetooth modülünüzü mikrodenetleyicinize nasıl bağlamanız gerektiğine dair basit bir açıklama aşağıdadır.

Şimdi size ilk android uygulamanızı geliştirmeniz için basit ama kullanımı kolay bir platform tanıtıyorum –MIT Uygulama Mucidi.

Arkadaşımın gönderisini ziyaret ederek uygulama mucidi kullanmaya nasıl başlayacağınızı okuyabilirsiniz –Arduino ile App Inventor Nasıl Kullanılır.

Bu çevrimiçi yazılımı kullanarak geliştirdiğim android uygulamalarının arayüzü şu şekildedir:

Android uygulamasını indirin:

Bu Arduino kodu temel olarak seri iletişim konseptine dayanmaktadır.
Mikrodenetleyici bir seri veri aldığında, kullanıcı tarafından önceden programlanmış belirli bir görevi yerine getirecektir. Örneğin seri veri ‘1’ alındığında, araba ileri doğru hareket edecektir.

int motorPin1 = 7; 
int motorPin2 = 8; 
int enablePin_1 = 6;
int motorPin4 = 2;
int motorPin3 = 4;
int enablePin_2 =3 ;
int buzzer = 11;
int f_light = 12 ; 
int b_light = 5;
int state;
int flag=0; //makes sure that the serial only prints once the state
boolean buzzerstatus = 0;
boolean LEDstatus = 0;

#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 10, 9, A0, A1, A2);

void setup() {
  // sets the pins as outputs:
  lcd.begin(16, 2);
  pinMode(buzzer,OUTPUT);
  pinMode(f_light,OUTPUT);
  pinMode(b_light,OUTPUT);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(enablePin_1, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(enablePin_2, OUTPUT);
  // sets enablePin high so that motor can turn on:
  digitalWrite(enablePin_1, HIGH);
  digitalWrite(enablePin_2, HIGH);
  pinMode(13,OUTPUT);
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

void loop() {
  //if some date is sent, reads it and saves in state
  if(Serial.available() > 0){
    state = Serial.read();
    flag=0;
  
  // if the state is '0' the DC motor will turn off
  if (state == '0') {
    digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin2, LOW); // set pin 7 on L293D low
    digitalWrite(motorPin3, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin4, LOW); // set pin 7 on L293D low
    if(flag == 0){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("STOP");
      flag=1;
    }
  }
  // if the state is '1' the motor will forward
  else if (state == '1') {
 digitalWrite(b_light,LOW);
    digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin2, HIGH); // set pin 7 on L293D high
    digitalWrite(motorPin3, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin4, HIGH); // set pin 7 on L293D high
    
    
    if(flag == 0){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("FORWARD");
      flag=1;
  
    }
  }
  // if the state is '2' the motor will backward
  else if (state == '2') {
    
    digitalWrite(b_light,HIGH);
    digitalWrite(motorPin1, HIGH); // set pin 2 on L293D high
    digitalWrite(motorPin2, LOW); // set pin 7 on L293D low
    digitalWrite(motorPin3, HIGH); // set pin 2 on L293D high
    digitalWrite(motorPin4, LOW); // set pin 7 on L293D low
    
      
    if(flag == 0){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("REVERSE");
      flag=1;
  
    }
  }

  else if (state == '3') {
    
   
    digitalWrite(motorPin1, LOW); // set pin 2 on L293D high
    digitalWrite(motorPin2, HIGH); // set pin 7 on L293D low
    digitalWrite(motorPin3, LOW); // set pin 2 on L293D high
    digitalWrite(motorPin4, LOW); // set pin 7 on L293D low
    delay(150);
      digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin2, LOW); // set pin 7 on L293D high
    digitalWrite(motorPin3, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin4, LOW); // set pin 7 on L293D high
    if(flag == 0){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("RIGHT");
      flag=1; //Left wheel forward, Right wheel static
       
    }
  }
  else if (state == '4') {
 
   
    digitalWrite(motorPin1, LOW); // set pin 2 on L293D high
    digitalWrite(motorPin2, LOW); // set pin 7 on L293D low
    digitalWrite(motorPin3, LOW); // set pin 2 on L293D high
    digitalWrite(motorPin4, HIGH); // set pin 7 on L293D low
    delay(150);
     digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin2, LOW); // set pin 7 on L293D high
    digitalWrite(motorPin3, LOW); // set pin 2 on L293D low
    digitalWrite(motorPin4, LOW); // set pin 7 on L293D high
    if(flag == 0){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("LEFT");
   
       
    }
  }
  else if (state == '5') {

    digitalWrite(buzzer,HIGH);
    delay(100);
    digitalWrite(buzzer,LOW);
  
    if(flag == 0){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("Buzzer ON");
      flag=1;
      
      
    }
  }
  else if (state == '6') {

    digitalWrite(f_light,!digitalRead(f_light));
   
    if(flag == 0&&digitalRead(f_light)){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("FRONT LIGHT ON");
      flag=1;
    }
     else
    {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("FRONT LIGHT OFF");
      flag=1;
  }
  }
  else if (state == '7') {

    digitalWrite(b_light,!digitalRead(b_light));
   
    if(flag == 0 && digitalRead(b_light)){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("BACK LIGHT ON");
      flag=1;
    }
    else
    {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Current State:");
      lcd.setCursor(0, 1);
      lcd.print("BACK LIGHT OFF");
      flag=1;
  }

}
}
}

Bu makale buradan çevrilmiştir.

Related posts

Servo Motor Test Cihazı Devresi

Ömer Ersin

L298N Motor Sürücüsünü Kullanarak Arduino DC Motor Kontrolü

Ömer Ersin

Arduino: Analog ölçümler

Ömer Ersin