Zum Inhalt springen

Analog Out

    Sechs der digitalen Kanäle auf dem Arduino-Board sind nicht nur digital, sondern auch analog ansteuerbar. Sie sind mit dem Aufdruck PWM gekennzeichnet (Kanal 3, 5, 6, 9, 10, 11).

    PWM (Pulse Width Modulation) bedeutet, dass kein konstantes Signal an dem Kanal anliegt, sondern dass dieser Kanal kontinuierlich an- und abgeschaltet wird. In der Arduino-Software übergibt man einen Wert zwischen 0 und 255 an den Kanal. 0 entspricht dem GND (Minus-Pol), 255 entspricht 5V+, Zwischenwerte bedeuten für träge Bauteile (LEDs, Motoren, etc.) also eine Spannung zwischen 0 und 5V. Damit kann man also die Geschwindigkeit von Motoren oder die Helligkeit einer LED regulieren.

    (Motoren sollten nicht direkt an einen Arduino-Kanal angeschlossen werden. Mehr dazu im Abschnitt Motorsteuerung.)


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Das Arduino-Beispiel Fading (File>Examples>Analog>Fading) zeigt, wie man eine LED dimmt. Hier der Code von David A. Mellis:

    // by David A. Mellis and Tom Igoe
    
    int ledPin = 9;
    
    void setup() {
    
    }
    
    void loop() {
      for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
        analogWrite(ledPin, fadeValue);
        delay(30);
      }
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
        analogWrite(ledPin, fadeValue);
        delay(30);
      }
    }

    Im Gegensatz zur digitalen Ausgabe muss ein analog angesprochener Kanal nicht im Setup deklariert werden. Der Befehl analogWrite erhält als Parameter den Pin, an dem die LED angeschlossen ist und den Wert (0 – 255), wie hell die LED leuchten soll.

    18 Gedanken zu „Analog Out“

    1. Ich möchte mit meinem Arduino UNO eine RGB-LED und einen Servomotor ansteuern. Einzeln (nur RGB-LED bzw. nur Servo funktioniert es, wenn ich aber beide zeitgleich nutzen will funktioniert die RGB nicht richtig.
      Was muss ich machen?

    2. Die Frequenz beträgt also 500Hz und ist somit für das Auge nicht wahrnehmbar.
      Für eine Oszilloskop aber schon. ;-)

    3. Zu beachten ist dass der Wert 255 einer Pulsdauer von 2ms entspricht.
      Somit ist der Ausgang bei dem Wert 127 für eine 1ms auf +5V und dann wieder für 1ms auf 0V. Und beim Wert 63 für eine 0,5ms auf +5V und dann wieder für 1,5ms auf 0V.

    4. 我研究出來囉~~其實也沒啥研究拉…就是照Cooper的方式實作XD分享在這下面是Arduino端的程式其實也就是接收電腦端從com port傳來的數字訊號,然後在判讀訊號發射相對應的紅外線:))至於C#那邊的程式太多拉…貼這會報掉XDD#include // 引用 IRRemote 函式庫IRsend irsend; // 定義 IRsend 物件來發射紅外線訊號int iinnmcogByte = 0; // 用來儲存收進來的 data bytevoid setup() { // 開啟 Serial port, 通訊速率為 9600 bps Serial.begin(9600);}void loop() { // 檢查是否有資料可供讀取 if (Serial.available() > 0) { // 讀取一個 byte iinnmcogByte = Serial.read(); // 決定打開或關掉 LED if (incomingByte == ‘1’) irsend.sendNEC(0xFB30CF, 32); //前進 else if(incomingByte == ‘2’) irsend.sendNEC(0xFBF20D, 32); //後退 else if(incomingByte == ‘3’) irsend.sendNEC(0xFB9867, 32);//左轉 else if(incomingByte == ‘4’) irsend.sendNEC(0xFB32CD, 32); //右轉 else irsend.sendNEC(0xFBA05F, 32); //停止 }}

    5. Eine grundsätzliche Frage eines Einsteigers an der Stelle: Die Pins, die (so wie ich das verstanden habe) grundsätzlich PWM könnten, sind demnach universell? Wenn ich also die Einsteiger-Beispiele (z. B. das einfache BLINK) abwandle, brauche ich dann keine Rücksicht auf diese Beschriftung zu nehmen? Sprich – eine LED kann ich mit den gleichen Befehlen genausogut über Pin 5 wie über Pin 8 ansteuern?

    6. Der Vollständigkeit halber: LED sind eigentlich keine “trägen” Bauteile im ursprünglichen Sinne des Wortes – träge ist vielmehr das Auge, das das PWM-Flackern ab einer bestimmten Frequenz einfach nicht mehr wahrnimmt

    7. digitalWrite(FET_LS_R, LOW);
      delay (1);
      digitalWrite(FET_HS_R, HIGH);
      delay (5);
      digitalWrite(FET_HS_R, LOW);
      delay (1);
      digitalWrite(FET_LS_R, HIGH);
      delay (5);
      break;

      ein Lösungsansatz für alle die dasselbe Problem besitzen, jedoch kleine Frequenz..

      Nochmals besten Dank!

    Die Kommentarfunktion ist deaktiviert.