亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 4WD 遥控车

组件和用品

Arduino UNO
× 2
SparkFun 收发器突破 - nRF24L01+ (RP-SMA)
× 2
Funduino Joystick Shield V1.A
× 1
SparkFun 双 H 桥电机驱动器 L298
× 2
4WD 智能机器人汽车底盘套件
× 1
LED(通用)
× 3
电阻 221 ohm
× 2
面包板(通用)
× 2
18650 电池
× 2
Powerbank
× 1
跳线(通用)
× 1

必要的工具和机器

烙铁(通用)

应用和在线服务

Arduino IDE

关于这个项目

故事

大家好!这是我的下一个项目 - 带有操纵杆控制器的 Arduino 4WD 遥控汽车或使用模拟操纵杆控制 Arduino 4WD 智能汽车是多么容易。

这款遥控摇杆控制车使用NRF24l01作为发射器和接收器。它在开放空间中的射程可达 1 公里。也非常简单易做。

1. 摇杆控制器

操纵杆组件:

操纵杆盾牌位于您的 Arduino 顶部,并将其变成一个简单的控制器。 7 个瞬时按钮(4 个大按钮、2 个小按钮和一个操纵杆选择按钮)和一个两轴拇指操纵杆为您的 Arduino 功能提供与旧任天堂控制器相同的功能。本机还提供诺基亚5110 LCD和nRF24L01接口。

特点:

  • nRF24L01 接口
  • 诺基亚 5110 LCD 接口
  • 蓝牙接口
  • I2C 接口
  • 与Arduino兼容
  • 工作电压 3.5V 或 5V

实际标注为BTE16-49-nRF24L01+RFX2401C+PA+LNA无线通信模块带天线屏蔽盒2.4GHz 20dbm 1000m。

卖家指定的特性:

  • 2.4GHz 全球开放 ISM 频段,免许可使用
  • 最高运行速度2Mbps,高效GFSK调制,音视频传输
  • 125个频道,满足多点通信和跳频通信需求
  • 内置硬件CRC错误检测和点对多点通信控制的地址
  • 工作电压3.0-3.6V,发射功率20dBm (VDD =3.3V)
  • 外置 2.4GHz 天线
  • 2.54mm间距管脚,完全兼容无功放模块接口,方便更换提升距离
  • 传输距离可达1000米

2. 摇杆控制器

Joystick Shield 有 4 个大按钮 + 2 个小按钮 + 操纵杆选择按钮和一个两轴拇指操纵杆(X 轴从 0 到 1023,Y 轴从 0 到 1023)该盾牌位于 Arduino 顶部并将其变成一个简单的控制器。在我的草图中,按钮向上用于蜂鸣器(喇叭),按钮右 - 前灯(LED + 电阻器 200 欧姆),按钮左 - 后灯(LED + 电阻器 200 欧姆)。不使用其他按钮。

操纵杆测试:

空闲状态:X=499,Y=502,上=1,右=1,下=1,左=1

3. Arduino 4WD 遥控车

按照上面的接线图进行连接。

注意:在上传代码之前,您必须从 Arduino Uno 板(引脚 0、1)断开跳线。

一旦您正确完成所有步骤,汽车就可以出发了!

给 Arduino Car 和操纵杆控制器供电后,您可以使用操纵杆来控制汽车,通过向前和向后移动操纵杆,汽车将向前或向后移动,左右移动操纵杆将使汽车左右转弯。

敬请关注!

代码

  • Car_nRF24.ino
  • Joystick_nRF24.ino
