1. 主页
  2. 文档
  3. Arduino教程(持续更新)
  4. 5.初级项目
  5. 5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

在本篇文章中,我们将制作一款两轮遥控机器人小车,使用的组件包含nRF24L01模块、Arduino UNO和Funduino操纵杆扩展板组成的控制部分,Arduino nano开发板以及和一个用于控制直流电机的L298N电机驱动器。

nRF24L01和L298N电机驱动器为机器人小车提供动力,并且以arduino nano为大脑。此外,为了控制这款车,我们使用Arduino UNO和Funduino操纵杆模块。

nRF24L01射频收发器芯片

nRF24L01是一款真正快速、低成本的RF收发器芯片。它的工作频率为2.4GHz,速率高达2Mbps,功耗极低,这意味着一节5号电池可以为其供电多年。它的工作电压范围为1.9至3.6V,峰值RX / TX电流小于14mA。

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

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

Funduino操纵杆Arduino扩展板

Funduino是一款非常酷的Arduino扩展板,可轻松放在Arduino UNO之上,我们可以轻松地将普通的Arduino UNO转换为用户友好的操纵杆。

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

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

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

所需的硬件

●    Arduino UNO开发板

●    Arduino nano开发板

●    Funduino操纵杆扩展板

●    L298N电机驱动器

●    2个nRF24L01

●    移动电源

●    机器人汽车底盘

●    2个直流电机

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

硬件组装

将Arduino Uno和Funduino组装在一起。将Funduino置于Uno之上。它很容易组装。

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

接下来,将nRF24L01插入Funduino操纵杆模块顶部,如下图所示。

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

硬件接线

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

如果您从亚马逊购买了一个机器人底盘套件,请首先进行组装。接下来,按照Fritzing图并将所有组件连接到Arduino Nano,如下所示。

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

下图是组装完成后的效果:

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

测试Funduino

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

5.3 Arduino+L298N+NRF24L01+操纵杆扩展板Funduino制作机器人小车

发射端代码:

//Arduino Joystick shield Code
#include <nRF24L01.h>
#include <RF24.h>
#include <SPI.h>

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

}
}


 访问次数: 2

这篇文章对您有用吗?

我们要如何帮助您?

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注