Martin de Bille

Grâce à un capteur LDR et un servomoteur, vos matins se transformeront… Une fois le soleil levé ou la lumière allumée, une bille d’acier est gracieusement lâchée dans un bol en acier lui aussi. Vacarme splendide, de quoi se lever du mauvais pied à tous les coups. Le code est facilement adaptable pour répondre à tous les besoins, un ambiance feng-shui à toute heure de la journée.

Ainsi, une fois un certain seuil de lumière atteint, le servomoteur peut entamer la séquence libérant la bille. C’est un mouvement rapide de 0° à 30° puis de nouveau à 0°. La durée de l’action couplée à l’angle d’action du servo devraient normalement permettre de lâcher une seule bille.

Le code utilisé pour entendre le lever et le coucher du soleil:

(Il définit une intervalle pour laquelle le servo se déclenche, puis temporise pendant une heure, le temps que le soleil se lève plus et que l’intervalle soit dépassée ou inversement. Marche au lever et au coucher du soleil)

#include <Servo.h>
Servo clapet;
int valeurCapteur;
int capteurLumiere = A0;

void setup() {
Serial.begin(9600);
clapet.attach(9);
clapet.write(0);
}

void loop() {
valeurCapteur = analogRead(capteurLumiere);
Serial.println(valeurCapteur);

if(valeurCapteur > 800 && valeurCapteur <850){
clapet.write(90);
delay(30);
clapet.write(0);
delay(600000);
}

}

Le code utilisé pour entendre une bille à chaque fois que la lumière s’allume:

(Il définit un seuil pour lequel la lumière est allumée, un état de lumière allumée et de lumière éteinte « StateLight », compare l’état de la lumière actuel avec l’état précédent, le résultat changeant la variable « triggered » et ainsi pose une double condition pour que le servo s’active « triggered + seuil ».)

#include <Servo.h>
Servo clapet;
int valeurCapteur;
int capteurLumiere = A0;

bool triggered = false;
bool state;
bool prevState;

int seuil = 800;
int sp = 30;
int ang = 20;

void setup() {
Serial.begin(9600);
clapet.attach(9)
clapet.write(0);

StateLight();
prevState = state;
}

void StateLight(){
valeurCapteur = analogRead(capteurLumière);
if(valeurCapteur>seuil){
state = true;
}else{
state = false;
}
}

void LacheBille() {
clapet.write(ang);
delay(sp);
clapet.write(0);
triggered=false;
}

void loop() {
Serial.println(valeurCapteur);

if (valeurCapteur > seuil && triggered) {
LacheBille();
}

StateLight();

if(prevState!=state){
triggered = true;
prevState = state
}

delay(10);

}