5.2 Arduino+L298N+NRF24L01+ joystick机器人制作小车

在本篇文章中,我们将制作假冒两轮遥控机器人小车,使用的组件包括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。

.2

增强型ShockBurst硬件协议加速器还可以卸载应用微控制器的时间协议功能,实现与开发微控制器的高级和关键无线连接。

Funduino 扩展板

Funduino 是非常酷的 Arduino 扩展板,可轻松启动 Arduino UNO 简单轻松地将普通的 UNO转换为用户友好的我们可以拆除的杆。

.2

提供简单的模拟输入,带有连接杆和四个独立按钮。还包括两个额外的小按钮。

危险杆可用于控制各种食物,例如屏幕上的旋律、机器人或像素,并且按钮可用于导航或游戏控制。

需要的硬件

● Arduino UNO开发板

● Arduino nano开发板

● Funduino 加大杆扩展板

● L298N电机驱动器

● 2个nRF24L01

●移动电源

● 汽车汽车宣传

● 2个蓝色电机

.2

硬件建设

将 Arduino Unduino 和 Funduino Unduino 筹款联系在一起。

.2

接下来,将n个RF24L0插入Funduino 危险模块顶部,如下图所示。

.2

硬件接线

如果您从亚马逊购买了一个机器人伴奏,请先进行讲述。故事情节,按照弗里茨图将所有组件连接到 Arduino Nano,如下所示。.2

注意:如果马达不动,要给L298n 12+和GND接入一个5-12v的供电,来驱动马达

下图是整体完成后的效果:

.2

测试Funduino

上传控制端和机器人小车的代码后,就可以进行测试了! 下图是小车的控制方式:

.2

端发射代码:

//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");
}

}
}

联系我们

联系我们

微信:13823392571

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息

微信客服
微信客服
分享本页
返回顶部