De rotatiesnelheid van een DC motor (aandrijfmotor of ventilator) is goed te regelen door de energietoevoer met een blokgolf aan- en uit te schakelen. Hoe langer de aan-stap is, hoe sneller de motor draait. Zo'n signaal heet een pulsbreedte gemoduleerd signaal, oftewel Pulse Width Modulation PWM.
Door de Arduino te gebruiken om de blokgolf te genereren en deze blokgolf te versterken met een externe voeding en driver (printje met L9110 chip) kun je een motor met behoorlijk vermogen gebruiken.
Wil je de motor alleen volledig aan- en uitschakelen dan hoef je niet te moduleren maar kun je de signalen continu hoog of laag maken.
Waarheidstabel voor de regeling van een motor
Het printje heeft per motoruitgang twee ingangen om de motor te regelen. Onderstaande waarheidstabel laat zien hoe dit werkt voor motor A:
A in I A in II Motor A
0 0 uit
1 0 rechtsom
0 1 linksom
1 1 uit
Code voorbeeld Arduino UNO
Met het commando analogWrite(naam,waarde) geef je de opdracht om het signaal aan de uitgangspoort beschikbaar te maken. naam Is de naam die je aan de poort hebt gegeven. Let er op dat niet alle uitgangen van de Arduino geschikt zijn voor een PWM signaal.
waarde Is de gemiddelde waarde die je wilt dat het signaal heeft. Deze is instelbaar tussen 0% (UIT) en 100% (AAN).
formule: Duty cycle = (waarde / 255) [%]
Duty cycle 0% = 0
Duty cycle 50% = 127
Duty cycle 100% = 255
onderstaand een voorbeeldcode voor de combinatie Arduino / Chip L9110 / DC motor
// pwm analogWrite op pin D05 490Hz
// pwm analogWrite op pin D06 490Hz
const int LINKS = 5; // motor pwm signaal op pin D04
const int RECHTS = 6; // motor pwm signaal op pin D05
void setup()
{
pinMode(LINKS, OUTPUT); //
pinMode(RECHTS, OUTPUT); //
}
void loop()
{
analogWrite(LINKS,0);
analogWrite(RECHTS,0);
delay(500); // wacht xx ms
analogWrite(RECHTS,125);
delay(2000); // wacht xx ms
analogWrite(RECHTS,200);
delay(2000); // wacht xx ms
analogWrite(RECHTS,255);
delay(2000); // wacht xx ms
analogWrite(LINKS,0);
analogWrite(RECHTS,0);
delay(500); // wacht xx ms
analogWrite(LINKS,200);
delay(2000); // wacht xx ms
}