簡介
「上面的視頻就是制作成型的感應式垃圾桶,手靠近感應器的時候,就可以自動開蓋大概一秒,自動再蓋上,它的用處可大了,比如:用來喝水,用來泡面或者用來當筆筒,總之垃圾桶能干的事情,它一樣都干不了??????」 「來合個影」 
緣起
「哈哈哈,看到抖音使用樹莓派、單片機等等小玩意,制作好玩的東西,于是決定在家也玩一玩破板子,破感應器,破垃圾桶,破蜂鳴器制作一個感應垃圾桶,必須要在無聊的生活中自己找尋樂趣!!!」
硬體簡介
超聲波感應器
「前面兩個圓柱形的東西就是一個超聲波感應器,一個是發射口,一個是接收口,基本作業原理就是發射口發射超聲波,另一個口會接受反射回來的超聲波,然后根據聲速以及時間來計算前方障礙物,也就是我們的手,距離垃圾桶有多遠,我們通過撰寫程式來設定,多少多少距離內開蓋,超過多少距離關蓋,」
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,馬達一直停止」
OK講完了
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/233747.html
標籤:嵌入式
