Paso 2: electrónica
Este proyecto utiliza Arduino para LEDs y sensores de control. Cinco LEDs rojos se utilizan a la luz de la calabaza. Dos LEDs se deben poner dentro de una boca, dos en los ojos y uno en una parte en rodajas de una cabeza. Sensor de movimiento PIR se debe poner en la nariz de la calabaza. El LED verde debe poner dentro de cabeza de calabaza y se usa para indicar cuándo está calibrado el sensor PIR. Zumbador se debe poner dentro de una boca de calabazas. El motor servo se debe poner encima de la calabazas cabeza hacia cada otro por lo que puede levantar en rodajas parte.
Arduino enciende LEDs, motores y zumbador en cuando el sensor PIR detecta movimiento. Zumbador luego juega la melodía miedosa (tema de Halloween), servos están levantando parte rebanada de la cabeza de calabaza y rojo LED es la iluminación del ambiente.
Partes:
- 1 x Arduino (cualquier tipo) - eBay
- resistencia de ohmios 6 x 220 - eBay
- 5 x LED rojo - eBay
- 1 x LED verde - eBay
- 2 x Motor de Servo - eBay
- 1 x timbre - eBay
- 1 sensor de movimiento x PIR - eBay
- 1 x placa - eBay
- Pocos cables de (M/M y F/F) - eBay
- Batería (o usted puede cortar un agujero en una calabaza y se potencia a través ordenador)
Cableado:
Primer motor servo:
- VCC de 5V de Arduino
- GND a gnd de Arduino
- de la señal al pin digital 9 de Arduino
Motor servo de segunda:
- VCC de 5V de Arduino
- GND a gnd de Arduino
- de la señal al pin digital 11 en Arduino
LED rojo:
- ánodos (pata más larga) a la resistencia de 220 Ohm que está conectado a los pines digitales 2,3,4,5,6 en Arduino
- (pierna más corta) de cátodos a gnd de Arduino
LED verde:
- ánodo a la resistencia de 220 Ohm que está conectado al pin digital 10 en Arduino
- cátodo a gnd de Arduino
Zumbador:
- una pierna para pin digital 8 en Arduino
- otro a gnd de Arduino
Sensor PIR:
- VCC de 5V de Arduino
- GND a gnd de Arduino
- salida digital pin Arduino en 7
Código:
Primera parte del código es definir las variables para un pins y notas para un zumbador. Notas son tomadas de este instructable por eserra. Yo no soy gona copia Nota definiciones aquí, usted puede comprobar un vinculado instructable o en un archivo de dibujo completo al final de este paso.
#include<Servo.h>Servo servo;Servo servo2;#define buzzer 8#define pirPin 7</p><p>int okLed = 10;</p><p>boolean lockLow = true;boolean takeLowTime;long unsigned int pause = 5000;long unsigned int lowIn;int ledPin[] = {2, 3, 4, 5, 6};
Funciones de configuración define modos de pin, devuelve motores servo en posición de salida y calibra el sensor PIR.
void setup() { servo.attach(9); servo2.attach(11); servo.write(170); //my start position of servos (so their attachments are horizontal ) servo2.write(170); pinMode(pirPin, INPUT); digitalWrite(pirPin, LOW); for (int i = 0; i < 5; i++) { //go trough every red LED pinMode(ledPin[i], OUTPUT); } pinMode(buzzer, OUTPUT);<br> pinMode(okLed, OUTPUT); digitalWrite(okLed, LOW); delay(30000); //callibration time for a PIR sensor digitalWrite(okLed, HIGH);}
Función de bucle comprueba si el PIR detecta movimiento (digitalRead en sensor PIR debe devolver alta), si se detecta movimiento comienza la función motionAction. Explicación de algoritmos completo para trabajar con el sensor de PIR puede encontrarse aquí así que no voy a explicar aquí.
void loop() { delay(50); if (digitalRead(pirPin) == HIGH) { if (lockLow) { lockLow = false; motionAction(); delay(50); } takeLowTime = true; } if (digitalRead(pirPin) == LOW) {</p><p> if (takeLowTime) { lowIn = millis(); takeLowTime = false; } if (!lockLow && millis() - lowIn > pause) { lockLow = true; delay(50); } }}
motionAction función enciende todos los LEDs rojo, mueve motores servos en 90 grados y comienza a jugar la melodía. Después de eso vuelve motores en posición inicial y comienza a tocar la misma melodía otra vez pero en una octava inferior. Repite esas acciones cinco veces.
int motionAction () {<br> for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) { digitalWrite(ledPin[i], HIGH); } servo.write(80); servo2.write(80); tone(buzzer, Db6, E); delay(E + 1); tone(buzzer, Gb5, E); delay(E + 1); tone(buzzer, Gb5, E); delay(E + 1); tone(buzzer, Db6, E); delay(E + 1); tone(buzzer, Gb5, E); delay(E + 1); tone(buzzer, Gb5, E); delay(E + 1); tone(buzzer, D6, Q); delay(Q + 1); delay(1000); servo.write(170); servo2.write(170); tone(buzzer, Db5, E); delay(E + 1); tone(buzzer, Gb4, E); delay(E + 1); tone(buzzer, Gb4, E); delay(E + 1); tone(buzzer, Db5, E); delay(E + 1); tone(buzzer, Gb4, E); delay(E + 1); tone(buzzer, Gb4, E); delay(E + 1); tone(buzzer, D5, Q); delay(Q + 1); for (int i = 0; i < 5; i++) { digitalWrite(ledPin[i], LOW); } delay(1000); }}