Arduino Kullanarak Joystick Kontrollü 2.4 GHz RC Araba

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda 2,4 GHz kablosuz iletişim bağlantısı üzerinde bir joystick kullanılarak kontrol edilebilen bir araba robotu yapacağız. Önerilen proje sadece RC araba olarak yapılmamaktadır, aynı zamanda araç üzerine gözetleme kamerası vb. Projelerinizi de ekleyebilirsiniz.



Genel Bakış

Proje, uzaktan kumanda ve alıcı olmak üzere iki kısma ayrılmıştır.

Tüm alıcı bileşenlerimizi yerleştirdiğimiz araba veya taban, üç tekerlekten çekişli veya dört tekerlekten çekişli olabilir.



Temel araç için daha fazla denge istiyorsanız veya aracı dış mekan gibi düz olmayan yüzeylerde sürmek istiyorsanız, 4 tekerlekli araç tabanı önerilir.

Ayrıca, dönüş sırasında size daha fazla hareket kabiliyeti sağlayan 3 tekerlekten çekişli taban arabasını da kullanabilirsiniz, ancak 4 tekerlekten çekişten daha az denge sağlayabilir.

4 tekerlekli, ancak 2 motorlu bir araba da mümkündür.

Uzaktan kumanda 9V pil ile çalıştırılabilir ve alıcı 12V, 7AH pilden daha küçük ayak izine sahip olan ve ayrıca bu tür peripatetik uygulamalar için ideal olan 12V, 1.3 AH kapalı kurşun asit pil ile çalıştırılabilir.

Aradaki 2,4 GHz iletişim, iki NRF24L01 modülü arasındaki engellere bağlı olarak 30 ila 100 metreden fazla sinyal iletebilen NRF24L01 modülü kullanılarak kurulur.

NRF24L01 modülünün resmi:

3.3V ve 5V üzerinde çalışır, modülü öldürebilir bu yüzden dikkatli olunmalı ve SPI haberleşme protokolü üzerinde çalışmaktadır. Pim konfigürasyonu yukarıdaki resimde verilmiştir.

Uzaktan kumanda:

Uzaktan kumanda, Arduino (Arduino nano / pro-mini önerilir), NRF24L01 modülü, bir joystick ve bir pil güç kaynağından oluşur. Bunları, kullanımı daha kolay olacak küçük bir çöp kutusuna koymaya çalışın.

Uzaktan kumanda için şematik diyagram:

NRF24L01 modülü ve kumanda kolu için pim bağlantıları şemada verilmiştir, herhangi bir karışıklık hissederseniz, lütfen verilen pim bağlantı tablosuna bakın.

Kumanda çubuğunu ileri (YUKARI), geri (Aşağı), sağa ve sola hareket ettirerek, araç buna göre hareket eder.

uzaktan araç kumanda kolu

Lütfen tüm kablo bağlantılarının sol tarafta olduğunu unutmayın, bu referans noktasıdır ve artık kumanda çubuğunu arabayı hareket ettir .

Z eksenindeki joystick'e basarak araçtaki LED ışığını kontrol edebilirsiniz.

Uzaktan Kumanda Programı:

//--------------Program Developed by R.Girish---------------//
#include
#include
#include
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
RF24 radio(9,10)
const byte address[6] = '00001'
const char var1[32] = 'up'
const char var2[32] = 'down'
const char var3[32] = 'left'
const char var4[32] = 'right'
const char var5[32] = 'ON'
const char var6[32] = 'OFF'
boolean light = true
int thresholdUP = 460
int thresholdDOWN = 560
int thresholdLEFT = 460
int thresholdRIGHT = 560
void setup()
{
radio.begin()
Serial.begin(9600)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
radio.openWritingPipe(address)
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.stopListening()
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
if(y <= thresholdUP)
{
radio.write(&var1, sizeof(var1))
}
if(y >= thresholdDOWN)
{
radio.write(&var2, sizeof(var2))
}
if(x <= thresholdLEFT)
{
radio.write(&var3, sizeof(var3))
}
if(x >= thresholdRIGHT)
{
radio.write(&var4, sizeof(var4))
}
if(z == LOW)
{
if(light == true)
{
radio.write(&var5, sizeof(var5))
light = false
delay(200)
}
else
{
radio.write(&var6, sizeof(var6))
light = true
delay(200)
}
}
}
//--------------Program Developed by R.Girish---------------//

