在本篇文章中,我们将制作假冒两轮遥控机器人小车,使用的组件包括n个RFL01模块、Arduino UNO和Funduino微型杆扩展板的控制部分,Arduino纳米开发板以及一个用于控制电机电机的L298N电机驱动器。
nRF24L01和L298N电机驱动器为机器人小车提供动力,以arduino nano为大脑。此外,为了控制选择车辆,我们使用Arduino UNO和Funduino危险杆模块。
nRF24L01射频接收器芯片
n224L01是假的真快速、吸嘴的RF收发器芯片。它的工作频率为2.4GHz,速度高达2Mbps,耐射频极低,感觉有5号电池可以用这几年。它的工作电压范围为1.9至3.6V,最大RX/TX电流小于14mA。
增强型ShockBurst硬件协议加速器还可以卸载应用微控制器的时间协议功能,实现与开发微控制器的高级和关键无线连接。
Funduino 扩展板
Funduino 是非常酷的 Arduino 扩展板,可轻松启动 Arduino UNO 简单轻松地将普通的 UNO转换为用户友好的我们可以拆除的杆。
提供简单的模拟输入,带有连接杆和四个独立按钮。还包括两个额外的小按钮。
危险杆可用于控制各种食物,例如屏幕上的旋律、机器人或像素,并且按钮可用于导航或游戏控制。
需要的硬件
● Arduino UNO开发板
● Arduino nano开发板
● Funduino 加大杆扩展板
● L298N电机驱动器
● 2个nRF24L01
●移动电源
● 汽车汽车宣传
● 2个蓝色电机
硬件建设
将 Arduino Unduino 和 Funduino Unduino 筹款联系在一起。
接下来,将n个RF24L0插入Funduino 危险模块顶部,如下图所示。
硬件接线
如果您从亚马逊购买了一个机器人伴奏,请先进行讲述。故事情节,按照弗里茨图将所有组件连接到 Arduino Nano,如下所示。
注意:如果马达不动,要给L298n 12+和GND接入一个5-12v的供电,来驱动马达
下图是整体完成后的效果:
测试Funduino
上传控制端和机器人小车的代码后,就可以进行测试了! 下图是小车的控制方式:
端发射代码:
//Arduino Joystick shield Code include include include define CE_PIN 9 define CSN_PIN 10 int up_button = 2; // Boton Amarillo - A int down_button = 4; // Boton Amarillo - C int left_button = 5; // Boton Azul - D int right_button = 3; // Boton Azul - B int start_button = 6; // Boton F int select_button = 7; // Boton E int analog_button = 8; // int x_axis = A0; int y_axis = A1; int buttons[]={up_button, down_button,left_button, right_button,start_button,select_button,analog_button}; const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN,CSN_PIN); char msg[20] = ""; void setup(){ for(int i; i <7 ; i++) { pinMode(buttons[i],INPUT); digitalWrite(buttons[i],HIGH); } Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); } void loop(){ if(digitalRead(up_button)==LOW) { char msg[]="up"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("UP Button Pressed"); } if(digitalRead(down_button)==LOW) { char msg[]="down"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Down Button Pressed"); } if(digitalRead(left_button)==LOW) { char msg[]="left"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Left Button Pressed"); } if(digitalRead(right_button)==LOW) { char msg[]="right"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Rigth Button Pressed"); } if(digitalRead(start_button)==LOW) { char msg[]="start"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Start Button Pressed"); } if(digitalRead(select_button)==LOW) { char msg[]="select"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Select Button Pressed"); } if(digitalRead(analog_button)==LOW) { char msg[]="analgobut"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Analog Button Pressed"); } Serial.print("\n X = "),Serial.print(analogRead(x_axis)),Serial.print(" \n Y = "), Serial.print(analogRead(y_axis)); Serial.print(" "); delay(500); }
接收端代码:
// Arduino Car Code
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
#define CE_PIN 9
#define CSN_PIN 10
const int RightMotorF= 3;
const int RightMotorB= 4;
const int LeftMotorF= 5;
const int LeftMotorB= 6;
char data[20]="";
RF24 radio(CE_PIN,CSN_PIN);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup()
{
pinMode(RightMotorF,OUTPUT);
pinMode(RightMotorB,OUTPUT);
pinMode(LeftMotorF,OUTPUT);
pinMode(LeftMotorB,OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop(){
String msg="";
if ( radio.available() )
{
radio.read( data,sizeof(data) );
Serial.println(data);
msg=data;
if(msg=="up")
{
digitalWrite(RightMotorB,LOW);
digitalWrite(LeftMotorB,LOW);
digitalWrite(RightMotorF,HIGH);
digitalWrite(LeftMotorF,HIGH);
Serial.println("Motor forward");
}
else if(msg=="down")
{
digitalWrite(RightMotorB,HIGH);
digitalWrite(LeftMotorB,HIGH);
digitalWrite(RightMotorF,LOW);
digitalWrite(LeftMotorF,LOW);
Serial.println("Motor Back");
}
else if(msg=="left")
{
digitalWrite(RightMotorB,LOW);
digitalWrite(LeftMotorB,HIGH);
digitalWrite(RightMotorF,HIGH);
digitalWrite(LeftMotorF,LOW);
Serial.println("Left");
delay(300);
digitalWrite(RightMotorB,LOW);
digitalWrite(LeftMotorB,LOW);
digitalWrite(RightMotorF,LOW);
digitalWrite(LeftMotorF,LOW);
}
else if(msg=="right")
{
digitalWrite(RightMotorB,HIGH);
digitalWrite(LeftMotorB,LOW);
digitalWrite(RightMotorF,LOW);
digitalWrite(LeftMotorF,HIGH);
Serial.println("right");
delay(300);
digitalWrite(RightMotorB,LOW);
digitalWrite(LeftMotorB,LOW);
digitalWrite(RightMotorF,LOW);
digitalWrite(LeftMotorF,LOW);
}
else if(msg=="analgobut")
{
digitalWrite(RightMotorB,LOW);
digitalWrite(LeftMotorB,LOW);
digitalWrite(RightMotorF,LOW);
digitalWrite(LeftMotorF,LOW);
Serial.println("STOP it");
}
}
}