組員:411214323林時寬
動機:我原本的組員家裡有很多貓就想說做那個
原定是做用手機可以控制的餵食器但後來因為忘記在接線的時候裝上電阻導致ESP8266MOD燒壞導致無法使用,所以決定刪掉使用WIFI模組的部分單純使用超聲波模組,就不用手機操控那麼麻煩。
#include <Servo.h>
#define TRIG_PIN 12
#define ECHO_PIN 11
#define SERVO_PIN 9
const unsigned long INTERVAL_LONG = 60000UL;
const unsigned int INTERVAL_SHORT = 1000;
const int DISTANCE_THRESHOLD = 5;
const int DESIRED_ANGLE = 90;
const float CALIBRATION_FACTOR = 90.0 / 117.0;
Servo myServo;
long measureDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
long distance = (duration * 0.034) / 2;
return distance;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
myServo.attach(SERVO_PIN);
myServo.write(0);
}
void loop() {
delay(INTERVAL_LONG);
long dist = measureDistance();
if (dist > DISTANCE_THRESHOLD) {
int calibratedAngle = (int)(DESIRED_ANGLE * CALIBRATION_FACTOR);
myServo.write(calibratedAngle);
delay(500);
while (true) {
delay(INTERVAL_SHORT);
dist = measureDistance();
if (dist <= DISTANCE_THRESHOLD) {
myServo.write(0);
delay(500);
break;
}
}
}
}
HC-SR04 的介紹是說能偵測到2公尺但我實際測量大概是介於10~11公分,盒子的寬為12公分但偵測不到東西,我把偵測距離設在盒子的中間大概在5公分左右,然後我在程式中讓馬達旋轉90度實際上會轉大概117度,所以把程式中的角度逐一改改到70度是差不多的(擋板的寬度有多給)
伺服馬達應該是要插到5V但我發現3.3V也可以用就用3.3V
以後一定會記得要插電組,可能也是因為我一直通電才導致燒壞,如果時間不長應還能挽救
下次我想增加 RTC 模組,實現精準的定時控制,感覺能夠定時也不用使用WIFI那麼麻煩