Sommaire |
Certaines fleurs, une fois la nuit tombée, se referment et se rouvrent le matin. On va ici reprendre ce système avec un capteur de luminosité qui fera le coeur de la fleur et 2 servomoteurs à la place des pétales.
On alimente en 5V le capteur et les 2 servomoteurs (fils rouges des servomoteurs et Vcc du capteur). Le fils noir des servomoteurs ainsi que le GND du capteur sont reliés au ground (GND) d'arduino. Le servomoteur de droite (quand on est face au capteur) sera branché sur l'entrée 9, celui de gauche à l'entrée 6.
#include <Servo.h> // On inclue la librairie permettant de contrôler les servomoteurs Servo droite; //on crée l'objet de type "Servo" qui sera nommé droite Servo gauche; //et le second, celui de gauche //ces variables seront chargées de contrôler la position des servo int posgauche = 0; int posdroite = 0; int lum = 0; //la variable où sera stockée la luminosité int etat = 1; // variable permettant de connaître les positions des servomoteurs (voir ci-dessous) int comptemps = 0; //variable permettant de compter le temps int seuil = 50; //le seuil où le dispositif se refera void setup() { //on donne la broche où est reliée le servo droite.attach(9); gauche.attach(6); } void loop() { lum = analogRead(A0); //on lit la luminosité sur la broche A0 où est relié le capteur if((lum<seuil)&&(etat==0)) { //si la luminosité est inférieur au seuil et que l'état est à 0 comptemps++; //on ajoute 1 au compteur if(comptemps==10) { //si le compteur est à 10 (c'est à dire si le programme a fait 10 tours) for(posdroite = 0, posgauche=180;(posdroite<179)&&(posgauche>1);posdroite++, posgauche--) { gauche.write(posgauche); delay(10); droite.write(posdroite); delay(20); } //on rouvre la "fleur" et on met l'état à 1 etat=1; } } else if((lum<seuil)&&(etat==1)) { //si la luminosité est en dessous du seuil et que état est à 1 for(posgauche = 0, posdroite=180;(posgauche<179)&&(posdroite>1);posgauche++, posdroite--) { gauche.write(posgauche); delay(10); droite.write(posdroite); delay(20); } //on referme la "fleur" et on met état à 0 etat=0; } else if((lum>seuil)&&(etat==0)) { //Si la luminosité est au-dessus du seuil et que la "fleur" est refermée for(posdroite = 0, posgauche=180;(posdroite<179)&&(posgauche>1);posdroite++, posgauche--) { gauche.write(posgauche); delay(10); droite.write(posdroite); delay(20); } etat=1; comptemps = 0; //On ouvre la "fleur" et on remet le compteur à 0, ainsi que l'état à 1 } else if((lum>seuil)&&(etat==1)) { //on continue sans rien faire : la luminosité n'est pas inférieur au seuil et la "fleur" est ouverte } delay(1000); }
A noter : les lignes commençant par "//" sont des commentaires : ils sont effacés lorsque le programme est envoyé à l'arduino, ils n'influencent pas son application
L'état 0 correspondant à un état "replié" et le 1 à un état "ouvert".
Le seuil de luminosité étant géré par une variable, il suffit de remplacer "50" par une autre valeur afin d'ajuster le seuil de luminosité à l'endroit où on fait le montage.
On voit que si on met son doigt sur le capteur de luminosité, le système se referme "protégeant" le capteur. Si on attend un peu ou qu'on éclaire le capteur, le système se rouvre.
En mettant le doigt sur le capteur, on réduit la luminosité reçu par le capteur : permettant de passer le seuil. Une fois le seuil franchie, l'arduino va faire bouger les servomoteurs pour refermer le système. Inversement, si la luminosité est plus haute que le seuil, le système va se rouvrir.
Cela illustre le fait que certaines fleurs se referment la nuit.
Autres expériences avec le même concept, recherche sur internet (indiquer les liens).
Le but depuis le début est de simuler une fleur. On pourra ajouter d'autres servomoteurs afin d'ajouter des pétales, mais attention aux collisions...
Plutôt dans une salle afin qu'on puisse utiliser un ordinateur.
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique