Hotel Transilvania krympta huvudet (7 / 8 steg)
Steg 7: Programmera Arduino
Med elektronik och ljud ligger, jag laddade upp programvaran till arduino. Här följer nedan den fullständiga koden jag använde.
Vred huvudet kommer klaga på buller och rörelse (allmän förödelse) när som helst att PIR-sensorn blir aktiverad. Jag programmerat en chill out tid för att undvika utlöser det alltför ofta.
Det envisa lilla huvudet kommer också skrika ilsket om något ljus stör dess heliga sömn. Ljussensorn upptäcker ljusnivåer från 0 till 256 nivåer, så jag testade felsökning ljus nivåer för att ställa in rätt tröskeln för klagomål.
Jag skapade 5 låter om förödelse och ytterligare 5 om lampor, så den stackars skyldige fångas av den arga beast vet varför den avbarkning.
/**********************************
Portas Digitais 2, 3, 4, 6 Analogica A0
Fonte 9V
***********************************/
#include
int resetPin = 2; Den pin-kod Återställ PIN-koden.
int clockPin = 3; Klockan stift pin nummer.
int dataPin = 4; Data stift pin nummer.
int busyPin = 5; Pin-kod i upptagen PIN-koden.
int detectou_Atividade = 0; Indica se PIR 800 detectou atividade
int detectou_Luz = 0; Indica se luz foi detectada
int modo_Busca_ON = 0;
int valor_Luz = 100;
int som_Movimento = 0; de 0 a 4
int som_Luz = 5; de 5 a 9
lång agora_mili, fim_mili;
lång hora_final_ping, hora_atual_ping;
int intervalo_min_ping = 100;
#define pin_Presenca 6
#define pin_LeituraLuz 0
Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);
void setup() {
ATIVA följetong para Debug
Serial.BEGIN(9600);
Reseta modulo de som WTV020
wtv020sd16p.Reset();
Inicia PIR800 - presenca
pinMode (pin_Presenca, ingång);
int calibrationTime = 20;
ge sensorn lite tid att kalibrera
Serial.Print ("Calibrando sensor de presença");
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(".");
Delay(1000); }
Serial.println ("gjort");
Serial.println ("sensorn aktiv");
Delay(50);
} //Setup
void loop() {
Checa sensor presenca se houver movimento ativa deteccao
int valPresenca;
om (modo_Busca_ON == 0) {valPresenca = digitalRead(pin_Presenca); delay(50);}
om ((valPresenca == LOW) & & (modo_Busca_ON == 0)) {delay(450);}
om ((valPresenca == HIGH) & & (modo_Busca_ON == 0)) {
detectou_Atividade = 1;
modo_Busca_ON = 1; valPresenca = låg;
Serial.println ("Detectou Atividade!"); }
Teste luz int leituraLuz;
leituraLuz = analogRead(pin_LeituraLuz);
Serial.Print ("LUZ--->"); Serial.println(leituraLuz);
om ((leituraLuz > valor_Luz) & & (modo_Busca_ON == 0))
{/ / Acenderam en Luz! detectou_Luz = 1; modo_Busca_ON = 1;}
atualiza_estados();
} / / Main slinga
void atualiza_estados() {
Atualiza estados de todos os felkällor
om ((modo_Busca_ON == 1) & & (detectou_Atividade == 1)) {
Achou alguem se mexendo
TOCA som de algu am se mexendo
Serial.println ("Vai Camilo musica 0");
wtv020sd16p.playVoice(som_Movimento);
om (som_Movimento == 4) {som_Movimento = 0;} annat {som_Movimento ++;}
Delay(8000);
Serial.Print ("Acabou Musica - Movimento -");
Serial.println(som_Movimento);
modo_Busca_ON = 0;
detectou_Atividade = 0; }
om ((modo_Busca_ON == 1) & & (detectou_Luz == 1)) {
Acenderam en luz
Serial.println ("Vai Camilo musica 0 por conta da luz");
wtv020sd16p.playVoice(som_Luz);
om (som_Luz == 9) {som_Luz = 5;} annat {som_Luz ++;}
Delay(8000);
Serial.Print ("Acabou Musica - luz -");
Serial.println(som_Luz);
modo_Busca_ON = 0;
detectou_Luz = 0;
}
} / / Atualiza Estados
}