Squirt - Arduino, rörelse aktiverat vattenkanoner (3 / 3 steg)
Steg 3: Koden
#include < ServoTimer1.h >
/*
- "Spruta". Jonathan Robson Feb 2009.
*
- En PIR aktiverar en servo & pump. Servo flyttar sin arm till en slumpmässig position mellan 60 och
- 120 grader, bränder en pump för en halv sekund och avkastning att centrera (90 grader). Cykeln upprepas
- 3 gånger med slumpvisa mellanrum mellan hälften och tre sekunder sedan väntar på att upptäcka ytterligare rörelse.
- Krets baserad på http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoads
- PIR kod anpassad från http://www.liquidware.org/view.php?id=63
- Random kod anpassad från www.arduino.cc/en/Tutorial/Blink & www.arduino.cc/en/Reference/Random
- Servo kod anpassad från http://www.ladyada.net/make/mshield/use.html
*/
int transistorPin = 8; transistor bas ansluten till stift 8
ServoTimer1 servo1; definierar servo
lång randOff = 0; Initiera en variabel för OFF tiden mellan skott
lång randNumber; Initiera en variabel för servo position vinkel och fördröjning mellan skott
void setup()
{
servo1.attach(10); servo på stift 10
pinMode (8, OUTPUT); Ange det transistorn stiftet 8 till pump
pinMode (5, ingång); ställa in PIR stift 5 som indata
digitalWrite 8, låg. definierar låg som rörelse
randomSeed (analogRead (0)); randomize
}
int pinin = 0;
lång countint = 0;
void loop()
{
Pinin = digitalRead(5); läser att PIR-sensorn
medan (pinin == 0)
{
Pinin = digitalRead(5);
}
servo1.write(90); ställer in servo till mitten
randOff = random (500, 3000); Generera OFF tid mellan 1/2 och 3 sekunder
Delay(randOff); väntar på en slumpmässig tidpunkt medan OFF
servo1.write (randNumber = random (60, 120)); servo till slumpmässig position inom 30 grader i centrum
Delay(400); ger servo tid att komma dit
digitalWrite (transistorPin, hög); vänder pump på
Delay(500); bränder pump för 1/2 sekund
digitalWrite (transistorPin, låg); Vänd pumpen av
servo1.write(90); rör sig servo tillbaka till mitten
randOff = random (500, 3000); generera nya OFF tid mellan 1/2 och 3 sekunder och upprepa
Delay(randOff);
servo1.write (randNumber = random (60, 120));
Delay(400);
digitalWrite (transistorPin, hög);
Delay(500);
digitalWrite (transistorPin, låg);
servo1.write(90);
randOff = random (500, 3000); Generera OFF tid mellan 1/2 och 3 sekunder och upprepa
Delay(randOff);
servo1.write (randNumber = random (60, 120));
Delay(400);
digitalWrite (transistorPin, hög);
Delay(500);
digitalWrite (transistorPin, låg);
servo1.write(90);
Delay(3000); ger PIR tid att "lösa" innan du läser igen
}