基于Arduino制作调速遥控小车 借助于arduino硬件和mixly设计一个有线遥控小车,用4个按钮分别控制小车的前进、后退、加速和减速。 (有线遥控小车)材料准备 主要用到的材料有,一块Arduino UNO主控板 ,一个L298N电机驱动板模块,用来驱动两路直流减速电机,两 个轮胎和直流减速电机,一个9V充电锂电池和电池扣,用来给Arduino
UNO主控板和L298N电机驱动板模块供电,一个微型小船型开关3脚2档红色,是个总电源开关,蓝色、绿色、黑色、黄色四个按钮模块,分别用来控制小车的前进、后退、加速和减速,若干钣金件和杜邦线搭建好一个小车。 硬件连接 L298N电机驱动板模块 Arduino 5V <------> 5V GND <------> GND D5 <------> ENA D9 <------> IN1 D3 <------> IN2 D6 <------> ENB D10 <------> IN3 D4 <------> IN4 L298N电机驱动板模块 9V充电锂电池 GND <------> 负极 V12 <------> 正极 两个电机一个接在L298N电机驱动板模块OUT1和OUT2输出口,另一个接在OUT3和OUT4输出口 蓝色按钮模块 Arduino OUT <------> D7 VCC <------> 5V GND <------> GND 绿色按钮模块 Arduino OUT <------> D8 VCC <------> 5V GND <------> GND 黑色按钮模块 Arduino OUT <------> D12 VCC <------> 5V GND <------> GND 黄色按钮模块 Arduino OUT <------> D13 VCC <------> 5V GND <------> GND 备注:四个按钮的VCC可以连接在一起后接入Arduino 的5V,GND可以连接在一起后接入Arduino的GND,电池扣、船型开关和9V充电锂电池连接在一起,控制电源供电,微型小船型开关3脚2档红色的中间脚和电池扣的红色线正极接在一起,”O”字样一端接在L298N电机驱动板模块的V12。 黑色按钮加速控制
定义一个变量A,初始值设为0,每按一次黑色按钮变量A加63 黄色按钮减速控制
每按一次黄色按钮变量减63,如果变量小于0则A就重新赋值为0 蓝色按钮控制小车前进 当变量A在0到255之间时,A的值即速度,当变量A大于255时,A重新赋值为252,方便减速用,速度设为252。 绿色按钮控制小车后退
当变量A在0到255之间时,把A的取负数并赋值给变量B,小车的速度即为B的值,取负数的目的是让小车后退,当变量A等于0时小车停止,当变量A大于255时,将A重新赋值为252,小车后退的速度设为-252。 没有按钮按下时小车保持停止状态 有线遥控小车总程序 程序实现代码volatile int A; volatile int B; void setMotor(int
speedpin,int dirpin, int speed) { if (speed == 0) { digitalWrite(speedpin, LOW); } else if (speed > 0) { digitalWrite(dirpin, LOW); analogWrite(speedpin, speed); } else { digitalWrite(dirpin, HIGH); analogWrite(speedpin, speed); } } void setup(){ A = 0; B = 0; pinMode(12, INPUT); pinMode(13, INPUT); pinMode(7, INPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(9, OUTPUT); pinMode(3, OUTPUT); digitalWrite(9, LOW); digitalWrite(3, LOW); pinMode(10, OUTPUT); pinMode(4, OUTPUT); digitalWrite(10, LOW); digitalWrite(4, LOW); pinMode(8, INPUT); } void loop(){ if (digitalRead(12) ==
HIGH) { delay(1000); A = A + 63; } else if (digitalRead(13)
== HIGH) { delay(1000); A = A - 63; if (A < 0) { A = 0; } } else if
(digitalRead(7) == HIGH) { delay(200); if (A > 0
&& A < 255) {
digitalWrite(5,HIGH);
digitalWrite(6,HIGH); setMotor(9, 3,A); setMotor(10, 4,A); } else if (A > 255)
{ A = 252;
digitalWrite(5,HIGH);
digitalWrite(6,HIGH); setMotor(9, 3,252); setMotor(10, 4,252); } } else if (digitalRead(8)
== HIGH) { delay(200); if (A > 0
&& A < 255) { B = A * -1;
digitalWrite(5,HIGH);
digitalWrite(6,HIGH); setMotor(9, 3,B); setMotor(10, 4,B); } else if (A == 0) { setMotor(9, 3,0); setMotor(10, 4,0); } else if (A > 255)
{ A = 252;
digitalWrite(5,HIGH);
digitalWrite(6,HIGH); setMotor(9, 3,-252); setMotor(10,
4,-252); } } else { digitalWrite(5,LOW); digitalWrite(6,LOW); } } |