Fleur solaire avec servomoteur et capteur LDR

Bonjour,
Je cherche à réaliser une imitation de 'panneau solaire' à l'aide d'un servomoteur et d'un capteur de luminosité. Pour cela je dois m'aider des deux montages d'un livret dont je joins les photos. Le but étant de faire varier la position du servomoteur selon la luminosité avec une position à 0° pour la plus petite luminosité et une position à 180° pour la plus forte luminosité.
J'ai tenté de combiner les codes des deux montages et j'ai donc écrit le code suivant. Avec ce code la partie LED fonctionne (moins il y a de luminosité, plus il y a de LED allumées). Le problème est que le servomoteur ne bouge pas et je n'arrive pas à savoir ce qui ne va pas dans le code, alors si vous avez une petite idée pour m'aider :slight_smile:

#include <Servo.h> //importation de la librairie Servo
Servo monservo; // création de l'objet 'monservo'

const int LED1=4; // déclaration des broches 
const int LED2=5;
const int LED3=6;
const int LED4=7;
const int LED5=8;
const int LDR=A0;
int valeur;
int valeurcal = 0;
int val;

void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
monservo.attach(3); //indication de la broche de raccord du servomoteur

}

void loop() {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);

valeur = analogRead(LDR); //on lit la valeur du capteur de lumière
valeurcal = map(valeur, 10, 295, 0, 1000); //on ajuste l'échelle
val = map(valeurcal, 0, 1000, 0, 180);
monservo.write(val); // on envoie la valeur en degrés sur le servomoteur

if (valeurcal < 800) {digitalWrite(LED2, HIGH);} //on allume les led en fonction de la luminosité
if (valeurcal < 600) {digitalWrite(LED3, HIGH);}
if (valeurcal < 400) {digitalWrite(LED4, HIGH);}
if (valeurcal < 200) {digitalWrite(LED5, HIGH);}

delay(30);
}





Quel position demande tu as ton servos ?
C'est normal que tu fasse deux mises à l'échelle consécutive, les deux mises à l'échelle ne devrait pas être indépendante l'une de l'autre?

Je n'ai pas demandé de position en particulier, dans les montages à partir desquels je dois écrire le code je n'ai pas trouvé de texte le permettant, ou alors je suis passée à côté...

Pour les mises à l'échelle, la première me permet de faire fonctionner les LED selon la luminosité mais finalement je ne suis pas sûre que la deuxième soit vraiment nécessaire. Elle était censé ajuster l'échelle pour avoir un angle entre 0 et 180° mais je ne pense pas que ça puisse fonctionner car ce n'est pas le même type de variable. Et elle ne sera, je pense, pas nécessaire si j'arrive à demander une position au servomoteur d'une autre façon.

Bonjour allyssa19

Tu ajoutes Serial.begin(115200); dans setup() et un print de val juste avant le write du servo et tu verra, dans le moniteur (à 115200), quelle valeur tu envoies au servo

Serial.println(val);
monservo.write(val); // on envoie la valeur en degrés sur le servomoteur

Cordialement
jpbbricole

1 Like

Tu peux aussi faire plus simplement:

	valeur = analogRead(LDR); //on lit la valeur du capteur de lumière
	val = map(valeur, 10, 295, 0, 180);
	monservo.write(val); // on envoie la valeur en degrés sur le servomoteur
1 Like

Merci pour vos réponses ! J'ai finalement résolu le problème qui venait, en fait, de mon montage (il me manquait un câble de connexion pour le servomoteur) :sweat_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.