基于Wemos D1避障WiFi小車及智能垃圾桶設計
一、實驗器材
| 主控芯片 | Wemos D1 |
|---|---|
| 其他器材 | HC-SR04超聲波、L9110s電機、ESP82660WiFi模塊、蜂鳴器 |
| 所需設備 | TCP |
二、效果展示
圖1.

三、具體操作
1.開始我們還是用Wemos D1來 點亮我們的第一個LED燈吧
void setup() {
// put your setup code here, to run once:
pinMode(2,OUTPUT);//這里我們直接用2號引腳
//void setup()這里面為核心代碼只執行一次
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(2,LOW);
delay(1000);//延遲1ms
digitalWrite(2,HIGH);
delay(2000);
}
圖2.

2.HC-RS04超聲波
| 作業電壓電流 | 5V 15mA |
|---|---|
| 感測距離 | 2——400cm |
| 4個引腳 | GND(接地) VCC(正極)Trig(觸發)Eco(接受) |
| 前面的兩個像眼睛的圓圈 | 一個用于發射信號、一個用來接受信號 |
圖3.

運行
#define Ecno D2
#define Trig D8 //這里我們先將觸發與接收兩個引腳定義便于后面的操作
void initchaosbo() //初始化超聲波
{
pinMode(Ecno,INPUT);
pinMode(Trig,OUTPUT);
}
long getTime() //獲取待測距離
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Ecno,HIGH);
}
void setup() {
// put your setup code here, to run once:
initchaosbo();
Serial.begin(115200); //打開串口
}
void loop() {
// put your main code here, to run repeatedly:
long dis;
dis=getTime()/58;
Serial.print(dis);
Serial.println("cm");
delay(500);
}
為什么要除與58?
記錄一下,其他博客大哥哥講的~~~·"聲音在干燥、攝氏 20度的空氣中的傳播速度大約為343米/秒,合34,300厘米/秒,
或者,我們作一下單位換算,34,300除以1,000,000厘米/微秒,
即為:0.0343厘米/微秒
再換一個角度,1/(0.0343 厘米/微秒)
即:29.15 微秒/厘米,
這就意味著,每291.5微秒表示10CM的距離,1厘米就是29.15微秒,
但是發送后到接收到回波,聲音走過的是2倍的距離呀,
所以實際距離就是1厘米,對應58.3微秒,
實際上整個測距程序是測的發出聲波到收到回波的時間,你的程式里的第一個distance實際上是時間us,
所以換成距離cm,要除以58,當然除以58.3可能更精確,"
3.L9110s驅動步電機原理
| 驅動原理:總共有6個引腳 中間兩個為電源的正負極其他四個為信號線 |
|---|
| 四個信號線我們可以用假設法0代表不轉 1代表轉動 |
圖4.
具體操作
#define Zhuang1 D4
#define Zhuang2 D5
#define Dong1 D7
#define Dong2 D8
//定義四個引腳前面兩個用于控制小車前進還是后退后兩個控制小車的轉向
//初始化舵機
void initL9110s()
{
pinMode(Dong1,OUTPUT);
pinMode(Dong2, OUTPUT);
pinMode(Zhuang1, OUTPUT);
pinMode(Zhuang2, OUTPUT);
}
//后退
void huo()
{
digitalWrite(Dong1, HIGH);
digitalWrite(Dong2, LOW);
}
//前進
void qian()
{
digitalWrite(Dong1, LOW);
digitalWrite(Dong2, HIGH);
}
void zuo()
{
digitalWrite(Zhuang1, HIGH);
digitalWrite(Zhuang2, LOW);
}
//回正
void zheng()
{
digitalWrite(Zhuang1, LOW);
digitalWrite(Zhuang2, LOW);
}
//左轉
void zuo()
{
digitalWrite(Zhuang1, HIGH);
digitalWrite(Zhuang2, LOW);
}
//右轉
void you()
{
digitalWrite(Zhuang1, LOW);
digitalWrite(Zhuang2, HIGH);
}
//停止
void ting()
{
digitalWrite(Dong1, LOW);
digitalWrite(Dong2, LOW);
}
注:在操作程序中對于前后左右的控制可能會出錯自己可以根據小車運行的情況進行相應的代碼改動
4.ESP82660WiFi
Wemos D1的一個很大優勢就是集成了ESP8266WiFi模塊,而且運行WemosD1平臺有自帶的ESP8266的封裝庫,在這里我們只需要知道如何去呼叫庫函式使用就可以了,
具體操作
#include<ESP8266WiFi.h> //所需的頭檔案
char *ssid = "nova 5 Pro"; //WiFi熱點名稱 這里大家根據自己來就可以了
char *password = "yin1234567"; //WiFi密碼
int port = 8888; //埠號
WiFiServer server(port);
//初始化wifi 這里的初始化代碼差不多一個模板在使用的時候可以直接用
void initwifista()
{
WiFi.mode(WIFI_STA);//設定STA模式
WiFi.begin(ssid, password); //連接網路
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP());//通過串口列印地址
}
void setup()
{
initwifista();
Serial.begin(115200);
server.begin();
}
void loop()
{
char cmd;
WiFiClient client = server.available(); //服務初始化
while (client.connected())
{
while (client.available() > 0)
{
cmd = client.read();
if(cmd=='q'){
Serial.println("xaio yin student");
//滿足自己所輸入的可以更改要實作的功能
}
else
{
}
}
}
}
4.WiFi小車所需要的器材使用方法就差不多都講完了(話不多說我們在來看看整體代碼吧,讓小車跑起來吧 嘻嘻是不是有點成就感鴨)
#include<ESP8266WiFi.h>
#define Dong1 D6
#define Dong2 D7
#define Zhuang1 D4
#define Zhuang2 D5
#define Ecno D2
#define Trig D8
char *ssid = "nova 5 Pro";
char *password = "yin1234567";
int port = 8888;
WiFiServer server(port);
void initchaosbo()
{
pinMode(Ecno,INPUT);
pinMode(Trig,OUTPUT);
}
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Ecno,HIGH);
}
void initwifista()
{
WiFi.mode(WIFI_STA);//設定STA模式
WiFi.begin(ssid, password); //連接網路
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP());//通過串口列印地址
}
void initL9110s()
{
pinMode(Dong1, OUTPUT);
pinMode(Dong2, OUTPUT);
pinMode(Zhuang1, OUTPUT);
pinMode(Zhuang2, OUTPUT);
}
void huo()
{
digitalWrite(Dong1, HIGH);
digitalWrite(Dong2, LOW);
}
void qian()
{
digitalWrite(Dong1, LOW);
digitalWrite(Dong2, HIGH);
}
void zuo()
{
digitalWrite(Zhuang1, HIGH);
digitalWrite(Zhuang2, LOW);
}
void zheng()
{
digitalWrite(Zhuang1, LOW);
digitalWrite(Zhuang2, LOW);
}
void you()
{
digitalWrite(Zhuang1, LOW);
digitalWrite(Zhuang2, HIGH);
}
void ting()
{
digitalWrite(Dong1, LOW);
digitalWrite(Dong2, LOW);
}
void setup() {
initL9110s();
initchaosbo();
Serial.begin(115200);
initwifista();
server.begin();
}
void loop() {
char cmd;
long dis;
dis=getTime()/58;
WiFiClient client = server.available(); //服務初始化
while (client.connected())
{
while (client.available() > 0)
{
cmd = client.read();
switch (cmd)
{
case 'q':
qian();
if(dis<=10)
{
ting();
}
break;
case 'h':
huo();
break;
case 'z':
zuo();
break;
case 'y':
you();
break;
case 's':
ting();
break;
case 'd':
zheng();
break;
}
}
}
}
5.對了這里我忘記說用TCP來控制小車了,其實原理很簡單在執行程序中我們會用到ComAssistant(當然也可以用其他軟體)這個串口軟體來獲取我們所需要的IP地址,注意在使用程序中我們也需要將對應的埠號波特率設定成我們在代碼中設定的一樣哦,然后在TCP用我們所獲取的ID進行遠程主機連接 在根據自己的代碼發送相應的指令就可以啦,
圖5.

