WeMos下實現小車避障與手機控制

提示:文章寫完後,目錄能夠自動生成,如何生成可參考右邊的幫助文檔git


前言

經過WeMos D1開發板、超聲波模塊、蜂鳴器、L9110s步進電機實現:小車方向控制,若是小車距離障礙物的距離小於10釐米 ,再按前進蜂鳴器就會報警,並後退必定的距離 。編程

1、項目軟硬件平臺及開發環境

1.硬件平臺介紹

在這裏插入圖片描述
特性
1.基於ESP-8266EX
2.Arduino兼容,使用rduino IDE來編程
3.11 x I/O 引腳
4.1 x ADC 引腳(輸入範圍0-3.3V)
5.板載5V 1A開關電源(高輸入電壓24V)
工做中:
和stm32模塊開發相似,集成度高
STM32方案也更經濟便宜








服務器

2.開發環境介紹

在這裏插入圖片描述

ArduiNo開發環境,和keil對比
優勢:
集成不少開發庫如串口,網絡,sg90等
各類硬件開發接口,迅捷開發
自帶串口調試工具
缺點: 程序編譯速度慢




網絡

3.開發環境配置支持Wemos

在這裏插入圖片描述

2、驅動演示

1.蜂鳴器

在這裏插入圖片描述
//基礎控制:蜂鳴器叫喚和不叫喚
void setup()
{
pinMode(D5, OUTPUT); //設置引腳爲輸出引腳
}




函數

void loop()
{
digitalWrite(D5, HIGH); // 輸出高電平,蜂鳴器閉嘴
delay(1000); //這一秒內都得閉嘴
digitalWrite(D5, LOW); //輸出低電平,蜂鳴器吼起來
delay(1000); //吼一秒(延時期間,蜂鳴器控制引腳屬於低電平)
}





工具

2.Wemos串口通訊

串口有關的函數:在這裏插入圖片描述
串口與wemos的簡單通訊:
在這裏插入圖片描述
在這裏插入圖片描述
串口控制蜂鳴器代碼:
#define BEEP D5




oop

void setup() {
Serial.begin(115200); //初始化串口,設置波特率爲115200
pinMode(BEEP, OUTPUT); //設置引腳爲輸出引腳
digitalWrite(BEEP, HIGH); // 上電不讓蜂鳴器響起
}



ui

void loop()
{
int cmd;
if ( Serial.available() > 0 )
{ //檢測串口是否有數據
cmd = Serial.read(); // 讀取串口數據
Serial.println(cmd);
if (cmd == 1) { //若是讀取的數據是1
digitalWrite(BEEP, LOW); // 蜂鳴器響起
}
else
{
digitalWrite(BEEP, HIGH); // 不然(讀取數據非1)蜂鳴器不響
}
}
}














spa

3.Wemos和wifi

**板載無線網卡:支持AP(路由), sta(上網設備)模式**

在這裏插入圖片描述
做爲設備接入wifi(STA模式)
#include <ESP8266WiFi.h>
char* ssid = 「TENK-888」; //「wifi熱點名稱」
char* passwd = 「12345678」; //」wifi熱點密碼」



3d

void initWifiSta()
{
WiFi.mode(WIFI_STA); // 設置STA模式
WiFi.begin(ssid, passwd); //鏈接網絡
while (WiFi.status() != WL_CONNECTED) //判斷WiFi接入狀態
{
Serial.print(".");
delay(500);
}
}
void setup() {
//初始化串口
Serial.begin(115200);
//初始化wifi
initWifiSta();













}

void loop() {
Serial.println(WiFi.localIP()); //經過串口打印wemos的IP地址
delay(500);
}
由串口打印出wemos的IP地址:192.168.1.5
在這裏插入圖片描述
手機調試工具發送指令控制蜂鳴器:
在這裏插入圖片描述
編程代碼:
#include <ESP8266WiFi.h>








#define BEEP D5

char* ssid = 「TENK-888」; //「wifi熱點名稱」
char* passwd = 「12345678」; //」wifi熱點密碼」
int port = 8888; //端口號
WiFiServer server(port); // 設置服務器端口號


void initWifiSta()
{
WiFi.mode(WIFI_STA); // 設置STA模式
WiFi.begin(ssid, passwd); //鏈接網絡
while (WiFi.status() != WL_CONNECTED) //判斷WiFi接入狀態
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //經過串口打印wemos的IP地址
delay(500);
}










void initBeep()
{
pinMode(BEEP, OUTPUT); //設置引腳爲輸出引腳
digitalWrite(BEEP, HIGH); // 輸出高電平,蜂鳴器閉嘴
}



void setup() {

initBeep(); //初始化蜂鳴器
Serial.begin(115200); //初始化串口
initWifiSta(); //初始化wifi
server.begin(); //啓動服務器


}

void loop() {

char cmd;

WiFiClient client = server.available(); //服務初始化
while (client.connected())
{
while (client.available() > 0) //等待客戶端鏈接
{
cmd = client.read();//讀取數據
if(cmd == ‘1’)
{
digitalWrite(BEEP, LOW);
}
else
{
digitalWrite(BEEP, HIGH);
}












}

}
}

4.Wemos和超聲波測距

超聲波測距原理:
在這裏插入圖片描述
超聲波測距編程實現(距離小於10觸發蜂鳴器發出聲音):
#define Echo D2
#define Trig D8
#define BEEP D5




