基于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的远程遥控小车相关推荐

  1. 基于Arduino的PS2机械臂遥控小车(L298N)傻瓜教程

    基于Arduino的PS2机械臂遥控小车(L298N)傻瓜教程 1.材料 L298N.Arduino板.数据线.舵机(SG90).机械臂.亚克力板.电机.PS2.杜邦线.电池(7.4V).螺丝. 2. ...

  2. 开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32发送指令、ESP32接收指令,实现小车毫秒级完美控制_公羽兴

    发文希望能够帮忙物联网爱好者少走弯路,少被割韭菜.如果觉得此文对您有帮助的话帮忙点个赞,感谢!!! 哔哩哔哩网址:开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32 ...

  3. c语言 数组放空自己,基于Arduino和Labview的无线遥控智能小车的设计与实现.docx

    PAGE V MACROBUTTON MTEditEquationSection2 SEQ MTEqn \r \h SEQ MTSec \r 1 \h SEQ MTChap \r 1 \h 中文摘要 ...

  4. esp32-cam摄像头+远程遥控小车

    目录 1.esp32cam开发 2.51单片机开发 3.手机端开发 4.总结 先来说说需要的器件,因为是心血来潮做的一个简单的实验,所以用的也都是最基础的东西.淘宝买的一个小车底板,外加四个带轮子的减 ...

  5. 远程遥控小车搭建记录

    22年国庆期间,无意从抖音上发现远程遥控小车已经很普及了,包含了摄像头.喊话器.闪光灯控制,系统均是单片机控制,再叠加一个360度摄像头,基本是两个系统的叠加,也有一些商业化的系统,硬件+软件+云服务 ...

  6. 1.基于51单片机的蓝牙手机遥控小车

    第一节  基于51单片机控制的蓝牙遥控小车 51控制的蓝牙遥控小车是楼主大一刚开始接触单片机时DIY的项目,时间大概是2016年的6月,现在已经是19年的5月底,借毕业前有闲时间写一下之前自己做过得种 ...

  7. 基于arduino的5路循迹小车(1)

    基于arduino的5路循迹小车(1) 初步小车运动 1.硬件选用 1.开发板使用arduino 2560 2.电机驱动板使用 大功率电机驱动板(PWM由两个端子控制) 3.电源12V锂电池 4.降压 ...

  8. 基于arduino的5路循迹小车(2)

    基于arduino的5路循迹小车(2) 小车5路红外循线 接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details/103437347 ...

  9. 基于arduino的5路循迹小车(4)与舵机控制板的通信控制

    基于arduino的5路循迹小车(4) arduino与舵机控制板的通信控制 以及语音播报模块 接第一篇链接 https://blog.csdn.net/weixin_45984029/article ...

最新文章

  1. 操作系统学习:基础轮廓梳理
  2. C#BindingSource的DataSource的注意点
  3. java.lang.ArrayIndexOutOfBoundsException异常分析及解决
  4. 玉置成実(Nami Tamaki) -《もしも愿いが…》单曲[MP3]
  5. 数据库提示日志文件不可用
  6. 实用教程:使用Netflow分析网络异常流量
  7. 关于javaweb中sql语句中使用变量的情况
  8. 网页加载过程+性能优化+安全
  9. Java JVM 运行机制及基本原理
  10. Unicode(ASII)控制字符的含义
  11. 计算机版音乐教学反思,音乐教学反思(通用3篇)
  12. Android Verity Boot(AVB)初探
  13. 攻防世界-XSCTF联合招新赛
  14. 公众号PHP模板修改,PHP 实现发送模板消息(微信公众号版)
  15. SQL Server插入或修改数据是中文乱码的问题
  16. 【论文翻译】GoogleNet网络论文中英对照翻译--(Going deeper with convolutions)
  17. java生成日志文件_java - 把日志生成到指定目录
  18. 全国车牌号所属地JSON(省及城市两级联动)
  19. 扩散模型 Diffusion Models 入门到实践 | 论文、学习资源、课程整理
  20. 实例分享!告诉你西门子PLC如何通过MODBUS控制变频器

热门文章

  1. 微信支付分正式上线:马化腾在朋友圈四处挑战,10分钟后被打败
  2. 华为手机用显示服务器超时,手机服务器超时
  3. 【华为OD机试真题 python】任务最优调度 【2021 H2, 2022 Q1,Q2 考试题】
  4. Linux下的WEB服务器的搭建实战
  5. Problem C: 选举班干部了!
  6. 小伙利用C++制作烟花表白特效,撩妹一撩一个准!
  7. html css img标签鼠标事件,HTML+CSS入门 img标签学习
  8. Java中MDI的实现
  9. Go语言-进阶篇-欧阳桫-专题视频课程
  10. 前端发展史-服务器渲染时代和客户端渲染时代