Étape 7: Programmation de l’Arduino
Avec l’électronique et le son réglé, j’ai téléchargé le logiciel à l’arduino. Ci-dessous voici le code complet que j’ai utilisé.
La tête en colère se plaindra de bruit et de mouvement (général havoc) chaque fois que le capteur PIR est activé. J’ai programmé un chill-out à temps pour éviter de déclencher il trop souvent.
La petite tête tenace est aussi crier avec colère si n’importe quelle lumière perturbe son sommeil sacré. La cellule photoélectrique détecte les niveaux d’éclairage de 0 à 256 niveaux, donc j’ai testé les niveaux de luminosité pour régler le seuil de droit pour les plaintes de débogage.
J’ai créé 5 sons sur les ravages et un autre 5 sur les lumières, alors que le pauvre coupable attiré par cette bête en colère va savoir pourquoi les aboiements.
/**********************************
Portas Digital avec 2, 3, 4, 6 Analogica A0
Fonte 9V
***********************************/
#include
int resetPin = 2 ; Le NIP de la broche de remise à zéro.
int clockPin = 3 ; Le NIP de l’axe de l’horloge.
int dataPin = 4 ; Le nombre de broches de la broche de données.
int busyPin = 5 ; Le NIP de la broche occupé.
int detectou_Atividade = 0 ; Indica se 800 PIR 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
long agora_mili, fim_mili ;
long 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 série para Debug
Serial.Begin(9600) ;
Reseta modulo de som WTV020
wtv020sd16p.Reset() ;
Inicia PIR800 - presenca
pinMode (pin_Presenca, entrée) ;
int calibrationTime = 20 ;
donner le capteur quelque temps à étalonner
Serial.Print ("Calibrando capteur de presença") ;
pour (int i = 0; i < calibrationTime; i ++) {}
Serial.Print(".") ;
Delay(1000) ; }
Serial.println ("terminé") ;
Serial.println ("capteur actif") ;
Delay(50) ;
} //Setup
void loop() {}
Checa capteur presenca se houver movimento ativa deteccao
int valPresenca ;
Si (modo_Busca_ON == 0) {valPresenca = digitalRead(pin_Presenca) ; delay(50);}
Si ((valPresenca == LOW) & & (modo_Busca_ON == 0)) {delay(450);}
Si ((valPresenca == HIGH) & & (modo_Busca_ON == 0)) {}
detectou_Atividade = 1 ;
modo_Busca_ON = 1 ; valPresenca = bas ;
Serial.println ("Detectou Atividade!!") ; }
Teste luz int leituraLuz ;
leituraLuz = analogRead(pin_LeituraLuz) ;
Serial.Print ("LUZ--->") ; Serial.println(leituraLuz) ;
Si ((leituraLuz > valor_Luz) & & (modo_Busca_ON == 0))
{/ / Acenderam a Luz! detectou_Luz = 1; modo_Busca_ON = 1;}
atualiza_estados() ;
} / / Boucle principale
void atualiza_estados() {}
Atualiza estados de todos os componentes
Si ((modo_Busca_ON == 1) & & (detectou_Atividade == 1)) {}
Achou alguem se mexendo
Toca som de algu suis se mexendo
Serial.println ("Vai tocar musica 0") ;
wtv020sd16p.playVoice(som_Movimento) ;
Si (som_Movimento == 4) {som_Movimento = 0;} else {som_Movimento ++;}
Delay(8000) ;
Serial.Print ("Acabou Musica - Movimento -") ;
Serial.println(som_Movimento) ;
modo_Busca_ON = 0 ;
detectou_Atividade = 0 ; }
Si ((modo_Busca_ON == 1) & & (detectou_Luz == 1)) {}
Acenderam un luz
Serial.println ("Vai tocar musica 0 por conta da luz") ;
wtv020sd16p.playVoice(som_Luz) ;
Si (som_Luz == 9) {som_Luz = 5;} else {som_Luz ++;}
Delay(8000) ;
Serial.Print ("Acabou Musica - luz -") ;
Serial.println(som_Luz) ;
modo_Busca_ON = 0 ;
detectou_Luz = 0 ;
}
} / / Atualiza Estados
}