long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);



return pulseIn(Echo,HIGH);
}

void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}



void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}



void setup()
{
initChaoShengBo();
initBeep();
Serial.begin(115200);
}




void loop()
{
//獲取距離
long dis;
dis = getTime()/58;
Serial.print(dis);
Serial.println(「cm」);
if(dis < 10)
{
digitalWrite(BEEP,LOW);
}
else
{
digitalWrite(BEEP,HIGH);
}
delay(500);
}















在這裏插入圖片描述

5.Wemos和L9110s步進電機控制器

L9110s步進電機控制器:
在這裏插入圖片描述
串口控制小車主要代碼:
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4





void initL9110s()
{
pinMode(Dong1,OUTPUT);
pinMode(Dong2,OUTPUT);
pinMode(Zhuan1,OUTPUT);
pinMode(Zhuan2,OUTPUT);
}





void qian()
{
digitalWrite(Dong1,HIGH);
digitalWrite(Dong2,LOW);
}



void hou()
{
digitalWrite(Dong1,LOW);
digitalWrite(Dong2,HIGH);
}



void zuo()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,HIGH);
}



void you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}



void setup()
{
initL9110s();
Serial.begin(115200);
}



void loop()
{
char cmd;

if(Serial.available() > 0)
{
cmd = Serial.read();
switch(cmd)
{
case ‘q’: qian();break;
case ‘h’: hou();break;
case ‘z’: zuo();break;
case ‘y’: you();break;
}
}
}










6.安卓APP控制小車

6.1 Android開發環境搭建
編程軟件下載,解壓。
Android導入程序包
在這裏插入圖片描述
在這裏插入圖片描述
Android修改代碼支持你的Wemos
在這裏插入圖片描述
在這裏插入圖片描述






3、項目整合

1.相關函數

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


在這裏插入圖片描述

2.代碼整合

實現小車方向控制,若是小車距離障礙物的距離小於10釐米 ,再按前進蜂鳴器就會報警,並後退必定的距離 。
Arduino完整編程代碼:
#include <ESP8266WiFi.h>

#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4
#define Echo D2
#define Trig D8
#define BEEP D5





/*****************************************************************************/
/
/
/
wifi模塊函數 /
/
***************************************************************************/
char
ssid = 「TENK-888」; //「wifi熱點名稱」
char
passwd = 「12345678」; //」wifi熱點密碼」
int port = 8888; //端口號
WiFiServer server(port); // 設置服務器端口號

void initWifiSta()
{
WiFi.mode(WIFI_STA); // 設置STA模式
WiFi.begin(ssid, passwd); //鏈接網絡
while (WiFi.status() != WL_CONNECTED) //判斷WiFi接入狀態
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //經過串口打印wemos的IP地址
}
/*****************************************************************************/
/
/
/
電機控制模塊函數 /
/
*****************************************************************************/
void initL9110s()
{
pinMode(Dong1,OUTPUT);
pinMode(Dong2,OUTPUT);
pinMode(Zhuan1,OUTPUT);
pinMode(Zhuan2,OUTPUT);
}

















void qian()
{
digitalWrite(Dong1,HIGH);
digitalWrite(Dong2,LOW);
}



void hou()
{
digitalWrite(Dong1,LOW);
digitalWrite(Dong2,HIGH);
}



void ting()
{
digitalWrite(Dong1,LOW);
digitalWrite(Dong2,LOW);
}



void zuo()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,HIGH);
}



void you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}



void zheng()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,LOW);
}
/*****************************************************************************/
/
/
/
超聲波測距模塊函數 /
/
*****************************************************************************/
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);









return pulseIn(Echo,HIGH);
}

void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
/*****************************************************************************/
/
/
/
蜂鳴器模塊函數 /
/
*****************************************************************************/
void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}









/*****************************************************************************/
/
/
/
各個模塊初始化函數 /
/
*****************************************************************************/
void setup()
{
initL9110s();
Serial.begin(115200);
initWifiSta();
server.begin();
initChaoShengBo();
initBeep();
}
/*****************************************************************************/
/
主循環函數:實現小車方向控制,若是小車距離障礙物的距離小於10釐米 /
/
再按前進蜂鳴器就會報警,並後退必定的距離 /
/
*****************************************************************************/
void loop()
{
char cmd;
int flag = 0;
long dis;














WiFiClient client = server.available(); //服務初始化
while (client.connected())
{
while (client.available() > 0) //等待客戶端鏈接
{
cmd = client.read();//讀取數據
Serial.println(cmd);
dis = getTime()/58;
if(dis < 10 )
{
digitalWrite(BEEP,LOW);
hou();
delay(200);
ting();
digitalWrite(BEEP,HIGH);
flag = 1;
}
else
{
flag = 0;
}
if(flag == 0)
{
switch(cmd)
{
case ‘q’: qian(); break; //前進
case ‘h’: hou(); break; //後退
case ‘z’: zuo(); break; //左轉
case ‘y’: you(); break; //右轉
case ‘s’: ting(); break; //中止
case ‘d’: zheng(); break; //回正
}
}
}
}
}


































總結

實現小車方向控制,若是小車距離障礙物的距離小於10釐米 ,再按前進蜂鳴器就會報警,並後退必定的距離 。

相關文章
相關標籤/搜索