Paso 3: El código
#include < ServoTimer1.h >
/*
- "Squirt". Jonathan Robson Feb de 2009.
*
- Un PIR activa una bomba y servo. Servo mueve su brazo a una posición aleatoria entre 60 y
- 120 grados, se activa una bomba para medio segundo y vuelve al centro (90 grados). Repeticiones de ciclo
- 3 veces en intervalos al azar de entre la mitad y 3 segundos luego esperas para detectar el movimiento más.
- Circuito basado en http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoads
- Código PIR adaptado de http://www.liquidware.org/view.php?id=63
- Código al azar adaptado de www.arduino.cc/en/Tutorial/Blink & www.arduino.cc/en/Reference/Random
- Código de servo adaptada de http://www.ladyada.net/make/mshield/use.html
*/
int transistorPin = 8; base del transistor conectado al pin 8
ServoTimer1 servo1; define el servo
randOff largo = 0; Inicializar una variable para el tiempo de apagado entre tomas
largo randNumber; Inicializar una variable de ángulo de posición del servo y retardo entre tomas
void setup()
{
servo1.Attach(10); servo en el pin 10
pinMode (8, salida); configurar el pin del transistor 8 como salida a la bomba
pinMode (5, entrada); configurar el pin PIR 5 como entrada
digitalWrite (8, bajo); BAJA se define como movimiento
randomSeed (analogRead (0)); aleatorizar
}
pinin int = 0;
countint largo = 0;
void loop()
{
Pinin = digitalRead(5); Lee el sensor de PIR
mientras que (pinin == 0)
{
Pinin = digitalRead(5);
}
servo1.Write(90); sistemas servo al centro
randOff = random (500, 3000); generar el tiempo entre 1/2 y 3 segundos
Delay(randOff); espera un tiempo aleatorio mientras que OFF
servo1.Write (randNumber = random (60, 120)); servo a la posición aleatoria dentro de 30 grados del centro de
Delay(400); da tiempo de servo para llegar
digitalWrite (transistorPin, HIGH); bomba se convierte en
Delay(500); bomba de incendios por 1/2 segundo
digitalWrite (transistorPin, bajo); vueltas de la bomba de
servo1.Write(90); retrocede el servo al centro
randOff = random (500, 3000); generar nuevos el tiempo entre 1/2 y 3 segundos y repetir
Delay(randOff);
servo1.Write (randNumber = random (60, 120));
Delay(400);
digitalWrite (transistorPin, HIGH);
Delay(500);
digitalWrite (transistorPin, bajo);
servo1.Write(90);
randOff = random (500, 3000); generar el tiempo entre 1/2 y 3 segundos y repetir
Delay(randOff);
servo1.Write (randNumber = random (60, 120));
Delay(400);
digitalWrite (transistorPin, HIGH);
Delay(500);
digitalWrite (transistorPin, bajo);
servo1.Write(90);
Delay(3000); da el tiempo PIR para "resolver" antes de leer otra vez
}