Die LED-Helligkeit mit PWM steuern
Quelle: http://www.mathias-wilhelm.de/arduino/beginner/pulsweitenmodulation-pwm/
Der "Trick" beim Arduino besteht darin, dass ein geeigneter PWM-Port (die Pins 3, 5, 6, 9, 10, 11) als digitaler OUTPUT-Port angemeldet werden muss. Geschrieben wird nachher aber mit dem Befehl analogWrite(Port,Wert von 0 bis 255):
void setup() { // put your setup code here, to run once: pinMode(5,OUTPUT); } void loop() { // put your main code here, to run repeatedly: analogWrite(5,255); // volle Helligkeit delay(1000); analogWrite(5,127); // halbe Helligkeit delay(1000); analogWrite(5,63); // viertel Helligkeit delay(1000); analogWrite(5,0); // keine Helligkeit delay(1000); } |
Einen Gleichstrommotor langsam anfahren und wieder abbremsen
Der Motor wird an Port 5 und GND angeschlossen. Beachten Sie, dass der Motorstrom nicht größer als 30 mA sein darf. Messen Sie Ihren Motor vorher bei 5 V aus!
Beachten Sie, dass der Motor bei Belastung (z.B. Abstoppen der Welle mit der Hand) mehr verbrauchen kann, als im Leerlauf gemessen.
Ich habe daher einen Motor mit 14 mA Leerlaufstrom ausgewählt.
// Einen Motor sanft anlaufen und abbremsen lassen #define MINWERT 80 #define MAXWERT 255 #define PWM_PORT 5 #define BESCHLEUNIGUNG 30 // größerer Wert = langsamer anfahren void setup() { // put your setup code here, to run once: pinMode(PWM_PORT,OUTPUT); } void loop() { // Langsam anfahren for (int i = MINWERT; i { analogWrite(PWM_PORT,i); delay(BESCHLEUNIGUNG); } analogWrite(PWM_PORT, MAXWERT); // hohe Geschwindigkeit 3 sec. halten delay(3000); // Langsam abbremsen for (int i = MAXWERT; i>MINWERT; i--) { analogWrite(PWM_PORT,i); delay(BESCHLEUNIGUNG); } analogWrite(PWM_PORT, MINWERT); // Motor 3 sec. ganz langsam delay(3000); } |
Einen Gleichstrommotor links und rechts herum laufen lassen - mit PWM
// Einen Motor links und rechts herum laufen lassen // Die Polaritätsumkehr passiert dadurch, dass man den // RICHTUNGSPORT einmal HIGH und einmal LOW schaltet #define PWM_PORT 5 #define RICHTUNGS_PORT 2 #define ZEIT 3000 // ms #define PWM_POWER 200 void setup() { // put your setup code here, to run once: pinMode(PWM_PORT,OUTPUT); pinMode(RICHTUNGS_PORT,OUTPUT); } void loop() { // Links rum digitalWrite(RICHTUNGS_PORT, LOW); analogWrite(PWM_PORT,PWM_POWER); delay(ZEIT); // Anhalten analogWrite(PWM_PORT,0); delay(ZEIT); // Rechts rum digitalWrite(RICHTUNGS_PORT, HIGH); // Hier muss jetzt "umgekehrt" gedacht werden! // Die PWM-Welle ist jetzt vertikal gespiegelt // _|-------|__|-------|_ -> -|_______|--|_______|- // Statt PWM = 200 muss PWM = 255 - 200 = 55 gewählt werden! analogWrite(PWM_PORT,255-PWM_POWER); delay(ZEIT); // Anhalten analogWrite(PWM_PORT,255); delay(ZEIT); } |
.