Arduino RC

Alev Püskürtücü ve NRF24L01 Tabanlı RC Araba Yapımı

Featured Video Play Icon

Arkadaşlar selamlar, bu projede NRF24L01 tabanlı RC kumanda ile uzaktan araç kontrolünü ve alev püskürtücü yapımını göreceğiz. NRF24L01, kendi RC aracını üretmek isteyenler için çok iyi bir başlangıç noktası. Dolayısıyla bu yazıyı ve bir önceki yazı olan RC kumanda rehberini takip ederek radyo kontrollü projelere “Merhaba” diyebilirsiniz. Bu projedeki gibi bir aracı yapmanızı şiddetle tavsiye ederim fakat ateş püskürtücüyü kesinlikle evde denemeyin. Projenin “alevli” kısımları açık havada ve bir yangın söndürücü refakatiyle test edildi. (3 itfaiye aracı da kapıdaydı.) Uzun lafın kısası evde denemeyin. 🙂

3B Tasarım ve Mekanik Montaj

Alev püskürtücü için çakmak gazı olarak da kullanılan bütan gazından faydalandım. Gaz tüpünü, servoyu ve gazın geçeceği boruyu tutacak mekanik parçaları tasarlayarak işe başladım. Tasarımdan sonra parçaları baskıya vererek montaja hazırladım. Ardından tüm parçaları ve devre elamanlarını uygun boyutta kestiğim bir tahta parçasına sabitledim.

Tüm 3D dosyalarına aşağıdaki butona tıklayarak ulaşabilirsiniz.

Projenin ana mekanik parçası üzerinde dört adet motor bulunan bir tank şasesi olacak. Siz de kendi hazırladığınız bir şase veya hazır bir robot şasesi kullanarak aracınızı yapabilirsiniz. Dört motorlu bir araç için aynı tarafta bulunan motorları paralel bağlayarak motor sürücüye bağlayabilirsiniz.

Elektronik Montaj

Projenin elektronik kısmında ana kahramanımız Arduino Nano. Nano modelini tercih etmemdeki en büyük sebep kartın boyutu. Tüm devreyi delikli pertinaks üzerine kuracağımdan bu modeli kullandım. Eğer siz de projenizde delikli pertinaks kullanacaksanız temel lehimleme ekipmanlarına ihtiyaç duyacaksınız. Lehimleme ile uğraşmayayım diyorsanız devreyi breadboard üzerine de kurabilirsiniz.

Projede radyo iletişimi için NRF24L01 modülünü kullandım, kumanda üzerinde de aynı modülüm antenli bir versiyonu bulunuyor. Araç üzerindeki motorları da L298N motor sürücü kartı ile kontrol ettim. L298N kanal başına verdiği 2A ile bu proje için en uygun sürücü entegresi. Tüm devreyi bir LiPo pil ile besledim. LiPo pilden gelen gerilimi bir regülatör kartı ile regüle ederek devre üzerinde daha az gerilime ihtiyaç duyan parçalarda kullandım. Projenin başında farklı işlevde iki servo kullanmayı planlasam da sonradan ateşleyici görevini görecek servoyu iptal ettim. Dolayısıyla projenin son aşamasında tek servo kullanmış oldum.

Radyo iletişimi kullanılan projelerde alıcı ve verici olmak üzere iki devre bulunur. Alıcı devresi için gerekli malzemeleri aşağıda bulabilirsiniz. Verici olarak daha önce videosunu da çektiğim NRF24L01 tabanlı RC kumandayı kullandım. Kumandanın teknik detaylarını ve kullanımını içeren detaylı bir yazıya buraya tıklayarak ulaşabilirsiniz. Kumandayı kullanmayacak olanlar da yine RC kumanda rehberini ve bu yazıyı takip ederek kendi verici devrelerini hazırlayabilirler.

Malzemeler

Bağlantı Şeması

