《創(chuàng)意風(fēng)扇》是第二章《智能風(fēng)扇》的最后一個專題,主要涉及到舵機(jī)和紅外避障傳感器兩個器件,并通過舵機(jī)制作出搖頭風(fēng)扇,通過紅外避障傳感器制作出自動跟蹤風(fēng)扇。最后通過幾種傳感器的介紹,拋磚引玉,試圖引導(dǎo)學(xué)生有更多的創(chuàng)意。
本文主要對本次課的重難點、主要教學(xué)設(shè)計的設(shè)計意圖以及學(xué)生上課的反應(yīng)做部分說明。
相關(guān)資源下載地址:http://pan.baidu.com/s/1kTqOYs3
1.搖頭風(fēng)扇
前面所學(xué)到的風(fēng)扇都是面向一個方向的,正當(dāng)學(xué)生產(chǎn)生質(zhì)疑的時候,搖頭風(fēng)扇應(yīng)運而生,學(xué)生對此還是很感興趣的。使風(fēng)扇搖頭需要用到舵機(jī),也稱伺服電機(jī)。標(biāo)準(zhǔn)的舵機(jī)有3條控制線,分別是電源、地和信號線。舵機(jī)的引腳定義為:棕色線——GND,紅色線——5V,橙色線——信號線,而信號線只能是數(shù)字口9或者10。我們使用的SG90舵機(jī)轉(zhuǎn)動的最大角度為180°。
有了上一專題學(xué)習(xí)的紅外庫為基礎(chǔ),這一專題趁熱打鐵,繼續(xù)引入庫函數(shù),程序如下:
#include
Servo myservo; // 創(chuàng)建一個伺服電機(jī)對象
int i;
void setup()
{
pinMode(5,OUTPUT);
myservo.attach(9); // 9號引腳輸出電機(jī)控制信號
}
void loop()
{
analogWrite(5,100);
for(i=0;i<180;i++){
myservo.write(i); // 設(shè)定伺服電機(jī)的位置
delay(100); // 等待電機(jī)旋轉(zhuǎn)到目標(biāo)角度
}
for(i=179;i>=0;i--){
myservo.write(i);
delay(100);
}
}
2.自動跟蹤風(fēng)扇
自動跟蹤風(fēng)扇是通過左右兩個紅外數(shù)字避障傳感器檢測障礙物的運動方向的,若左側(cè)傳感器檢測到障礙物而右側(cè)傳感器沒有檢測到,則舵機(jī)向左轉(zhuǎn)動;若右側(cè)傳感器檢測到障礙物而左側(cè)傳感器沒有檢測到,則舵機(jī)向右轉(zhuǎn)動;若兩側(cè)傳感器同時檢測到障礙物或者都沒檢測到障礙物,則保持原來方向。總之就是,手在哪風(fēng)扇就可以轉(zhuǎn)向那(前提是風(fēng)扇檢測到手并且角度不超過180)。
用到的紅外數(shù)字避障傳感器輸出的信號為數(shù)字信號,探測距離為3-18cm,引腳定義為:紅線——5V,黃線——信號,綠線——GND。程序如下:
#include //引入lib
Servo myservo;
int left=2;
int right=12;
int i;
int j;
int n=0;
void setup() {
myservo.attach(9);
}
void loop() {
analogWrite(5,200);
i=digitalRead(left);
j=digitalRead(right);
while(i==LOW && j==HIGH){//左轉(zhuǎn)
if(n<180){
n++;
myservo.write(m);
delay(100);
i=digitalRead(left);
j=digitalRead(right);
}
}
while(j==LOW && i==HIGH){//右轉(zhuǎn)
if(n>0){
n--;
myservo.write(n);
delay(100);
i=digitalRead(left);
j=digitalRead(right);
}
}
}
3.創(chuàng)意風(fēng)扇
創(chuàng)意風(fēng)扇基本屬于學(xué)生自由發(fā)揮的階段了,我們只是提供了幾種思路:定時風(fēng)扇(通過按鈕),溫控風(fēng)扇(溫度傳感器),傾倒自動停止風(fēng)扇(傾角傳感器)。然后讓學(xué)生小卒討論并嘗試實現(xiàn),可是由于時間關(guān)系,學(xué)生并沒有完成自己的創(chuàng)意。所以思考以后上課的時候是否可以單獨拿出一節(jié)課上創(chuàng)意風(fēng)扇。
下圖是自動跟蹤風(fēng)扇的實物圖: