所謂密室自動門宵凌,就是這門不是輕易能打開的,存在著某些玄關(guān)需要你去破解止后。這里設(shè)計的這個門瞎惫,是通過不斷晃動手中的傳感器才能開。
有人會說译株,傳感器我知道是那個數(shù)字震動傳感器瓜喇,那門呢?你沒看錯就是舵機(jī)歉糜,它能控制角度乘寒。所以,所謂的門的轉(zhuǎn)動匪补,是靠舵機(jī)來完成的伞辛。做個來看下效果就知道了~
拓展學(xué)習(xí):和12歲小同志搞創(chuàng)客開發(fā):遙控舵機(jī)_不脫發(fā)的程序猿-CSDN博客
項目連線如下所示:
實現(xiàn)代碼如下所示:
#include <Servo.h>
int sensorPin = 3;? ? ? ? ? //震動傳感器 – Digital 3
Servo myservo;? ? ? ? ? ? ? ?
int pos = 0;?
void setup() {
? ? Serial.begin(9600);
? ? pinMode(sensorPin, INPUT);?
? ? myservo.attach(9);? ? ? ? //舵機(jī) – Digital 9
}
void loop() {
? int sensorState = digitalRead(sensorPin);//讀取震動傳感器的狀態(tài)
? Serial.println(sensorState);
? if(!sensorState){? //一旦狀態(tài)發(fā)生變化,舵機(jī)加2°夯缺,直到加到180°
? ? ? ? ? ? pos = pos +2;
? ? ? ? ? ? if(pos >=180){? ? ?
? ? ? ? ? ? ? ? pos = 180;? ? ? ? ? ? ? ?
? ? ? ? ? ? }
? ? ? ? ? ? myservo.write(pos);? ? ? //寫入舵機(jī)的角度? ? ?
? ? ? ? ? ? Serial.println(pos);? ? //串口同時輸出角度值
? ? ? ? ? ? delay(100);?
? } else{? //狀態(tài)不發(fā)生變化蚤氏,舵機(jī)減2°,直到減到0°
? ? ? ? ? ? pos = pos - 2;
? ? ? ? ? ? if(pos <=0){
? ? ? ? ? ? ? ? pos = 0;? ? ? ? ? ? ? ?
? ? ? ? ? ? }
? ? ? ? ? ? myservo.write(pos);? ? ? ? ? ? ?
? ? ? ? ? ? Serial.println(pos);
? ? ? ? ? ? delay(100);? ?
? }
? delay(1);? ? ? ?
}
代碼的開始先調(diào)用<Servo.h>庫:
#include <Servo.h>
這個庫已經(jīng)在Arduino IDE中了喳逛,可以打開Arduino安裝路徑瞧捌,例如我的安裝路徑:D:\Arduino\libraries\Servo\src,這就是Servo庫所在位置润文。
如果要在代碼中用庫中函數(shù)姐呐,是不能直接調(diào)用的,需要給庫找個中介典蝌,讓“他”建立代碼和庫中間的關(guān)系曙砂,也就是類的使用:
Servo myservo;
這里的myservo起到的就是這個作用。建立聯(lián)系骏掀,之后調(diào)用庫中的方法和變量的話鸠澈,就要按照下面這個模式進(jìn)行:
myservo.方法名
myservo.變量
如何定義舵機(jī)是接到那個引腳呢?用到就是attach()方法了。
myservo.attach(引腳ID); //舵機(jī) – Digital 9
知道了如何定義一個舵機(jī)之后截驮,如何把對應(yīng)的角度寫進(jìn)去呢?
myservo.write(角度); //寫入舵機(jī)的角度
最后笑陈,運行程序,不斷的晃動震動傳感器葵袭,可以看到舵機(jī)的角度會隨之變大涵妥。停止晃動后,舵機(jī)角度又開始慢慢減小坡锡。好比一扇門慢慢打開蓬网,合上窒所。