Ongecompliceerd motoren aansturen
Er bestaan allerlei motorshields en MOSFET-modules om motoren aan te sturen. Maar het kan nog simpeler (en goedkoper): stuur je motor aan met je Arduino een losse MOSFET.
PWM is een truc waarbij je met een blokgolf een gelijkspanningsmotor kunt aansturen. Door met een sketch (je zelfgeschreven software) in de Arduino de pulsebreedte van de blokspanning te variëren kun je de motor langzamer of sneller laten draaien.
Omdat een motor vaak op een andere spanning draait dan de Arduino denk je een motorshield of MOSFET-module nodig te hebben. Maar je kunt ook een motor aansturen met een losse MOSFET.
Wat gaan we doen?
We gaan een gelijkstroommotor langzaam en snel laten draaien m.b.v. een Arduino en een MOSFET.
Benodigdheden
Een Arduino ⇗
Een motor ⇗
Een MOSFET ⇗
En ook nog een weerstand en een diode.
Schema en opbouw
In het schema zien we dat een MOSFET de motor aanstuurt. Beveiligingsdiode D1 zorgt ervoor dat inductiespanningspieken van de motor worden kortgesloten. De weerstand van 10K is nodig om bij het opstarten van het circuit er zeker van de zijn dat de gate van de MOSFET een geldige waarde heeft, dit voorkomt dat de motor bij het opstarten van de Arduino eventjes draait (als je dat niet erg vindt dan kun je de weerstand weglaten).

De source-aansluiting (aansluitingen zie hier) van de MOSFET wordt met een GND-aansluiting van de Arduino én met de minpool van de motorspanning verbonden. De schakeling heeft zo twee voedingen: 1x de voeding van de Arduino (bijvoorbeeld via USB) en 1x de voeding voor de motor. Zie de tip in de laatste paragraaf van dit artikel als je wilt werken met één voeding.

Sketch
De sketch (software) die ik maakte als POC laat de motor eerst langzaam draaien, dan heel snel en tot slot laat hij de motor van heel langzaam steeds harder draaien tot het maximum toerental is bereikt.
// Motorbesturing // (C) 2018 Ellis Verheijen #define MOTOR 6 // Pen van Arduino waar de motor mee wordt gestuurd void setup() { pinMode(MOTOR, OUTPUT); analogWrite(MOTOR,0); // Motor stoppen } void loop() { // Laat de motor eerst op (ongeveer) halve kracht draaien analogWrite(MOTOR,150); delay(2000); analogWrite(MOTOR,255); // Volle kracht vooruit delay(4000); // En nu van langzaam naar snel met een lusje for(int i=50; i<255; i++) { analogWrite(MOTOR,i); delay(20); } // Even afkoelen, pffff analogWrite(MOTOR,0); delay(3000); }
Voedingstip
Twee voedingsspanningen is misschien lastig. Het kan ook anders door de Arduino te voeden met 5V (waarbij de motor ook automatisch 5V krijgt). Met het hier gebruikte type motor (motor+robotwiel) gaat dat prima. Ook als je wil werken met batterijen is dat goed te doen. Zie dit artikel.
In onderstaand filmpje gebruikte ik de Vin-aansluiting van de Arduino als motorspanning.
Kan ook de draairichtig veranderd worden