Projenin bağlantı şemasını aşağıda bulabilirsiniz. Yazının önceki kısmında da bahsettiğim gibi projenin yapımında 2 adet servo bulunuyordu. Ateşleyici görevini gören servoyu eklemek isteyenler servoyu 5 numaralı dijital pine bağlayabilirler. Kod kısmında bir değişiklik yapmanız gerekmeyecektir.

Proje Kodu

Projede radyo kontrolü için kullandığımız kütüphaneye ve kütüphanenin Arduino IDE’ye kurulumuna önceki yazıda değinmiştik. “RC Kumanda Kullanım Rehberi” yazısına buraya tıklayarak ulaşabilirsiniz. Gerekli kütüphaneleri kurduktan sonra kod yazmaya başlayabiliriz!

Verici Kodu

Projenin yazılım kısmı iki aşamadan oluşuyor. Bildiğiniz gibi hem alıcı hem de verici tarafı için kod yazmamız gerekiyor. Verici yani RC kumanda için ihtiyacımız olan kodu aşağıda bulabilirsiniz. Kumanda için kullandığımız kod “RC Kumanda Kullanım Rehberi” yazısındaki uygulamalarda kullandığımız kodlar ile çok benzer. Koddaki fonksiyonların işlevini ve RC kumandayı nasıl programlayabileceğinizi anlattığım rehbere buraya tıklayarak ulaşabilirsiniz. Bu rehber ile kumanda üzerindeki farklı kanalları kullanarak çok daha fonksiyonel bir araç yapabilirsiniz. Aracın kontrolünde joystick; alev kontrolü için de potansiyometre ve butondan faydalandım.


#define joy1_X A1
#define joy1_Y A0
#define joy2_Y A2
#define pot_1 A6              //potansiyometre-1
#define buton_1 6
#define buton_2 4
#define buton_3 5
#define buton_4 7
#define CE 9               
#define CSN 10    
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(CE, CSN);  
int joy1_x_value, joy1_y_value;

int data[7]; //Göndereceğimiz veriyi kaydedeceğimiz dizi
const byte address[6] = "00001"; //Adres tanımlaması

void setup()
{
  pinMode(buton_1, INPUT_PULLUP); //Pin tanımlamaları
  pinMode(buton_2, INPUT_PULLUP);
  pinMode(buton_3, INPUT_PULLUP);
  pinMode(buton_4, INPUT_PULLUP);

  radio.begin(); //Haberleşmeyi başlat
  radio.openWritingPipe(address); //Veri gönderilecek adres

  radio.stopListening();//Modülü verici olarak tanımlıyoruz
}
void loop()
{
  /*Butondan aldığımız değeri tersleyerek data dizisine kaydediyoruz*/
  data[0] = !digitalRead(buton_1);
  data[1] = !digitalRead(buton_2);
  data[2] = !digitalRead(buton_3);
  data[3] = !digitalRead(buton_4);
  data[4] = analogRead(joy2_Y); //X ekseninden okuma yapıyoruz
  data[5] = analogRead(joy1_Y); //Y ekseninden okuma yapıyoruz
  data[6] = analogRead(pot_1);

  radio.write(data, sizeof(data)); //Veri Gönderimi
  delay(10);
}

Alıcı Kodu

Alıcı devrede de kumandadan gelen verilere göre motor ve alev kontrolünü sağlayacak bir koda ihtiyacımız var. Alıcı kısmında radyo kontrolü için kullanılan fonksiyonlarla ilgili daha detaylı bilgiye yine rehberden ulaşabilirsiniz. Joystickten gelen veriler ile tank üzerindeki robotları kontrol ediyoruz. Kumandadan gelen buton durumuna göre de gaz çıkışını sağlayan servi aktif hale geliyor. Tüm koda aşağıdan ulaşabilirsiniz.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

Servo gas_servo;
Servo spark_servo;
RF24 radio(8, 10);  // CE, CSN
int data[7];  //Verilerin tutulacağı dizi