三、智能垃圾桶
在這里就不仔細說了所用到的芯片還是WemosD1 超聲波與前面的WiFi小車的原理一模一樣只是多一個多舵機的處理這里我們使用的是SG90舵機,
3.SG90舵機
| 型號 | SG90 重量13克 |
|---|---|
| 作業電壓 | 4.8v~6v(3.3v也可以) |
| 三線對應埠 | 紅色:正極 棕色:GND 橙色:信號線 |
圖6.整體效果展示

具體操作
#include<Servo.h> //所需要用到的頭檔案
#define Ecno D2
#define Trig D8
#define BEEP D5 //這里加了一個蜂鳴器可以根據距離的長短來控制蜂鳴器的響與不響
Servo myDuoJi;
#define DuoPin D5 //定義舵機
//初始化蜂鳴器
void initfmq()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH); // 在運行時我們先將其設定為高電平避免程式一運行蜂鳴器就響了
}
void setup() {
// put your setup code here, to run once:
myDuoJi.attach(DuoPin); // 接入舵機
initchaosbo();
Serial.begin(115200);
myDuoJi.write(180); //翻轉的度數
//initfmq();
}
//初始化超聲波
void initchaosbo()
{
pinMode(Ecno,INPUT);
pinMode(Trig,OUTPUT);
}
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(30);
digitalWrite(Trig,LOW);
return pulseIn(Ecno,HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
long dis;
dis=getTime()/58;
Serial.println(dis);
Serial. println("cm");
if(dis<4)
{
// digitalWrite(BEEP,LOW);
// delay(1000);
myDuoJi.write(90);
delay(2000);
}
else
{
//digitalWrite(BEEP,HIGH);
myDuoJi.write(180);
}
}
以上就是WiFi小車和智能垃圾桶的全部代碼了,個人的理解如果有錯誤的地方希望大家能夠指出,相互學習共同進步(沖鴨),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/206151.html
標籤:其他
上一篇:IEC61499 編程實戰(1)-按鍵控制LED 閃爍
下一篇:二哈實作人臉識別
