Panneau solaire orientable STM32
| Projet | Durée | Difficulté | Âge |
|---|---|---|---|
| The Dexter Lab | 2-3 heures | Avancé | 13-18 ans |
Matériel
- 1 carte programmable "STM32 IoT Node Board"
- 2 photorésistances (LDR)
- 2 résistances de 10 kΩ
- 1 servomoteur
- 1 capteur de tension INA219
- 1 panneau solaire
- 1 résistance de 100 Ω
- 1 breadboard + câbles
- 1 câble USB - micro B
De quoi parle-t-on ?
Cette fiche technique accompagne la ressource Panneau solaire auto-orientable. Elle couvre toute la chaîne de programmation : mesurer la lumière avec deux photorésistances, piloter un servomoteur et créer un suiveur solaire automatique qui oriente le panneau en fonction de la différence d'éclairage.
Objectifs d'apprentissage
- Comprendre le fonctionnement d'un diviseur de tension avec une LDR
- Lire plusieurs entrées analogiques et comparer leurs valeurs
- Piloter un servomoteur à partir d'une condition algorithmique
- Assembler un système complet intégrant capteurs et actionneurs
Étape 1 : Collecter des données grâce au capteur de lumière
Le circuit que nous devons assembler se compose de deux éléments : une résistance de 10 kΩ et une cellule photoélectrique.
Pour cette activité, installez l'extension serial.
Programme
forever(function () {
Serial.writeValue("LDR Left", pins.A0.analogRead())
pause(1000)
})
Étape 2 : Mesurer le changement d'intensité lumineuse avec deux LDR
Le circuit se compose de deux LDR. Nous brancherons la LDR de "gauche" sur A0 et la cellule photoélectrique de "droite" sur A1.
Programme
forever(function () {
Serial.writeValue("Left", pins.A0.analogRead())
Serial.writeValue("Right", pins.A1.analogRead())
Serial.writeValue("Difference", pins.A0.analogRead() - pins.A1.analogRead())
pause(1000)
})
Étape 3 : Programmation d'un servomoteur
Câbler le servomoteur :
- Marron (ou violet) sur le GND
- Rouge sur le 5V
- Orange sur la broche 9
Programme
forever(function () {
Serial.writeValue("Angle", 0)
pins.D9.servoWrite(0)
loops.pause(1000)
Serial.writeValue("Angle", 90)
pins.D9.servoWrite(90)
loops.pause(1000)
})
Étape 4 : Programmation du suiveur solaire
Combiner le servomoteur et les deux LDR. LDR gauche sur A0, LDR droite sur A1, servomoteur sur D9.
Programme
const moveThreshold = 10;
let startOrientation = 0;
let endOrientation = 180;
let currentOrientation = startOrientation;
forever(function () {
let previousOrientation = currentOrientation;
let leftIllumination = pins.A0.analogRead()
let rightIllumination = pins.A1.analogRead()
let differenceOfIllumination = leftIllumination - rightIllumination
Serial.writeValue("Left", leftIllumination)
Serial.writeValue("Right", rightIllumination)
Serial.writeValue("Difference", differenceOfIllumination)
if(Math.abs(differenceOfIllumination) > moveThreshold)
{
if (differenceOfIllumination > 0){
currentOrientation++ // Turn left
Serial.writeLine("Turn left")
}
else if (differenceOfIllumination < 0){
currentOrientation-- // Turn right
Serial.writeLine("Turn right")
}
}
if (currentOrientation < startOrientation)
currentOrientation = startOrientation
if (currentOrientation > endOrientation)
currentOrientation = endOrientation
if(previousOrientation != currentOrientation)
pins.D9.servoWrite(currentOrientation)
pause(1000)
})
Étape 5 : Collecter les données grâce au capteur de tension
Câbler le capteur de tension (I2C) :
- Violet pour SDA
- Vert pour SCL
- Bleu pour GND
- Rouge pour VCC (3.3V)
Câbler le panneau solaire sur Vin+ et Vin- (avec résistance de 100 Ω).
Programme
Serial.attachToConsole()
forever(function () {
Serial.writeValue("Voltage", input.getINA219Voltage())
pause(5000)
})
Cette fiche fait partie du projet The Dexter Lab, financé par le programme Erasmus+. Contenu sous licence CC BY-SA 4.0.