簡介
-
「上面的視頻就是制作成型的感應式垃圾桶,手靠近感應器的時候,就可以自動開蓋大概一秒,自動再蓋上,它的用處可大了,比如:用來喝水,用來泡面或者用來當筆筒,總之垃圾桶能干的事情,它一樣都干不了??????」 -
「來合個影」
緣起
-
「哈哈哈,看到抖音使用樹莓派、單片機等等小玩意,制作好玩的東西,於是決定在家也玩一玩破板子,破感應器,破垃圾桶,破蜂鳴器制作一個感應垃圾桶。必須要在無聊的生活中自己找尋樂趣!!!」
硬件簡介
超聲波感應器
-
「前面兩個圓柱形的東西就是一個超聲波感應器,一個是發射口,一個是接收口,基本工作原理就是發射口發射超聲波,另一個口會接受反射回來的超聲波,然后根據聲速以及時間來計算前方障礙物,也就是我們的手,距離垃圾桶有多遠,我們通過編寫程序來設置,多少多少距離內開蓋,超過多少距離關蓋。」
Arduino電路板
-
「垃圾桶后面沾了一塊電路板,這塊電路板就是控制的核心,我們的程序要燒錄的地方,給了垃圾桶以大腦才能完成任務。這塊板子是Ardunio平台的,上面有很多接口,用於供電,傳輸信號等等,上個圖」
實現原理
-
「基本到這里就介紹完硬件了,下面來介紹程序實現,我感覺沒啥興趣的基本到這里就看完了,總之兩個字,NB!!!!」 -
「先上完整代碼,這個項目是使用C語言實現的,平台是Ardunio平台,要引入它的實現包」
#include<Servo.h>
#define DuoPIN D5
#define Echo D2
#define Trig D8
Servo myDuoJi;
long getTime(){
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo(){
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void setup(){
initChaoShengBo();
myDuoJi.attach(DuoPIN);
Serial.begin(115200);
}
void loop(){
long dis;
dis = getTime()/58;
` 1
if(dis<10){43RFGUYT6
myDuoJi.write(70);
delay(700);
myDuoJi.write(90);
delay(1000);
myDuoJi.write(100);
delay(1140);
myDuoJi.write(90);
}else{
myDuoJi.write(90);
}
}
-
「然后我們逐一解析」
1.啟動函數
-
「先引入Ardunio平台下馬達機給我們提供的工具包,里面是一些綁定上硬件驅動的函數集合」
#include<Servo.h>
-
「再看setup()函數,這個函數是程序運行的開始,作用就是初始化板子,也就是做准備工作,啥都准備好了,開始下一個函數loop(),這里都是業務邏輯」
void setup(){
initChaoShengBo();
myDuoJi.attach(DuoPIN);
Serial.begin(115200);
}
-
「第一行初始化超聲波感應器initChaoShengBo」
void initChaoShengBo(){
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
-
「基本意思就是綁定接口(也就是感應器上的的端口是什么意思),Echo口作為輸入端,Trig口作為輸出端」 -
「然后myDuoJi.attach(DuoPIN)的意思就是旋轉馬達接口綁定到DuoPIN這個口」
#define DuoPIN D5
#define Echo D2
#define Trig D8
Servo myDuoJi;
-
「從上面看出來就是電路板的接口D5綁定馬達的接口,D2綁定到感應器的輸出接口,D8綁定到感應器的觸發接口。在下面一行就是初始化一個Servo實例(對象)」
2.業務邏輯
-
「然后板子在執行完setup函數之后,會無線循環業務邏輯,也就是不斷執行loop函數」
void loop(){
long dis;
dis = getTime()/58;
` 1
if(dis<10){43RFGUYT6
myDuoJi.write(70);
delay(700);
myDuoJi.write(90);
delay(1000);
myDuoJi.write(100);
delay(1140);
myDuoJi.write(90);
}else{
myDuoJi.write(90);
}
}
-
「先定義一個long型變量用力保存接收感應距離,然后下一行getTime函數就是用來返回發送到接收超聲波的時間間隔,然后除以58即為距離,至於58怎么來的,自己算吧,聲音在空氣中的傳播速度約為340m/s,換算一下就好了。哦,對了前面返回的時間的單位是微秒。」 -
「距離小於10cm,馬達機開始旋轉0.7秒,速度是20」
❝這里就是要說明一下,write里面的參數是速度的意思,90代表靜止不動,0代表順時針全速選裝,180代表逆時針全速旋轉,數值離90越遠,代表速度越快,比如參數100就是指以(100-90)的速度逆時針旋轉。
❞
-
「然后delay函數代表停頓多少毫秒,后面就是蓋蓋了,else語句就是距離大於10,馬達一直停止」