基于Arduino和Blynk的远程遥控小车
基于Arduino和Blynk的远程遥控小车
小车图片?ε=ε=ε=(~ ̄▽ ̄)~,其实很简单一起来看看叭
废话不多说。首先做这个智能小车所需要的东西有
硬件支持:
1.Arduino Uno 开发板
2.L298N电机驱动模块
3.ESP8266芯片一块
4.SG90舵机一个
5.HC-SR04超声波模块一个
6.一些杜邦线
7.7.4V(5600mA)锂电池充
8.四个直流电机和一个四轮车底盘(某宝上十几块钱的就都有,只是要自己拼装)
软件支持:
1.Arduino IDE
2.Blynk App(手机安卓客户端)
东西都备齐了就可以动手开始做啦。做这个东西从学习arduino到制作完成一共用了大约10天,中间还有七七八八的事情,总算制作完成了
L298N Arduino Uno ESP8266
HC-SR04超声波模块 SG90 舵机
------------------------------------------制作过程------------------------------------------------
一、对软件Arduino IDE要下载一些外加库和一些处理
1.文件-首选项-附加开发板管理器网址: http://arduino.esp8266.com/stable/package_esp8266com_index.json
2.下载Blynk库,发现网上的文章都要到处找库,其实你在下面的库管理器里面可以下载最新
然后在第三方库示例里面可以看见Blynk库
3.还有一些库统一下载放在arduino里自带的libraries文件夹里面
链接:https://pan.baidu.com/s/1mQo-x83PEcdNnmfdB6LGIA
提取码:y1d0
二、然后硬件和编程方面
esp8266
esp8266和单片机连线
VCC-3.3V GND-GND TX和RX反接arduino的RX和TX,我接的是RX-A0 ,TX-A1
RST和IO可以置空
ESP8266默认波特率为115200,可以通过arduino软件调试串口波特率为可以和arduino通信的9600波特率。
#include <SoftwareSerial.h>SoftwareSerial mySerial(A1, A0); // RX, TXvoid setup() {// Open serial communications and wait for port to open:Serial.begin(115200);while (!Serial) {; // wait for serial port to connect. Needed for native USB port only}Serial.println("Goodnight moon!");// set the data rate for the SoftwareSerial portmySerial.begin(115200);mySerial.println("Hello, world?");}void loop() { // run over and overif (mySerial.available()) {Serial.write(mySerial.read());}if (Serial.available()) {mySerial.write(Serial.read());}}
上传代码,打开串口,调波特率为115200波特率,和换行格式 NL和CR
串口输出
表明进入AT模式
再发送 AT+UART=9600,8,1,0,0 串口输出OK ,就成功修改了esp8266的波特率为9600,可以让esp8266和arduino uno通信啦。
调试好esp还有blynk呢
Blynk,先在华为商场或者别的,只要是安卓手机都行,下载Blynk APP
Blynk里面的物件需要能量,限2000,拖出来不用了的可以循环托回去,长按拖入那个三角循环浮标的,
不要Delete啊,我就Delete只有1400了,心疼(~﹃~)~zZ。
每建立一个工程blynk会发送邮箱给你,里面的token很重要,所以邮箱不要乱写哟
然后是L298N
先看一下基础教程:https://www.bilibili.com/video/av59280674?from=search&seid=424387283798668433
里面的使能是调速是通过自控使能引脚控制频率调速
我们可以不拔掉跳帽,是使能引脚保持高电平,处于使能状态,然后通过内置函数调PWM波
IN1,IN2,IN3,IN4分别接线 ~11,~6,~5,~3
7.4V(5600mA)锂电池在+12V和GND处对驱动供电,在无电脑供电情况下,可以通过5V对Arduino供电
注意L298N的GND要和Arduino接地,不然没在一个电路,电机动不了
接好线,可以先试一下通过blynk简单控制电机
先不看模式转换,上面的控件可以是电机前进,后退,左转,右转,调速
代码如下:
#define BLYNK_PRINT Serial#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";// Hardware Serial on Mega, Leonardo, Micro...
#define EspSerial Serial1// or Software Serial on Uno, Nano...
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(A1, A0); // RX, TX// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600
ESP8266 wifi(&EspSerial);void setup()
{// Debug consoleSerial.begin(9600);delay(10);// Set ESP8266 baud rateEspSerial.begin(ESP8266_BAUD);delay(10);Blynk.begin(auth, wifi, ssid, pass);
}void loop()
{Blynk.run();
}
YourAuthTokenW改为邮件里的Token,YourNetworkName,YourPassword改为你的8266可以连的WIFI的名字和密码
只要是可以连的WIFI就行,手机热点也行,让8266联网,然后和blynk云端服务器与Arduino通信实现联网控制功能
SG90舵机
舵机的橙、红、棕三色线分别代表PWM输入信号线,正极,负极
将超声波模块和舵机转头放在一起
超声波模块 Trig-12,Echo-~9
小车总代码:
#define BLYNK_PRINT Serial
//#include <avr/wdt.h>
//#include<VoiceRecognition.h>#define motor_in1 11//将电机驱动IN1接到A0端口
#define motor_in2 6
#define motor_in3 5
#define motor_in4 3
#define trig 12
#define echo 9#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <Servo.h>
//VoiceRecognition Voice;
char auth[] = "o370IDZiW12AbhEiQiquapDaJynIE40_";
unsigned int right,left;
char ssid[] = "OPPO A9x";
char pass[] = "12345678";
int key=7;
int sound=8;
unsigned int cm;
Servo s;
// Hardware Serial on Mega, Leonardo, Micro...#define EspSerial Serial1
#include <SoftwareSerial.h>SoftwareSerial EspSerial(A1, A0); // RX, TX// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600 ESP8266 wifi(&EspSerial);void setup()
{// put your setup code here, to run once:Serial.begin(9600);delay(10);EspSerial.begin(ESP8266_BAUD);delay(10);Blynk.begin(auth, wifi, ssid, pass);pinMode(motor_in1,OUTPUT);pinMode(motor_in2,OUTPUT);pinMode(motor_in3,OUTPUT);pinMode(motor_in4,OUTPUT);pinMode(trig,OUTPUT);pinMode(echo,INPUT);s.attach(2);s.write(90);tone(12,800,500);digitalWrite(motor_in1,LOW);digitalWrite(motor_in2,LOW);digitalWrite(motor_in3,LOW);digitalWrite(motor_in4,LOW);
}
void range()
{digitalWrite(trig,LOW);delayMicroseconds(2);digitalWrite(trig,HIGH);delayMicroseconds(10);digitalWrite(trig,LOW);int temp = float(pulseIn(echo,HIGH));cm = (temp*17)/1000;Serial.print("Echo ="); Serial.print(temp);//串口输出等待时间的原始数据 Serial.print(" | | Distance = "); Serial.print(cm);//串口输出距离换算成cm的结果 Serial.println("cm"); delay(100);if(cm<30){tone(12,800,50);delay(50);}
}
void Leftrange()
{digitalWrite(trig,LOW);delayMicroseconds(2);digitalWrite(trig,HIGH);delayMicroseconds(10);digitalWrite(trig,LOW);int temp = float(pulseIn(echo,HIGH));cm = (temp*17)/1000;Serial.print("Echo ="); Serial.print(temp);//串口输出等待时间的原始数据 Serial.print(" | | LeftDistance = "); Serial.print(cm);//串口输出距离换算成cm的结果 Serial.println("cm"); delay(100);if(cm<30){tone(12,800,50);delay(50);}
}
void Rightrange()
{digitalWrite(trig,LOW);delayMicroseconds(2);digitalWrite(trig,HIGH);delayMicroseconds(10);digitalWrite(trig,LOW);int temp = float(pulseIn(echo,HIGH));cm = (temp*17)/1000;Serial.print("Echo ="); Serial.print(temp);//串口输出等待时间的原始数据 Serial.print(" | | RightDistance = "); Serial.print(cm);//串口输出距离换算成cm的结果 Serial.println("cm"); delay(100);if(cm<30){tone(12,800,50);delay(50);}
}
void turn()
{stopit();delay(1000);s.write(170);delay(500);Leftrange(); left=cm;s.write(90);delay(500);s.write(10);delay(500);Rightrange();right=cm;s.write(90);delay(500);if(right>=left){moveRight();delay(600);moveForward();}else{moveLeft();delay(600);moveForward();}
}void loop() {
// put your main code here, to run repeatedly:
Blynk.run();while(1)
{Blynk.run();int val=digitalRead(key);while(val==LOW){Blynk.run();val=digitalRead(key);} while(1){Blynk.run();val=digitalRead(key);if(val==LOW){stopit();break;}range(); while(cm>30){Blynk.run();val=digitalRead(key);if(val==LOW){stopit();break;}moveForward();range();if(cm<10)break;}Blynk.run();val=digitalRead(key);if(val==LOW){stopit();break;}turn();}
}
}void stopit()
{digitalWrite(motor_in1,LOW);digitalWrite(motor_in2,LOW);digitalWrite(motor_in3,LOW);digitalWrite(motor_in4,LOW);
}
void moveForward()
{digitalWrite(motor_in1,HIGH);digitalWrite(motor_in2,LOW);analogWrite(motor_in1,150);analogWrite(motor_in2,0); //调PWM波digitalWrite(motor_in3,HIGH);digitalWrite(motor_in4,LOW);analogWrite(motor_in3,150);analogWrite(motor_in4,0);
}
void moveRight()
{digitalWrite(motor_in2,HIGH);digitalWrite(motor_in1,LOW);digitalWrite(motor_in4,LOW);digitalWrite(motor_in3,LOW);
}
void moveLeft()
{digitalWrite(motor_in1,LOW);digitalWrite(motor_in2,LOW);digitalWrite(motor_in3,HIGH);digitalWrite(motor_in4,LOW);
}void moveback()
{digitalWrite(motor_in4,HIGH);digitalWrite(motor_in3,LOW);digitalWrite(motor_in2,HIGH);digitalWrite(motor_in1,LOW);}
避障代码是我自己写的,逻辑上有点,但是不是很严谨,有时会有一点问题,有更好代码的伙伴们欢迎指教
有问题请大家指教(●ˇ∀ˇ●)~~~~~~~~
基于Arduino和Blynk的远程遥控小车相关推荐
- 基于Arduino的PS2机械臂遥控小车(L298N)傻瓜教程
基于Arduino的PS2机械臂遥控小车(L298N)傻瓜教程 1.材料 L298N.Arduino板.数据线.舵机(SG90).机械臂.亚克力板.电机.PS2.杜邦线.电池(7.4V).螺丝. 2. ...
- 开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32发送指令、ESP32接收指令,实现小车毫秒级完美控制_公羽兴
发文希望能够帮忙物联网爱好者少走弯路,少被割韭菜.如果觉得此文对您有帮助的话帮忙点个赞,感谢!!! 哔哩哔哩网址:开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32 ...
- c语言 数组放空自己,基于Arduino和Labview的无线遥控智能小车的设计与实现.docx
PAGE V MACROBUTTON MTEditEquationSection2 SEQ MTEqn \r \h SEQ MTSec \r 1 \h SEQ MTChap \r 1 \h 中文摘要 ...
- esp32-cam摄像头+远程遥控小车
目录 1.esp32cam开发 2.51单片机开发 3.手机端开发 4.总结 先来说说需要的器件,因为是心血来潮做的一个简单的实验,所以用的也都是最基础的东西.淘宝买的一个小车底板,外加四个带轮子的减 ...
- 远程遥控小车搭建记录
22年国庆期间,无意从抖音上发现远程遥控小车已经很普及了,包含了摄像头.喊话器.闪光灯控制,系统均是单片机控制,再叠加一个360度摄像头,基本是两个系统的叠加,也有一些商业化的系统,硬件+软件+云服务 ...
- 1.基于51单片机的蓝牙手机遥控小车
第一节 基于51单片机控制的蓝牙遥控小车 51控制的蓝牙遥控小车是楼主大一刚开始接触单片机时DIY的项目,时间大概是2016年的6月,现在已经是19年的5月底,借毕业前有闲时间写一下之前自己做过得种 ...
- 基于arduino的5路循迹小车(1)
基于arduino的5路循迹小车(1) 初步小车运动 1.硬件选用 1.开发板使用arduino 2560 2.电机驱动板使用 大功率电机驱动板(PWM由两个端子控制) 3.电源12V锂电池 4.降压 ...
- 基于arduino的5路循迹小车(2)
基于arduino的5路循迹小车(2) 小车5路红外循线 接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details/103437347 ...
- 基于arduino的5路循迹小车(4)与舵机控制板的通信控制
基于arduino的5路循迹小车(4) arduino与舵机控制板的通信控制 以及语音播报模块 接第一篇链接 https://blog.csdn.net/weixin_45984029/article ...
最新文章
- 操作系统学习:基础轮廓梳理
- C#BindingSource的DataSource的注意点
- java.lang.ArrayIndexOutOfBoundsException异常分析及解决
- 玉置成実(Nami Tamaki) -《もしも愿いが…》单曲[MP3]
- 数据库提示日志文件不可用
- 实用教程:使用Netflow分析网络异常流量
- 关于javaweb中sql语句中使用变量的情况
- 网页加载过程+性能优化+安全
- Java JVM 运行机制及基本原理
- Unicode(ASII)控制字符的含义
- 计算机版音乐教学反思,音乐教学反思(通用3篇)
- Android Verity Boot(AVB)初探
- 攻防世界-XSCTF联合招新赛
- 公众号PHP模板修改,PHP 实现发送模板消息(微信公众号版)
- SQL Server插入或修改数据是中文乱码的问题
- 【论文翻译】GoogleNet网络论文中英对照翻译--(Going deeper with convolutions)
- java生成日志文件_java - 把日志生成到指定目录
- 全国车牌号所属地JSON(省及城市两级联动)
- 扩散模型 Diffusion Models 入门到实践 | 论文、学习资源、课程整理
- 实例分享!告诉你西门子PLC如何通过MODBUS控制变频器
热门文章
- 微信支付分正式上线:马化腾在朋友圈四处挑战,10分钟后被打败
- 华为手机用显示服务器超时,手机服务器超时
- 【华为OD机试真题 python】任务最优调度 【2021 H2, 2022 Q1,Q2 考试题】
- Linux下的WEB服务器的搭建实战
- Problem C: 选举班干部了!
- 小伙利用C++制作烟花表白特效,撩妹一撩一个准!
- html css img标签鼠标事件,HTML+CSS入门 img标签学习
- Java中MDI的实现
- Go语言-进阶篇-欧阳桫-专题视频课程
- 前端发展史-服务器渲染时代和客户端渲染时代