Gör en roterande mikrofon (4 / 6 steg)
Steg 4: Gör DC motoriska kretsen
http://ITP.NYU.edu/physcomp/Labs/DCMotorControl
Du kommer att behöva följa de lätt anvisningarna för att göra DC-motor med kontrollerbar riktning med en H Bridge integrerad krets. De riktning ändringar via en switch som är ansluten till Arduino's digital ingång.
Först använde jag en extern strömkälla för min motors likspänning. Detta tillät mig att driva Diecimila via USB och också möjlighet att ladda upp min Arduino program till Arduino mikrokontroller.
Jag bestämde mig att lägga till en hastighetskontroll till motoriska kretsen genom att lägga till en enkel potentiometer krets som använder Arduinoen + 5V produktionen och dess marken. Jag skicka spänningen från potentiometer kretsen i analog ingång 0 på Arduino styrelsen.
Slutligen, jag laddade upp följande kod (baserat på webbplatsens kod med extra potentiometer kontroll) till Arduino så jag kan kontrollera motorns hastighet och riktning:
int switchPin = 2; Switch input
int motor1Pin = 3; H-bridge Ben 1
int motor2Pin = 4; H-bridge ben 2
int speedPin = 9; H-bridge aktivera pin
int ledPin = 13. LED
int potPin = 0; Analog ingång pin som potentiometern är kopplad till
int potValue = 0; värdet läsa från potten
void setup() {
huvudströmbrytare som indata:
pinMode (switchPin, ingång);
Serial.BEGIN(9600);
ställa in alla andra stiften du använder som utgångar:
pinMode (motor1Pin, produktionen);
pinMode (motor2Pin, produktionen);
pinMode (ledPin, produktionen);
Ange speedPin hög så att motorn kan aktivera:
digitalWrite (speedPin, hög);
blinka LED 3 gånger. Detta bör ske endast en gång.
Om du ser den LED blinkar tre gånger, innebär det att modulen
återställa sig själv. förmodligen eftersom motorn orsakade en brownout
eller en kort.
blinka (ledPin, 3, 100);
}
void loop() {
om växeln hög, att motor gå på en riktning:
Serial.println(potValue); skriva ut potten värdet tillbaka till fönstret debugger
om (digitalRead(switchPin) == hög) {
digitalWrite (motor1Pin, låg); ställa in etapp 1 av H-bryggan låg
digitalWrite (motor2Pin, hög); ställa in etapp 2 av H-bron hög
potValue = analogRead(potPin); läsa värdet pot
analogWrite (speedPin, potValue/4); PWM speedPin med potten värdet (dividerat med 4 att passa i en byte)
}
om växeln är låg, blir motorn i den andra riktningen:
annat {
digitalWrite (motor1Pin, hög); ställa in etapp 1 av H-bron hög
digitalWrite (motor2Pin, låg); ställa in etapp 2 av H-bryggan låg
potValue = analogRead(potPin); läsa värdet pot
analogWrite (speedPin, potValue/4); PWM speedPin med potten värdet (dividerat med 4 att passa i en byte)
Delay(10); vänta 10 millisekunder innan nästa slingan
}
}
/*
blinkar en LED
*/
void blink (int whatPin, int howManyTimes, int milliSecs) {
int jag = 0;
för (jag = 0; jag < howManyTimes; i ++) {
digitalWrite (whatPin, hög);
Delay(milliSecs/2);
digitalWrite (whatPin, låg);
Delay(milliSecs/2);
}
}