int normal_gas = 90;
int normal_spark = 90;
int push_spark_pos = 30;
int push_gas_pos = 0;

int joy_left = 0;
int joy_right = 0;

const byte address[6] = "00001"; //Adres tanımlaması

void setup()
{
  pinMode(A0,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);
  pinMode(A3,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(9,OUTPUT);

  radio.begin(); //Radyo iletişimini başlat
  radio.openReadingPipe(1, address); //Adres tanımlaması
  radio.startListening(); 

  Serial.begin(9600);
  Serial.println("basladi");
  gas_servo.attach(3);
  spark_servo.attach(5);
  gas_servo.write(normal_gas);
  spark_servo.write(normal_spark);
}

void loop()
{
  
  if (radio.available())
  {
    radio.read(data, sizeof(data)); //Veri okuması

  }

  joy_left = (data[5]/2) - 255; 
  joy_right = (data[4]/2) - 255;

  push_gas_pos = normal_gas - (data[6] / 25);

  if(data[3] == 1){

    gas_servo.write(push_gas_pos);
    delay(200);
  }
  else{
    gas_servo.write(normal_gas);
    spark_servo.write(normal_spark);
  }


  if(joy_left > 0){
    digitalWrite(A0, LOW);
    digitalWrite(A1, HIGH);
    if(joy_left > 255)
    joy_left = 255;
    analogWrite(9,joy_left);
    Serial.println(joy_left);
  }
  else{
    joy_left *= -1;
    digitalWrite(A0, HIGH);
    digitalWrite(A1, LOW);

    if(joy_left > 255)
    joy_left = 255;
    analogWrite(9,joy_left);
    Serial.println(joy_left);
  }


  if(joy_right > 0){
    digitalWrite(A2, LOW);
    digitalWrite(A3, HIGH);
    if(joy_right > 255)
    joy_right = 255;
    analogWrite(6,joy_right);
    Serial.println(joy_right);
  }
  else{
    joy_right *= -1;
    digitalWrite(A2, HIGH);
    digitalWrite(A3, LOW);

    if(joy_right > 255)
    joy_right = 255;
    analogWrite(9,joy_right);
    Serial.println(joy_left);
  } 
}

Test

Test aşaması bu projenin en dikkat edilmesi gereken aşamasıydı. Yazının başında da belirttiğim gibi kesinlikle evde denenmemesi gereken bir çalışma oldu. Alev püskürtücünün çalışmasını açık bir alanda test ettikten ve doğru bir şekilde emin olduktan sonra araca bağlayarak açık alanda test etmeye devam ettik.

Sonuç çok havalı! Tüp içerisindeki gaz birkaç dakikalık deneme atışı sonrası tükendi. Bu da çıkan alevin miktarıyla ilgili fikir verdi.

Çok keyifli ve bir o kadar da tehlikeli bir proje oldu. Havalı görüntüsünün yanında “mangal yakma” gibi kritik işlerde de kullanılabileceğini görmüş olduk. Proje ile ilgili yorumlarınızı bekliyorum. Ayrıca farklı video fikirlerinizi de paylaşabilirsiniz. Başka bir projede görüşünceye dek, hoşça kalın! 🙂

Similar Posts

One thought on “Alev Püskürtücü ve NRF24L01 Tabanlı RC Araba Yapımı
  1. Bu projeyi biraz inceleyerek aklıma şöyle bir alternatif geldi arduino uno L293D motor sürücü shield kullanarak bir tank şasisine bağlamak ön yükleme ateşini ise kanthal a1 telden 4-5 sarım yaparak bir ateşleme yöntemi düşündüm böylece hem ateşleme hem motor sürme hem de alan kullanımından tasarruf etmek geldi aklıma Not: Üst düzey bir elektronik bilgim yok eksik yerlerde beni uyarır ve cevap verirseniz çok sevinirim

Leave a Reply

Your email address will not be published. Required fields are marked *