Aujourd'hui c'est encore confinement, alors il faut s'occuper... J'ai récupéré cette grenouille de jardin, qui ne voulait plus chanter: Les composants étant tous en mauvais état, j'ai décidé d'installer dans cette grenouille un micro-contrôleur Arduino, alimenté par une pile 9V. Pour la partie "chant" j'ai utilisé un haut-parleur piézo-électrique, et pour le capteur de luminosité une photo-résistance.
Voici le schéma du câblage :
Et voici le code dans l'Arduino:
/*
Grenouille v2
Le circuit:
- Potentiomètre
Patte du côté vers le +5V
Patte centrale vers la photo-résistance
2° patte du côté vers la masse
- Photo-résistance
Une patte vers le Potentiomètre
L'autre patte vers l'entrée analogique A0
- Haut-Parleur Piézo
Patte + (rouge) vers la sortie digitale D13
Patte - (noire) vers la masse
Version 2 créée par Denis Quiers le 21 novembre 2020
Voir :
http://www.arduino.cc/en/Tutorial/AnalogInput
https://www.arduino.cc/reference/en/language/variables/data-types/unsignedlong/
*/
int borneCapteur = A0; // select the input pin for the potentiometer (A0)
int borneHP = 13; // select the pin for the LED (haut-parleur)
int valeurCapteur = 0; // variable to store the value coming from the sensor
int previousCapteur = 0; // variable to store the value coming from the sensor
int soleilMax = 250; // si la valeur de valeurCapteur est plus petite que ce seuil, alors il fait beau :)
int intervalleGrenouille = 25; // 25 millisecondes entre chaque activation du HP, pendant que la grenouill chante
unsigned long previousMillis = 0; // Init
unsigned long currentMillis = 0; // Init
unsigned long interval = 900000; // 15 minutes minimum entre 2 séries de 4 chants
void setup() {
// La borne D13 est en mode "Sortie" (reliée au HP)
pinMode(borneHP, OUTPUT);
// DEBUG: initialiser la communication série à 9600 bps:
Serial.begin(9600);
// Chant de Boot : croa croa * 4
for (int k=0; k<4; k++) {
chanter();
}
}
// Fonction qui fait croa croa
void chanter() {
for (int j = 0; j < 2; j++) {
for (int i = 0; i < 5; i++) {
// turn the pin on:
digitalWrite(borneHP, HIGH);
// stop the program for <intervalleGrenouille> milliseconds:
delay(intervalleGrenouille);
// turn the borneHP off:
digitalWrite(borneHP, LOW);
// stop the program for for <intervalleGrenouille> milliseconds:
delay(intervalleGrenouille);
}
delay(125);
}
delay(250);
}
void loop() {
previousCapteur = valeurCapteur;
// Lire la valeur du capteur de lumière:
valeurCapteur = analogRead(borneCapteur);
// Instant courant
currentMillis = millis(); // Note : This number will overflow (go back to zero), after approximately 50 days
// DEBUG: afficher la valeur du capteur via le moniteur série:
Serial.println(valeurCapteur);
// S'il fait beau et que la grenouille a chanté la dernière fois il y a au moins 15 minutes, elle chante
// Ou bien si la valeur du capteur a changé de + de 10% du seuil
if (((valeurCapteur < soleilMax)&&(abs(currentMillis - previousMillis) >= interval)) || (abs(valeurCapteur - previousCapteur) >= 0.1*soleilMax)) {
// Croa croa * 4
for (int k=0; k<4; k++) {
chanter();
}
previousMillis = millis();
}
delay(1000);
}
Le résultat est fonctionnel: la grenouille fait un son qui peut s'apparenter à un coassement. En bonus par rapport au montage initial: en utilisant le potentiomètre, on peut modifier la sensibilité à la lumière de l'amphibien :)
Pour me contacter : denis.quiers@gmail.com