John Val/ Informatica/ Physical computing/sketch 3

Een derde project: analoge invoer plus servomotor aansturing: seek-the-light

Servomotor aansturen Sketch Motor Licht Uitdagingen
Servomotor aansturen: seek-the-light

seek-the-light: alleen de motor


Schema seek-the-light motor deel. Klik op het schema voor de bekabeling op het breadboard

Let op! Zorg ervoor dat de aansluiting bij gebruik van batterijen goed is. Foute aansluiting hebben al geleid tot het verbranden van motoren en het Arduino bordjes.

doel FS5103B SM-S2309S
+ rood rood
ground(-) bruin zwart
signaal oranje wit

In dit derde project "seek-the-light" laat je de arduino lichtmetingen uitvoeren met een sensor gemonteerd op een servomotor. De servo moet uiteindelijk een positie innemen waar de sensor de hoogste waarde heeft en dus het meeste licht ontvangt.
Dit project is een aanpassing op project 5 uit het Arduino Projects Book. Nederlandstalige uitleg over de gebruikte functies vind je weer in Arduino programmeer manual 1_0 NL.pdf
Na deze les hoor je te weten:

  1. Dat je met de Arduino een analoog signaal uitleest met behulp van analogRead()
  2. Wat een servomotorwikipedia is.
  3. Wat de term koppel (=torque in het Engels) betekent.
  4. Hoe je servomotor aanstuurt met de Servo library.
  5. Waarom er een condensator (= capacitor in het Engels) (https://www.wikitronics.nl/?q=node/142) parallel aan de servomotor staat.
  6. Wat de map() function doet.

In dit project gebruiken we lichtsensoren en een servomotor. Er zijn twee verschillende servomotoren aanwezig:

Arduino starter kit
In de Iprototype kit is de Fitec FS5103B ( http://www.feetechrc.com/product/analog-servo/standard-3-2kg-cm-plastic-gears-analog-servo-fs5103b/ ) aanwezig
Iprototype kit
In de Arduino Starter kit is de SM-S2309S aanwezig.extra documentatie
Beide servomotoren hebben een voltage nodig tussen 4.8V en 6V. Omdat de servomotoren vaak krachten moeten leveren die een stroom vraagt die groter is dan de Arduino spaningsuitgangen kunnen leveren is het noodzakelijk om een externe krachtbron te gebruiken. In dit project gebruiken we 4 AA batterijen.

Sketch

Sketch seek-the-light

De onderstaande sketch kun je in de IDE laden. In deze sketch wordt getracht de motor over 120 graden te draaien.

/*
 See-the-light 1: Servomotor laten draaien.
 Voor schema zie https://johnval.nl/school/informatica/arduino/index.htm
 Voor informatie over het aansturen van een servomotor zie https://arduino.cc/en/Reference/Servo
 Taken from Arduino Projects Book project 3
 modified 2 Jan 2014 By John Val
 This example code is in the public domain.
  
 */
#include "Servo.h"    // Laad de servo library
Servo myServo;        // Maak een servo object

int servoPin = 9;     // uitvoer pin voor de servomotor hoek
int angle =0;         // huidige hoek
int stepsize=1;       // stapgrootte hoek
/*
  De setup routine van de sketch zorgt voor de koppeling van de servmotor aan een pin
  en initialiseerd communicatie met de computer
 */
void setup() {
  myServo.attach(servoPin); // Wijs de servoPin toe aan het myServo object
  Serial.begin(9600);       // Start serial communicatie
}
/*
  De eindeloze loop procedure
*/
void loop() {
  // Schrijf de hoek naar de computer
  Serial.print("Hoek: ");
  Serial.println(angle);
  // Pas de hoek aan op servomotor
  myServo.write(angle);
  // Verander de hoek
  angle+=stepsize;
  // Verander de richting van verandering de angle moet tussen 0 en 180 graden bliven.
  if(angle>=120 || angle <= 0 )
  {
      stepsize*=-1;
  }
  // Wacht een tijdje
  delay(100);
}

Opdracht
  1. Zoek uit wat een condensator is en waarom die parallel aan de motor wordt geplaatst.
  2. Voeg de lichtsensor van sketch 2 toe aan dit project.
    Laat de motor een hoek aannemen aangegeven door de waarde van de lichtmeting.
    Tip: De analogRead geeft een waarde van 0 t/m 1023. Die moet vertaald worden naar een waarde tussen 0 en 180. Gebruik daarvoor de map functie.
  3. Monteer de lichtsensor op de servomotor (dat wordt knutselen) en pas de sketch aan zodanig dat de servomotor een positie aanneemt waarbij de sensor het meeste licht opvangt.
  4. De motor draait maat 180 graden. Hoe zou je deze hoek groter kunnen maken?
Uitdaging

Uitdaging

  1. Uitdaging kijken met twee ogen:
    Voeg nog een lichtsensor toe en zorg dat er een soort "twee ogen" situatie ontstaat. Pas de sketch zo aan dat de servo een positie aanneemt waarbij het verschil tussen de lichtintensiteiten gemeten door de Arduino nul is.