จอยสติ๊กควบคุม 2.4 GHz RC รถโดยใช้ Arduino

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโพสต์นี้เราจะสร้างหุ่นยนต์รถยนต์ที่สามารถควบคุมได้โดยใช้จอยสติ๊กบนลิงค์การสื่อสารไร้สาย 2.4 GHz โครงการที่นำเสนอนี้ไม่เพียง แต่ทำเป็นรถ RC เท่านั้น แต่คุณสามารถเพิ่มโครงการของคุณเช่นกล้องวงจรปิดเป็นต้นบนรถได้



ภาพรวม

โครงการแบ่งออกเป็นสองส่วนคือรีโมทและตัวรับสัญญาณ

รถหรือฐานที่เราวางส่วนประกอบตัวรับสัญญาณทั้งหมดอาจเป็นระบบขับเคลื่อนสามล้อหรือขับเคลื่อนสี่ล้อ



หากคุณต้องการความมั่นคงมากขึ้นสำหรับรถฐานหรือหากคุณต้องการขับรถในพื้นผิวที่ไม่เรียบเช่นกลางแจ้งแนะนำให้ใช้ฐานรถที่มีล้อ 4 ล้อ

คุณยังสามารถใช้รถฐานขับเคลื่อน 3 ล้อซึ่งให้ความคล่องตัวมากขึ้นในขณะเลี้ยว แต่อาจให้ความเสถียรน้อยกว่าขับเคลื่อน 4 ล้อ

รถที่มี 4 ล้อ แต่มีมอเตอร์ขับเคลื่อน 2 ตัวเช่นกัน

รีโมทอาจใช้พลังงานจากแบตเตอรี่ 9V และตัวรับอาจใช้แบตเตอรี่กรดตะกั่วปิดผนึก 12V, 1.3 AH ซึ่งมีขนาดเล็กกว่าแบตเตอรี่ 12V, 7AH และยังเหมาะสำหรับการใช้งานอุปกรณ์ต่อพ่วงดังกล่าว

การสื่อสาร 2.4 GHz ระหว่างสร้างขึ้นโดยใช้โมดูล NRF24L01 ซึ่งสามารถส่งสัญญาณได้ไกลกว่า 30 ถึง 100 เมตรขึ้นอยู่กับสิ่งกีดขวางระหว่างโมดูล NRF24L01 สองโมดูล

ภาพประกอบของโมดูล NRF24L01:

ทำงานบน 3.3V และ 5V สามารถฆ่าโมดูลได้ดังนั้นต้องใช้ความระมัดระวังและทำงานบนโปรโตคอลการสื่อสาร SPI การกำหนดค่าพินมีให้ในภาพด้านบน

รีโมท:

รีโมทประกอบด้วย Arduino (แนะนำให้ใช้ Arduino nano / pro-mini) โมดูล NRF24L01 จอยสติ๊กและแหล่งจ่ายไฟแบตเตอรี่ พยายามบรรจุในกล่องขยะขนาดเล็กซึ่งจะง่ายต่อการจัดการ

แผนผังสำหรับระยะไกล:

การเชื่อมต่อพินสำหรับโมดูล NRF24L01 และจอยสติ๊กมีให้ในแผนภาพหากคุณรู้สึกว่ามีปัญหาใด ๆ โปรดดูตารางการเชื่อมต่อพินที่ระบุ

โดยการเลื่อนจอยสติ๊กไปข้างหน้า (UP), ถอยหลัง (ลง), ขวาและซ้ายรถจะเคลื่อนที่ตาม

จอยสติ๊กรถระยะไกล

โปรดทราบว่าการเชื่อมต่อสายทั้งหมดอยู่ที่ด้านซ้ายนี่คือจุดอ้างอิงและตอนนี้คุณสามารถย้ายจอยสติ๊กไปที่ ย้ายรถ .

เมื่อกดจอยสติ๊กในแกน Z คุณจะสามารถควบคุมไฟ LED บนรถได้

โปรแกรมสำหรับรีโมท:

//--------------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---------------//

สรุปได้ว่ารีโมท

ตอนนี้มาดูที่เครื่องรับ

วงจรรับจะถูกวางไว้บนรถฐาน หากคุณมีความคิดที่จะเพิ่มโครงการของคุณบนฐานเคลื่อนที่นี้ให้วางแผนรูปทรงเรขาคณิตให้เหมาะสมสำหรับการวางเครื่องรับและโครงการของคุณเพื่อที่คุณจะได้ไม่เต็มพื้นที่

ตัวรับสัญญาณประกอบด้วย Arduino, โมดูลขับมอเตอร์ DC แบบ H-bridge คู่ L298N, LED สีขาวซึ่งจะติดไว้ที่ด้านหน้าของรถ, โมดูล NRF24L01 และแบตเตอรี่ 12V, 1.3AH มอเตอร์อาจมาพร้อมกับรถฐาน

แผนผังสำหรับเครื่องรับ:

โปรดทราบว่าการเชื่อมต่อระหว่างบอร์ด Arduino และ NRF24L01 จะไม่แสดงในแผนภาพด้านบนเพื่อหลีกเลี่ยงความสับสนในการเดินสาย โปรดดูแผนผังของรีโมต

บอร์ด Arduino จะใช้พลังงานจากโมดูล L298N ซึ่งมีตัวควบคุม 5V ในตัว

LED สีขาวอาจวางเป็นไฟหน้าหรือคุณสามารถปรับแต่งพินนี้ตามความต้องการของคุณได้โดยการกดจอยสติ๊กขา # 7 จะสูงและกดจอยสติ๊กอีกครั้งจะทำให้ขาต่ำ

โปรดใส่ใจกับมอเตอร์ด้านซ้ายและด้านขวาที่ระบุในแผนผังตัวรับสัญญาณ

โปรแกรมสำหรับผู้รับ:

//------------------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---------------//

สรุปว่ารับ.

หลังจากเสร็จสิ้นโครงการหากรถเคลื่อนที่ไปในทิศทางที่ไม่ถูกต้องเพียงแค่กลับมอเตอร์ขั้ว

หากรถฐานของคุณขับเคลื่อนด้วยมอเตอร์ 4 ล้อให้เชื่อมต่อมอเตอร์ด้านซ้ายแบบขนานด้วยขั้วเดียวกันทำแบบเดียวกันกับมอเตอร์ด้านขวาและเชื่อมต่อกับไดรเวอร์ L298N

หากคุณมีคำถามใด ๆ เกี่ยวกับจอยสติ๊กที่ควบคุมรถ RC 2.4 GHz โดยใช้ Arduino อย่าลังเลที่จะแสดงความคิดเห็นในส่วนความคิดเห็นคุณอาจได้รับคำตอบอย่างรวดเร็ว




ก่อนหน้านี้: L298N DC Motor Driver Module อธิบาย ถัดไป: วงจรวัดการไหลของน้ำแบบดิจิตอลอย่างง่ายโดยใช้ Arduino