DC motor aansturen | Sketch | Motor | Licht | Uitdagingen |
DC motor |
De DC motorvoor een plaatje van de werking)
Een DC motor (DC staat voor Direct Current) wordt ook wel gelijkstroommotor genoemd.
Een DC motor zet elektrische energie in de
vorm van een gelijkstroom om in mechanische energie. Door elektriciteit op de motor te zetten onstaat er een magnetisch veld in
de spoel (die zich in de motor bevindt) waardoor de as, die daar doorheen loopt, begint te draaien.
In dit project gebruiken we een Mosfet
transistor, H-bridge en een DC motor.
|
||
Sketch a | Sketch motor met knop (project 9)De onderstaande sketch kun je in de IDE laden. In deze sketch wordt getracht de motor te laten draaien. /* De motor aan of uit zetten Aanpassing van het commentaar bij de code horend bij 'Project 9 - Motorized Pinwheel' van de Arduino Starter Kit Modified 10 March 2014 by Aitor Azcarate Onaindia This example code is part of the public domain */ // variabele voor de pin const int switchPin = 2; // druk knop aangesloten op pin 2 const int motorPin = 9; // motor aangesloten op pin 9 int switchState = 0; // variabele om de staat van de druk knop te onthouden void setup() { // initializeer de pinnen als in/uitvoer pinMode(motorPin, OUTPUT); pinMode(switchPin, INPUT); } void loop(){ // controleer en sla de staat van de druk knop op switchState = digitalRead(switchPin); // als de knop is ingedrukt if (switchState == HIGH) { // zet de motor aan digitalWrite(motorPin, HIGH); } else { // anders is de knop niet ingedrukt // zet de motor af digitalWrite(motorPin, LOW); } } |
||
Een schema van de schakeling (klik op het schema voor het breadboard lay-out) |
|||
|
|||
Sketch b | Sketch motor 'voor- en achteruit' (project 10)De onderstaande sketch kun je in de IDE laden. In deze sketch wordt getracht de motor voor- en achteruit te laten draaien (met behulp van de H-bridge). /* DC motor twee kanten op Aanpassing van het commentaar bij de code horend bij 'Project 10 - Zoetrope' van de Arduino Starter Kit Modified 10 March 2014 by Aitor Azcarate Onaindia This example code is part of the public domain */ const int controlPin1 = 2; // aangesloten aan pin 7 van de H-bridge const int controlPin2 = 3; // aangesloten aan pin 2 van de H-bridge const int enablePin = 9; // aangesloten aan pin 1 van de H-bridge const int directionSwitchPin = 4; // aangesloten aan de knop om de richting (voor/achteruit) aan te geven const int onOffSwitchStateSwitchPin = 5; // aangesloten aan de knop die de motor aan of uit zet const int potPin = A0; // aangesloten aan de output van de potentiometer ('draaiknop') // variabele om waardes van de input te onthouden int onOffSwitchState = 0; // huidige staat van de aan/uit knop int previousOnOffSwitchState = 0; // vorige staat van de aan/uit knop int directionSwitchState = 0; // huidige staat van de directie knop int previousDirectionSwitchState = 0; // vorige staat van de directie knop int motorEnabled = 0; // zet de motor aan of uit int motorSpeed = 0; // de snelheid van de motor int motorDirection = 1; // huidige richting van de motor void setup(){ // zeg welke 'pin' invoer en uitvoer is pinMode(directionSwitchPin, INPUT); pinMode(onOffSwitchStateSwitchPin, INPUT); pinMode(controlPin1, OUTPUT); pinMode(controlPin2, OUTPUT); pinMode(enablePin, OUTPUT); // om te starten zet de enablePin laag/uit digitalWrite(enablePin, LOW); } void loop(){ // controleer en sla de staat van de aan/uit knop op onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin); delay(1); // controleer en sla de staat van de richting knop op directionSwitchState = digitalRead(directionSwitchPin); // controleer en sla de waarde van de potentiometer op // de waarde hiervan moet je delen door 4 omdat de PWM een waarde tussen 0 en 255 gebruikt // en de analogRead een waarde tussen 0 en 1024 geeft motorSpeed = analogRead(potPin)/4; // als de aan/uit knop is ingedrukt sinds de laatste keer dat loop() werd doorlopen if(onOffSwitchState != previousOnOffSwitchState){ // verander de waarde van de variabele als de knop is ingedrukt if(onOffSwitchState == HIGH){ motorEnabled = !motorEnabled; } } // als de directie knop is ingedrukt sinds de laatste keer dat loop() werd doorlopen if (directionSwitchState != previousDirectionSwitchState) { // verander de waarde van de variabele als de knop is ingedrukt if (directionSwitchState == HIGH) { motorDirection = !motorDirection; } } // verander de richting van de motor door te communiceren met de control pinnen van de H-bridge if (motorDirection == 1) { digitalWrite(controlPin1, HIGH); digitalWrite(controlPin2, LOW); } else { digitalWrite(controlPin1, LOW); digitalWrite(controlPin2, HIGH); } // als de motor aan is if (motorEnabled == 1) { // schrijf de huidige snelheid naar de pin analogWrite(enablePin, motorSpeed); } else { // anders is de motor uit // schrijf de snelheid van 0 naar de pin (dus hij draait niet meer) analogWrite(enablePin, 0); } // sla de huidige staat van de directie knop op als de vorige staat // (want de volgende keer dat de loop() doorlopen wordt is de huidige staat de vorige // staat previousDirectionSwitchState = directionSwitchState; // sla de huidige staat van de aan/uit knop op als de vorige staat previousOnOffSwitchState = onOffSwitchState; } |
||
|
Opdracht: |
|
|
Uitdaging |
Uitdaging
|