Bastelseite Display + Antriebe Sensoren C++ | |
PWM steht für Pulsweitenmodulation. Der Arduino verwendet die PWM-Technik an seinen 6 digitalen Ausgängen mit der Tilde (∼). Dies sind die Pin 3, 5, 6, 9, 10 und 11. Hiermit lassen sich beinahe stufenlos Werte zwischen 0 und 255 einstellen.
Diese digitale Steuerung erfolgt nur im binären Format 5 Volt als ein- oder 0 Volt als ausgeschaltet. Schaltet man viele Male schnell ein und aus wird dadurch eine Rechteckwelle erzeugt. Diese kann durch langsameres oder Schnelleres Schalten beeinflusst werden.
Aber wozu soll ich schalten? Der Arduino kann das doch viel besser: möchten Sie den Motor langsamer laufen lassen, geben Sie im nur weniger Strom - oder ändern das Rechtecksignal!
Die Erzeugung des Rechtrecksignals
Von einem roten Strich zum Nächsten ist ein Zyklus.
Nehmen wir aus dem oberen Bild das grüne und blaue Rechtecksignal einzeln heraus, können die Abstände der Einschalt- und Ausschaltzeit besser betrachtet werden.
Das Rechtrecksignal allein:
Je länger die Einschaltzeit ist, desto höher ist damit auch der digitale Wert.
Ein: 0 und Aus: 100% entspricht digital also "0".
Ein: 25% und Aus: 75% sind dann digital: 25% = 63,75; dies wird aufgerundet auf 64. Warum?
Da der digitale Wert von 0 bis 255 reicht, sind 0% = digital 0.
100% entsprechen also digital 255.
Somit sind 25% ( = ein Viertel von 255 ) = 63,75.
Ladet den Sketch hoch, nehmt einen Poti, schließt ihn außen an GND und an +5V an und führt den mittleren Potianschluß an "A0".
/* Auslesen eines Potentiometers mit 470 kOhm */ #include <Wire.h> int potianschluss = A0; int potiwert = 0; int ausgabe = 0; int prozent = 0; void setup() { Serial.begin(9600); Serial.println(" Auslesen eines Potis: "); delay(2000); } void loop() { Serial.println("---------------------------"); potiwert = analogRead(potianschluss); ausgabe = map(potiwert, 0, 1023, 0, 255); prozent = map(potiwert, 0, 1023, 0, 100); Serial.print("Potiwert: "); Serial.print(potiwert); Serial.print(" - Ausgabe: "); Serial.print(ausgabe); Serial.print(" - "); Serial.print(prozent); Serial.println("%"); delay(500); // kurze Pause zum Datenverarbeiten // und zum Lesen der Werte }
Somit wird nun klar, warum wir 3 verschiedene Werte haben: Poti (analog von 0 bis 1023), Digitaler Wert von 0 bis 255 und die Prozentangabe 0 bis 100%.
"ausgabe = map(potiwert, 0, 1023, 0, 255);" berechnet vom Potiwert die Digitale Ausgabe.
"prozent = map(potiwert, 0, 1023, 0, 100);" und hier berechnet die map-Funktion die Prozentangabe aus dem Potiwert.
Auslesen eines Potis: --------------------------- Potiwert: 0 - Ausgabe: 0 - 0% --------------------------- Potiwert: 29 - Ausgabe: 7 - 2% --------------------------- Potiwert: 103 - Ausgabe: 25 - 10% --------------------------- Potiwert: 176 - Ausgabe: 43 - 17% --------------------------- Potiwert: 217 - Ausgabe: 54 - 21% --------------------------- Potiwert: 267 - Ausgabe: 66 - 26% --------------------------- Potiwert: 305 - Ausgabe: 76 - 29% --------------------------- Potiwert: 359 - Ausgabe: 89 - 35% --------------------------- Potiwert: 406 - Ausgabe: 101 - 39% --------------------------- Potiwert: 476 - Ausgabe: 118 - 46% --------------------------- Potiwert: 577 - Ausgabe: 143 - 56% --------------------------- Potiwert: 653 - Ausgabe: 162 - 63% --------------------------- Potiwert: 773 - Ausgabe: 192 - 75% --------------------------- Potiwert: 818 - Ausgabe: 203 - 79% --------------------------- Potiwert: 916 - Ausgabe: 228 - 89% --------------------------- Potiwert: 1023 - Ausgabe: 255 - 100% --------------------------- ....
Hier gehts zu: gastack.com