Bu, Uzaktan Kumandayı bitirir.

Şimdi alıcıya bir göz atalım.

Alıcı devresi temel vagon üzerine yerleştirilecektir. Projenizi bu hareketli tabana eklemek için herhangi bir fikriniz varsa, alıcının ve projenizin yerleştirilmesi için geometriyi doğru bir şekilde planlayın, böylece yeriniz kalmaz.

Alıcı; Arduino, L298N çift H-köprü DC motor sürücü modülü, arabanın önüne yerleştirilecek beyaz LED, NRF24L01 modülü ve 12V, 1.3AH pilden oluşur. Motorlar temel araba ile gelebilir.

Alıcı için şematik diyagram:

Lütfen Arduino kartı ile NRF24L01 arasındaki bağlantının, kablolama karmaşasını önlemek için yukarıdaki şemada gösterilmediğini unutmayın. Lütfen uzaktan kumandanın şemasına bakın.

Arduino kartı, 5V regülatörde yerleşik olduğu L298N modülü ile güçlendirilecektir.

Beyaz led far olarak yerleştirilebilir veya bu pimi ihtiyaçlarınıza göre özelleştirebilirsiniz, joystick'e basarak, # 7 pim yukarı döner ve joystick'e tekrar basmak pimi alçaltacaktır.

Lütfen alıcı şematik diyagramında belirtilen sol ve sağ yan motorlara dikkat ediniz.

Alıcı için Program:

//------------------Program Developed by R.Girish---------------//
#include
#include
#include
RF24 radio(9,10)
const byte address[6] = '00001'
const char var1[32] = 'up'
const char var2[32] = 'down'
const char var3[32] = 'left'
const char var4[32] = 'right'
const char var5[32] = 'ON'
const char var6[32] = 'OFF'
char input[32] = ''
const int output1 = 2
const int output2 = 3
const int output3 = 4
const int output4 = 5
const int light = 7
void setup()
{
Serial.begin(9600)
radio.begin()
radio.openReadingPipe(0, address)
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.startListening()
pinMode(output1, OUTPUT)
pinMode(output2, OUTPUT)
pinMode(output3, OUTPUT)
pinMode(output4, OUTPUT)
pinMode(light, OUTPUT)
digitalWrite(output1, LOW)
digitalWrite(output2, LOW)
digitalWrite(output3, LOW)
digitalWrite(output4, LOW)
digitalWrite(light, LOW)
}
void loop()
{
while(!radio.available())
{
digitalWrite(output1, LOW)
digitalWrite(output2, LOW)
digitalWrite(output3, LOW)
digitalWrite(output4, LOW)
}
radio.read(&input, sizeof(input))
if((strcmp(input,var1) == 0))
{
digitalWrite(output1, HIGH)
digitalWrite(output2, LOW)
digitalWrite(output3, HIGH)
digitalWrite(output4, LOW)
delay(10)
}
else if((strcmp(input,var2) == 0))
{
digitalWrite(output1, LOW)
digitalWrite(output2, HIGH)
digitalWrite(output3, LOW)
digitalWrite(output4, HIGH)
delay(10)
}
else if((strcmp(input,var3) == 0))
{
digitalWrite(output3, HIGH)
digitalWrite(output4, LOW)
delay(10)
}
else if((strcmp(input,var4) == 0))
{
digitalWrite(output1, HIGH)
digitalWrite(output2, LOW)
delay(10)
}
else if((strcmp(input,var5) == 0))
{
digitalWrite(light, HIGH)
}
else if((strcmp(input,var6) == 0))
{
digitalWrite(light, LOW)
}
}
//------------------Program Developed by R.Girish---------------//

Bu, alıcıyı sonlandırır.

Projeyi tamamladıktan sonra, araba yanlış yönde hareket ederse sadece kutup motorunu ters çevirin.

Temel arabanız 4 motorlu tekerlekten çekişli ise, sol motorları aynı polariteyle paralel bağlayın, aynısını sağ taraftaki motorlar için yapın ve L298N sürücüsüne bağlayın.

Arduino kullanan bu joystick kontrollü 2,4 GHz RC araba ile ilgili herhangi bir sorunuz varsa, yorum bölümünde belirtmekten çekinmeyin, hızlı bir cevap alabilirsiniz.




Önceki: L298N DC Motor Sürücü Modülü Açıklaması Sonraki: Arduino kullanarak Basit Dijital Su Akış Ölçer Devresi