Arduino powered Halloween pumpa med rörelsedetektor (2 / 5 steg)
Steg 2: elektronik
Detta projekt använder Arduino kontroll sensorer och lysdioder. Fem röda lysdioderna används för ljus pumpa. Två lysdioder bör sättas i en mun, två ögon och en på en skivad del av ett huvud. PIR rörelsesensor bör sättas i pumpor näsa. Grön LED bör läggas inuti pumpa huvudet och det används för att ange när PIR-sensor är kalibrerad. Summern bör sättas inuti en pumpor mun. Servomotor bör läggas ovanpå den pumpor huvud som vetter mot varje andra så de kan lyfta skivad del.
Arduino vänder lysdioder, motorer och summern på när PIR-sensorn upptäcka rörelse. Summern spelar sedan skrämmande melodin (Halloween tema), servon är lyft skivad del av pumpor huvudet och röda lysdioderna belysning av atmosfären.
Delar:
- 1 x Arduino (helst) - eBay
- 6 x 220 Ohm resistor - eBay
- 5 x röd LED - eBay
- 1 x grön LED - eBay
- 2 x servomotor - eBay
- 1 x Summer - eBay
- 1 x PIR rörelsesensor - eBay
- 1 x bakbord - eBay
- Några trådar (M/M och F/F) - eBay
- Batteri (eller du kan skära ett litet hål på en pumpa och driva fram datorn)
Ledningar:
Första servomotor:
- VCC till 5V på Arduino
- GND till gnd på Arduino
- signalen till digital stift 9 på Arduino
Andra servomotor:
- VCC till 5V på Arduino
- GND till gnd på Arduino
- signalen till digital stift 11 på Arduino
Röda lysdioder:
- anoder (längre ben) till 220 ohms motstånd som är anslutna till digitala stiften 2,3,4,5,6 på Arduino
- katoder (kortare ben) till gnd på Arduino
Gröna lysdioder:
- anod till 220 ohms motstånd som är anslutna till digitala stift 10 på Arduino
- katod till gnd på Arduino
Summern:
- ett ben till digital stift 8 på Arduino
- andra till gnd på Arduino
PIR-sensor:
- VCC till 5V på Arduino
- GND till gnd på Arduino
- ut till digital stift 7 på Arduino
Kod:
Första delen av koden är att definiera variabler för ett stift och anteckningar för en Summer. Anteckningar är tagna från detta instructable av eserra. Jag är inte gona kopia notera definitioner här, du kan kontrollera dem en länkad instructable eller en komplett skiss fil i slutet av detta steg.
#include < Servo.h >
Servo servo;
Servo servo2;
#define Summer 8
#define pirPin 7 < /p >< p > int okLed = 10; < /p >< p > boolean lockLow = sant;
booleska takeLowTime;
länge osignerade int paus = 5000;
länge osignerade int lowIn;
int ledPin [] = {2, 3, 4, 5, 6};
Setup funktioner definierar pin lägen, returnerar servomotorer till startposition och kalibrerar PIR-sensor.
void setup() {
servo.attach(9);
servo2.attach(11);
servo.write(170); min startposition för servon (så deras bilagor är horisontell)
servo2.write(170);
pinMode (pirPin, ingång);
digitalWrite (pirPin, låg);
för (int jag = 0; jag < 5; i ++) {//go tråg varje röd LED
pinMode (ledPin [i], produktionen);
}
pinMode(buzzer, OUTPUT); < br > pinMode (okLed, produktionen);
digitalWrite (okLed, låg);
Delay(30000); kalibreringsmönstret tid för en PIR-sensor
digitalWrite (okLed, hög);
}
Loop funktion kontrollerar om PIR upptäckt rörelse (digitalRead på PIR-sensorn ska returnera hög), om rörelse detekteras det börjar motionAction funktion. Fullständig algorythm förklaring för att arbeta med PIR-sensor finns här så jag inte vill förklara det här.
void loop() {
Delay(50);
om (digitalRead(pirPin) == hög) {
om (lockLow) {
lockLow = false;
motionAction();
Delay(50);
}
takeLowTime = sant;
}
om (digitalRead(pirPin) == låg) {< /p >< p > om (takeLowTime) {
lowIn = millis();
takeLowTime = false;
}
om (! lockLow & & millis() - lowIn > pausa) {
lockLow = sant;
Delay(50);
}
}
}
motionAction funktion tänds alla röda lysdioder, flyttar servomotorer i 90 grader och börjar spela melodin. Efter att den returnerar motorer till startposition och börjar spela samma melodi igen men i en lägre Oktaven. Det upprepar de åtgärderna fem gånger.
int motionAction () {< br > för (int jag = 0; jag < 5; i ++) {
för (int jag = 0; jag < 5; i ++) {
digitalWrite (ledPin [i], hög);
}
servo.write(80);
servo2.write(80);
tonen (Summer, Db6, E);
fördröjning (E + 1);
tonen (Summer, Gb5, E);
fördröjning (E + 1);
tonen (Summer, Gb5, E);
fördröjning (E + 1);
tonen (Summer, Db6, E);
fördröjning (E + 1);
tonen (Summer, Gb5, E);
fördröjning (E + 1);
tonen (Summer, Gb5, E);
fördröjning (E + 1);
tonen (Summer, D6, Q);
fördröjning (Q + 1);
Delay(1000);
servo.write(170);
servo2.write(170);
tonen (Summer, Db5, E);
fördröjning (E + 1);
tonen (Summer, Gb4, E);
fördröjning (E + 1);
tonen (Summer, Gb4, E);
fördröjning (E + 1);
tonen (Summer, Db5, E);
fördröjning (E + 1);
tonen (Summer, Gb4, E);
fördröjning (E + 1);
tonen (Summer, Gb4, E);
fördröjning (E + 1);
tonen (Summer, D5, Q);
fördröjning (Q + 1);
för (int jag = 0; jag < 5; i ++) {
digitalWrite (ledPin [i], låg);
}
Delay(1000);
}
}