Un blog Low-Tech

Denis QUIERS


15 novembre 2020 (modifié le 21 novembre 2020)

Bricolage: réparation d'une grenouille de jardin

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: Grenouille de jardin 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 : Câblage Arduino

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

| |