Car_nRF24.inoArduino
Arduino 遥控车代码
/* JoyStick 模块接收器代码 - 连接:nRF24L01 模块参见:1 - GND 2 - VCC 3.3V !!!不是 5V 3 - CE 到 Arduino 引脚 6 4 - CSN 到 Arduino 引脚 8 5 - SCK 到 Arduino 引脚 13 6 - MOSI 到 Arduino 引脚 11 7 - MISO 到 Arduino 引脚 12 8 - 未使用 *///-----(导入需要的库)-----#include #include #include /*-----( 声明常量和引脚号)-----* /#define CE_PIN 6#define CSN_PIN 8// 注意:常量末尾的“LL”是“LongLong” typeconst uint64_t pipe =0xE8E8F0F0E1LL; // 定义传输管道#define light_Front 18 //用于Arduino Uno的LED右前引脚A4#define light_Back 19 //用于Arduino Uno的LED后右引脚A5#define horn_Buzz 7 #define ENA_m1 3 //启用/加速电机右前#define ENB_m1 5 // 启用/加速电机右后#define ENA_m2 9 // 启用/加速电机左前#define ENB_m2 10 // 启用/加速电机左后#define IN_11 0 // L298N #1 合1 电机右前#define IN_12 1 // L298N #1 in 2 motor Front Right#define IN_13 2 // L298N #1 in 3 motor Back Right#define IN_14 4 // L298N #1 in 4 motor Back Right#define IN_21 14 // L298N # 2 合 1 电机左前#define IN_22 15 // L298N #2 2 电机左前#define IN_23 16 // L298N #2 3 电机左后#define IN_24 17 // L298N #2 4 电机左后/* -----(声明对象)-----*/RF24 radio(CE_PIN, CSN_PIN); // 创建一个 Radio/*-----( 声明变量 )-----*/int joystick[6]; // 保存操纵杆读数的 6 元素数组int speedRight =0;int speedLeft =0;int xAxis, yAxis;// 来自操纵杆的四个按钮变量int buttonUp;int buttonRight;int buttonDown;int buttonLeft;void setup(){ pinMode(light_Front,输出); pinMode(light_Back,输出); pinMode(horn_Buzz,输出); pinMode(ENA_m1,输出); pinMode(ENB_m1,输出); pinMode(ENA_m2,输出); pinMode(ENB_m2,输出); pinMode(IN_11,输出); pinMode(IN_12,输出); pinMode(IN_13,输出); pinMode(IN_14,输出); pinMode(IN_21,输出); pinMode(IN_22,输出); pinMode(IN_23,输出); pinMode(IN_24, OUTPUT);/* Serial.begin(9600); Serial.println("Nrf24L01 接收器启动"); */ radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening();}void loop(){ if ( radio.available() ) { radio.read(joystick, sizeof(joystick) ); xAxis =操纵杆[0]; yAxis =操纵杆 [1]; // 操纵杆数组中的四个按钮变量 int buttonUp =joystick[2]; int buttonRight =游戏杆[3]; int buttonDown =游戏杆[4]; int buttonLeft =游戏杆[5]; //Serial.println(); // 用于调试 // 获取数据负载 - 下面的调试代码 if (buttonUp ==HIGH){digitalWrite(horn_Buzz, LOW);} else {digitalWrite(horn_Buzz, HIGH);} if (buttonRight ==HIGH){digitalWrite( light_Front, LOW);} else {digitalWrite(light_Front, HIGH);} if (buttonLeft ==HIGH){digitalWrite(light_Back, LOW);} else {digitalWrite(light_Back, HIGH);}// Y轴用于向前和向后控制 if (yAxis <470) { // 设置右电机向后 digitalWrite(IN_11, LOW);数字写入(IN_12,高);数字写入(IN_13,高);数字写入(IN_14,低); // 设置左电机向后 digitalWrite(IN_21, HIGH);数字写入(IN_22,低);数字写入(IN_23,低);数字写入(IN_24,高); // 将下降的 Y 轴读数从 470 到 0 转换为 0 到 255 值,用于增加电机速度的 PWM 信号 speedRight =map(yAxis, 470, 0, 0, 255); speedLeft =map(yAxis, 470, 0, 0, 255); }else if (yAxis> 550) { // 设置右电机前进 digitalWrite(IN_11, HIGH);数字写入(IN_12,低);数字写入(IN_13,低);数字写入(IN_14,高); // 设置左电机前进 digitalWrite(IN_21, LOW);数字写入(IN_22,高);数字写入(IN_23,高);数字写入(IN_24,低); // 将增加的 Y 轴读数从 550 到 1023 转换为用于增加电机速度的 PWM 信号的 0 到 255 值 speedRight =map(yAxis, 550, 1023, 0, 255); speedLeft =map(yAxis, 550, 1023, 0, 255); } // 如果操纵杆保持在中间,电机不会移动 else { speedRight =0;速度左 =0; }// X 轴用于左右控制 if (xAxis <470) { // 将 X 轴读数从 470 下降到 0 转换为从 0 到 255 递增的值 int xMapped =map(xAxis, 470, 0, 0 , 255); // 向左移动 - 降低左侧电机速度,增加右侧电机速度 speedLeft =speedLeft - xMapped; speedRight =speedRight + xMapped; // 限制从 0 到 255 的范围 if (speedLeft <0) { speedLeft =0; } if (speedRight> 255) { speedRight =255; } } if (xAxis> 550) { // 将增加的 X 轴读数从 550 到 1023 转换为 0 到 255 值 int xMapped =map(xAxis, 550, 1023, 0, 255); // 向右移动 - 降低右侧电机速度,增加左侧电机速度 speedLeft =speedLeft + xMapped; speedRight =speedRight - xMapped; // 限制从 0 到 255 的范围 if (speedLeft> 255) { speedLeft =255; } if (speedRight <0) { speedRight =0; } } // 防止低速时的嗡嗡声(根据您的电机进行调整。如果 PWM 值低于 70,我的电机无法启动) if (speedLeft <70) { speedLeft =0; } if (speedRight <70) { speedRight =0;模拟写入(ENA_m1,speedRight); // 向电机 A 发送 PWM 信号 analogWrite(ENB_m1, speedRight);模拟写入(ENA_m2,speedLeft); // 向电机 B 发送 PWM 信号 analogWrite(ENB_m2, speedLeft); /* Serial.print("X ="); Serial.print(xAxis); Serial.print(" Y ="); Serial.print(yAxis); Serial.print(" Up ="); Serial.print(操纵杆[2]); Serial.print(" Right ="); Serial.print(操纵杆[3]); Serial.print(" 下 ="); Serial.print(操纵杆[4]); Serial.print(" Left ="); Serial.println(操纵杆[5]); */ } } 
Joystick_nRF24.inoArduino
操纵杆控制器代码
/* 操纵杆模块收发器代码 - 连接:nRF24L01 模块参见:1 - GND 2 - VCC 3.3V !!!不是 5V 3 - CE 到 Arduino 引脚 9 4 - CSN 到 Arduino 引脚 10 5 - SCK 到 Arduino 引脚 13 6 - MOSI 到 Arduino 引脚 11 7 - MISO 到 Arduino 引脚 12 8 - 未使用 默认按钮引脚:向上 - 引脚 2 右 - pin 3 Down - pin 4 Left - pin 5 - Analog Joystick module GND to Arduino GND VCC to Arduino +5V X Pot to Arduino A0 Y Pot to Arduino A1/*-----(导入需要的库)----- */#include #include "nRF24L01.h"#include "RF24.h"#define CE_PIN 9#define CSN_PIN 10#define xAxis 14 // A0 for Arduino UNO#define yAxis 15 // A1 for Arduino UNO// 注意:常量末尾的“LL”是“LongLong” typeconst uint64_t pipe =0xE8E8F0F0E1LL; //定义传输管道/*-----(声明对象)-----*/RF24 radio(CE_PIN, CSN_PIN); // 创建一个 Radio/*-----( 声明变量 )-----*/int joystick[6]; // 6 个元素数组保存操纵杆读数和 4 个按钮int buttonUp =2;int buttonRight =3;int buttonDown =4;int buttonLeft =5;void setup() { Serial.begin(9600);收音机。开始(); radio.openWritingPipe(pipe); radio.stopListening(); //声明所有按钮的pinMode和初始状态pinMode(buttonUp,INPUT_PULLUP); pinMode(buttonRight,INPUT_PULLUP); pinMode(buttonDown,INPUT_PULLUP); pinMode(buttonLeft,INPUT_PULLUP);数字写入(按钮向上,低);数字写入(buttonRight,低);数字写入(buttonDown,低); digitalWrite(buttonLeft,LOW);}void loop() { joystick[0] =analogRead(xAxis);操纵杆 [1] =模拟读取(yAxis);操纵杆 [2] =数字读取(按钮向上);游戏杆[3] =digitalRead(buttonRight);操纵杆[4] =digitalRead(buttonDown);操纵杆[5] =数字读取(buttonLeft); radio.write(操纵杆,大小(操纵杆));延迟(20); Serial.print("X ="); Serial.print(analogRead(xAxis)); Serial.print(" Y ="); Serial.print(analogRead(yAxis)); Serial.print(" Up ="); Serial.print(digitalRead(buttonUp)); Serial.print(" Right ="); Serial.print(digitalRead(buttonRight)); Serial.print(" 下 ="); Serial.print(digitalRead(buttonDown)); Serial.print(" Left ="); Serial.println(digitalRead(buttonLeft));}

示意图

rc_car_tp3A7JlpYw.fzz

制造工艺

  1. Arduino 数字骰子
  2. Arduino 游戏控制器
  3. 操纵杆控制的遥控车
  4. 钢铁侠
  5. 找到我
  6. Arduino 3D 打印机械臂
  7. Arduino 加湿器控制
  8. Car Counter using Arduino + Processing + PHP
  9. NeoMatrix Arduino Pong
  10. Arduino Joystick
  11. 遥控保时捷汽车(Arduino 项目)
  12. Arduino TEA5767 FM 收音机接收器