Halloween släppa Spider (3 / 8 steg)
Steg 3: Arduino skiss
Jag använde 1K motstånden på led1Pin och led2Pin.
Jag använde 10K resistor på speakerPin går till 2N2222 transistor bas, marken till sändaren. Sedan emiter gick till ena sidan av växeln leksak och samlaren gick till den andra. Den här arbetat 2N2222 transistor som en switch.
Titta på kommentarer för arduino pin-ledningar.
#include < X10Firecracker.h >
#include < Servo.h >
Servo myservo; Ny instans av Servo.h
int rtsPin = 2; RTS linje för C17A - DB9 stift 7
int dtrPin = 3; DTR linje för C17A - DB9 stift 4
Anslut DB9 stift 5 till marken.
int servoPin = 5; Servo används för att lyfta rullen
int pirPin = 8;
int led1Pin = 10; Vänster ledde
int led2Pin = 11; Just ledde
int speakerPin = 12; Piezo summern högtalare
int bitDelay = 1; mS fördröjning mellan bitar (1 mS OK)
int ledStatus = 0;
int calibrationTime = 30.
länge osignerade int lowIn;
länge osignerade int paus = 5000;
booleska lockLow = sant;
booleska takeLowTime;
int booCounter = 1;
void setup() {
Serial.BEGIN(9600); Starta seriell kommunikation på 9600 baud
pinMode (led1Pin, produktionen); Set led1Pin digital stift till utgång
pinMode (led2Pin, produktionen); Set led1Pin digital stift till utgång
pinMode (speakerPin, produktionen); / / Set speakerPin digital stift till utgång
pinMode (servoPin, produktionen); Set led1Pin digital stift till utgång
myservo.attach(7); Atach servo på stift 7 för kontinuerlig rotation servo
X10.init (rtsPin, dtrPin, bitDelay); Initiera X10 C17A
pinMode (pirPin, ingång);
digitalWrite (pirPin, låg);
ge sensorn lite tid att kalibrera
Serial.Print ("kalibrera sensorn");
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(".");
Delay(1000);
}
Serial.println ("gjort");
Serial.println ("sensorn aktiv");
Delay(50);
myservo.write(140);
}
void loop() {
IF(digitalRead(pirPin) == hög) {
Serial.Print ("[[[get| http://www.mysite.com/iobridge.html]]]"); Skicka seriella meddelande till iobridge.
digitalWrite (led1Pin, hög); den ledde visualiserar sensorer utdata pin staten
digitalWrite (led2Pin, hög); den ledde visualiserar sensorer utdata pin staten
IF(lockLow) {
ser till att vi väntar på en övergång till låg innan någon ytterligare utgång görs:
lockLow = false;
Rullhållaren genom att lyfta servo.
myservo.write(140);
Slå på leksak med ljud
digitalWrite (speakerPin, hög);
Delay(100);
digitalWrite (speakerPin, låg);
Delay(7000);
myservo.write(65);
Skicka x10 kommandon att trun av/på lampor
X10.sendCmd (hcC, 1, cmdOn);
X10.sendCmd (hcC, 3, cmdOn);
X10.sendCmd (hcC, 2, cmdOff);
int var = 0;
Aktivera kontinuerlig rotation servo.
medan (var < 800) {
digitalWrite(servoPin,HIGH);
delayMicroseconds(1200); 1.5ms
digitalWrite(servoPin,LOW);
Delay(20); 20ms
var ++;
}
Delay(50);
}
takeLowTime = sant;
}
IF(digitalRead(pirPin) == låg) {
om (ledStatus == 0) {
digitalWrite (led1Pin, hög);
digitalWrite (led2Pin, låg);
ledStatus = 1;
Delay(100);
}
annat {
digitalWrite (led1Pin, låg);
digitalWrite (led2Pin, hög);
ledStatus = 0;
Delay(100);
}
IF(takeLowTime) {
lowIn = millis(); Spara tiden för övergången från hög till låg
takeLowTime = false; se till att detta görs endast i början av en låg fas
}
om sensorn är låg för mer än den givna pausen,
Vi antar att ingen mer motion som kommer att hända
om (! lockLow & & millis() - lowIn > pausa) {
gör säkert detta kodblock endast körs igen efter
ett nytt förslag sekvens har upptäckts
lockLow = sant;
Skicka x10 kommandon
X10.sendCmd (hcC, 1, cmdOff);
X10.sendCmd (hcC, 3, cmdOff);
X10.sendCmd (hcC, 2, cmdOn);
}
}
}