Je leert hoe je twee servo motoren kunt aansturen met vier LDR's om licht te volgen in twee richtingen.
1 Arduino UNO
2 Servo motoren
4 LDR's
4 Weerstanden van 10kΩ
Jumper wires
Breadboard
1. Verbind vier LDR's aan A0 t/m A3 met elk een 10kΩ weerstand naar GND.
2. Servo Horizontaal op pin 9.
3. Servo Verticaal op pin 10.
4. Voeding servo's op 5V en GND.
Klik op de Code-knop , kopieer en plakt onderstaande code in Tinkercad.
#include <Servo.h> // laad de bibliotheek voor de servo motoren
Servo servoHorizontaal; // maak een object voor de horizontale servo
Servo servoVerticaal; // maak een object voor de verticale servo
// definieer de pinnen waar de LDR's op aangesloten zijn
int ldrTopLeft = A0; // LDR linksboven
int ldrTopRight = A1; // LDR rechtsboven
int ldrBottomLeft = A2; // LDR linksonder
int ldrBottomRight = A3; // LDR rechtsonder
// beginpositie van de servo's in het midden (90 graden)
int horizontaalPos = 90;
int verticaalPos = 90;
void setup() {
servoHorizontaal.attach(9); // koppel de horizontale servo aan pin 9
servoVerticaal.attach(10); // koppel de verticale servo aan pin 10
Serial.begin(9600); // start de seriële monitor voor uitlezing
}
void loop() {
// lees de waarden van de vier LDR's
int tl = analogRead(ldrTopLeft);
int tr = analogRead(ldrTopRight);
int bl = analogRead(ldrBottomLeft);
int br = analogRead(ldrBottomRight);
// bereken gemiddeld licht links en rechts
int avgLeft = (tl + bl) / 2;
int avgRight = (tr + br) / 2;
// bepaal de nieuwe horizontale positie
if (avgLeft > avgRight) horizontaalPos = min(horizontaalPos + 1, 180);
else if (avgRight > avgLeft) horizontaalPos = max(horizontaalPos - 1, 0);
// bereken gemiddeld licht boven en onder
int avgTop = (tl + tr) / 2;
int avgBottom = (bl + br) / 2;
// bepaal de nieuwe verticale positie
if (avgTop > avgBottom) verticaalPos = max(verticaalPos - 1, 0);
else if (avgBottom > avgTop) verticaalPos = min(verticaalPos + 1, 180);
// stuur de servo's naar de berekende positie
servoHorizontaal.write(horizontaalPos);
servoVerticaal.write(verticaalPos);
delay(100); // wacht 100 ms voordat de volgende meting plaatsvindt
}
Laat het resultaat zien aan je docent.
Sla je ontwerp op in Tinkercad : Les 9.1: Bestuur twee servo's met vier LDR’s.
Klik op de knop vragen om de vragen te beantwoorden