目錄
1、組成器件
2、總體方案框圖
3、 原理
4、電路連接圖
5、代碼
6、作品展示
7、總結(jié)
1、組成器件
UNO開發(fā)板
兩個(gè)超聲波模塊
三個(gè)舵機(jī)
若干根杜邦線
一瓶消毒液
一個(gè)可以打開的盒子
面包板。
2、總體方案框圖
3、 原理
超聲波模塊檢測距離,然后根據(jù)距離判斷使得舵機(jī)進(jìn)行轉(zhuǎn)動。
4、電路連接圖
?
5、代碼
#include <Servo.h> //servo庫
Servo servo; //創(chuàng)建舵機(jī)對象來控制垃圾桶舵機(jī)
Servo myservo; // 創(chuàng)建舵機(jī)對象來控制洗手液舵機(jī)
int trigPin= 5;
int echoPin = 6;
int servoPin= 7;
long duration, dist;
long aver[3]; //定義存放距離的數(shù)組
long aver1[3];
//洗手液
int servopin1= 4;
int trigpin1= 10;
int echopin1= 11;
long duration1,distance;
int pos=0;
void setup() {
//垃圾桶
Serial.begin(9600);
servo.attach(7);//把連接在引腳7上的舵機(jī)賦予舵機(jī)對其控制
pinMode(trigPin, OUTPUT); //要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài)
pinMode(echoPin, INPUT);
servo.write(0); //通電時(shí)關(guān)閉蓋子
//洗手液
pinMode(trigpin1, OUTPUT);
pinMode(echopin1, INPUT);
myservo.attach(4); // 把連接在引腳9上的舵機(jī)賦予舵機(jī)對其控制
myservo.write(0); // 將伺服設(shè)置為初始0度
}
void loop() {
//垃圾桶
for (int i=0;i<=2;i++) { //平均距離
digitalWrite(trigPin, HIGH); //產(chǎn)生一個(gè)10us的高脈沖去觸發(fā)TrigPin
delayMicroseconds(2);
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
duration = pulseIn(echoPin, HIGH);
dist = (duration/2) / 10; // 檢測脈沖寬度并測算出距離
aver[i]=dist;
delay(10); //測量之間的延遲
}
dist=(aver[0]+aver[1]+aver[2])/3;
delay(1000);
Serial.println ("垃圾桶測得距離:");
Serial.println(dist);
if ( dist<20) {
//根據(jù)需要更改距離
servo.attach(7);
delay(1);
servo.write(90);
delay(3000);
servo.write(20);
delay(1000);
}
//洗手液
for (int i=0;i<=2;i++) {
digitalWrite(trigpin1, LOW);
delayMicroseconds(2);
// 將trigpin1設(shè)置為高狀態(tài)10微秒
digitalWrite(trigpin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigpin1, LOW);
// 讀取echopin1,以微秒為單位返回聲波傳播時(shí)間
duration1= pulseIn(echopin1, HIGH);//pulseIn函數(shù)用于讀取引腳脈沖的時(shí)間長度,脈沖可以是HIGH或LOW。
//如果是HIGH,函數(shù)將先等引腳變?yōu)楦唠娖?,然后開始計(jì)時(shí),一直到變?yōu)榈碗娖綖橹埂7祷孛}沖持續(xù)的時(shí)間長短, 單位為ms。如果超時(shí)還沒有讀到的話, 將返回0。
// 計(jì)算距離
distance = (duration1/2) / 10; //獲取距離 檢測脈沖寬度并測算出距離
aver1[i]=distance;
delay(10); //測量之間的延遲
}
distance=(aver1[0]+aver1[1]+aver1[2])/3;
delay(1000);
Serial.println("洗手液測得距離:");
Serial.println(distance);
if(distance<20)
{ //檢查距離小于20cm
myservo.write(180);
delay(1000);
myservo.write(-180);
delay(100);
}
}
6、作品展示
arduino課程設(shè)計(jì)文章來源:http://www.zghlxwxcb.cn/news/detail-503871.html
7、總結(jié)
本次課程設(shè)計(jì)我采用了通過超聲波模塊來控制舵機(jī)轉(zhuǎn)動以此來實(shí)現(xiàn)垃圾桶的打開和關(guān)閉以及洗手液的按壓,總體設(shè)計(jì)比較簡單。文章來源地址http://www.zghlxwxcb.cn/news/detail-503871.html
到了這里,關(guān)于【Arduino】arduino期末課程設(shè)計(jì)作品——新型垃圾桶與消毒液一體化設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!