J'ai fait le projet 4 du starter kit "Lampe d'ambiance".
Tout fonctionne, plus la lumière est élevée plus la lumière de la led est intense.
Est-il possible avec une simple modification d'inverser pour que la lumière s'allume de plus en plus fort avec la pénombre et l'obscurité et s'éteigne dans le jour ?
Je précise que je débute avec l'Arduino.
Je vous remercie de votre aide.
Le code est celui-ci :
const int greenLEDPin = 9;
const int redLEDPin = 10;
const int blueLEDPin = 11;
const int redSensorPin = A0;
const int greenSensorPin = A1;
const int blueSensorPin = A2;
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
int redSensorValue = 0;
int greenSensorValue = 0;
int blueSensorValue = 0;
void setup() {
Serial.begin(9600);
pinMode(greenLEDPin,OUTPUT);
pinMode(redLEDPin,OUTPUT);
pinMode(blueLEDPin,OUTPUT);
}
void loop() {
redSensorValue = analogRead(redSensorPin); // Lecture de la valeur sur le capteur A0
delay(5);
greenSensorValue = analogRead(greenSensorPin); // Lecture de la valeur sur le capteur A1
delay(5);
blueSensorValue = analogRead(blueSensorPin); // Lecture de la valeur sur le capteur A2
Serial.print ("Données brut du capteur \t Red : ");
Serial.print(redSensorValue);
Serial.print("\t Green : ");
Serial.print(greenSensorValue);
Serial.print("\t Blue : ");
Serial.print(blueSensorValue);
redValue = redSensorValue/4;
greenValue = greenSensorValue/4;
blueValue = blueSensorValue/4;
Serial.print("Valeurs recalculées \t Rouge : ");
Serial.print(redValue);
Serial.print("\t Vert : ");
Serial.print(greenValue);
Serial.print("\t Bleu : ");
Serial.print(blueValue);
analogWrite(redLEDPin, redValue);
analogWrite(greenLEDPin, greenValue);
analogWrite(blueLEDPin, blueValue);
}
Je vais ne vais prendre qu'une couleur, dans ton programme on fait avec analogRead: redSensorValue = analogRead(redSensorPin); // Lecture de la valeur sur le capteur A0
ce qui te donne une valeur de 0 à 1023.
Une fois divisé par 4: redValue = redSensorValue/4;
Ce qui te donne une valeur de 0 à 255.
Donc, pour inverser il suffit de faire: redValue = 255 - redSensorValue/4;
Dans le langage Arduino, il y a une super fonction qui est map(), qui te simplifie la vie ainsi:
C'est un truc dont la résistance diminue quand le lumière augmente.
Un pont diviseur, c'est quoi?
C'est un système résistif où la tension de sortie est proportionnelle au rapport de 2 résistances (ou plus)
Du genre VS = [R1/(R1+R2)]VE
Imaginez comment évolue le rapport R1/(R1+R2)
Quand c'est R1 qui diminue, ou quand c'est R2 qui diminue.
Et essayez d'imaginer si la place de la photo résistance a de l'influence dans le pont diviseur, par exemple si j'inverse les alimentations?
C'est le genre d'expression à éviter lorsqu'on discute avec un débutant. C'est très ambiguë et peut être mal interprété.
Il vaut mieux dire si on échange la place de la LDR et de la résistance fixe.
Au préalable, j'ai donné quelques indices sérieux je crois, et j'ai ajouté:
Cela pour amener à la réflexion.
Mais je reconnais, je n'ai pas écris qu'il ne s'agissait que de l'alimentation de la photorésistance et sa résistance de 10k plus simple à inverser que la place des composants.
Merci pour ces indices, ça a l'air tellement simple quand on vous lit et pourtant non, je n'y arrive pas, je suis une grande débutante, un tuto à reproduire c'est facile, une réflexion à mener pour une modification c'est aujourd'hui très compliqué.
Pour répondre à ta question, il suffit de faire une petite modification comme indiqué et expliqué dans mon post#4, maintenant su tu as encore des questions, ne te gêne pas
Il ne faut pas être aveuglée par la méconnaissance du codage.
La résolution de ce problème est purement mathématique.
redSensorValue à une valeur comprise entre 0 (dans le noir) et 1023 (pour un éclairage maximum).
Pour avoir un fonctionnement inverse de celui que tu as actuellement, il faut donc que la valeur retournée progresse en sens inverse soit 1023 (dans le noir) et 0 (pour l'éclairage maximum)
Cela revient à remplacer la ligne de code précédente par: redSensorValue = 1023 - analogRead(redSensorPin);
et il faut faire la même chose pour les composantes verte et bleue.
Tu as 3 capteurs identiques qui sont connectés sur 3 entrées analogiques de ta carte.
La fonction analogRead() évalue la tension sur les entrées les unes après les autres et retourne une valeur, image de cette tension, comprise entre 0 et 1023.
C'est une manière différente de résoudre le problème.
Tu devrais commencer par travailler avec un seul capteur et comprendre comment fonctionne le programme. Ce sera facile après de l'étendre à 3 capteurs.
A noter, les 3 capteurs sont notés red, green, blue mais si ce sont tout les 3 des LDR "nues" elles doivent répondre toutes les trois quelque soit la couleur de la lumière.
Pour en faire des capteurs rouge, vert et bleu il faudrait placer un filtre devant les LDR pour qu'elles ne répondent qu'à une bande de couleur.
Est ce que tu a compris que les 3 photorésistances agissent chaqu'une de façon indépandante.
Par exemple que si tu occulte la photorésistance (avec ton doigt) dédiée au réglage du Vert, ta Led Rouge Vert Bleu s'éclairera selon un mixe de Rouge et de Bleu seulement (sans le Vert).
C'est la structure du programme qui influence le sens de variation de l'éclairement des led Rouge/Vert/Bleu
La structure, c'est toi qui la choisie, soit tu copie, soit tu l'écrit toi même.
Dans un systéme entrées (valeurs analogiques lues avec des photorésistances) sorties (commandes de led), tu peux influer sur le traitement des entrées ou des sorties, au choix, pour arriver à tes fins (par code ou câblage).
C'est pour cela que c'est utile au départ d'essayer de comprendre le câblage et le code.
Donc effectivement commencer par étape et t'intéresser à ce qui se passe sur 1 photorésistance, c'est ce que te suggére aussi @fdufnews
Pour le moment je copie, car pas évident d'écrire.
Je voulais juste inverser la petite lampe pour l'associer à un projet de photophore fait avec une découpeuse.
Mais c'est peut être un peu trop d'ambition pour l'instant , j'ai beaucoup travaillé la logique du codage avec Scratch mais là on n'est pas sur le même level.