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 gemoduleert 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.
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
Het IC L9110 heeft 2 ingangen waarmee je 2 uitgangen schakelt (de twee draden die naar de motor gaan).Het IC schakelt volgens een waarheidstabel:
inputA inputB outputA outputB motor
0 0 0 0 uit
1 0 1 0 rechtsom
0 1 0 1 linksom
1 1 1 1 uit
// 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
}