Tutorial 08: analogRead() und Serial Port Communications

analogRead() und Serial Port Communications

Zu wissen, ob etwas ein- oder ausgeschaltet ist, kann sehr nützlich sein, aber oft werden Sie mehr wissen wollen. Wie hell ist das Licht?

Wie schnell bewegt sich der Satellit? Diese Arten von Antworten sind oft analog – sie decken einen großen Bereich von Werten ab, nicht nur ein oder aus.

Die Arduino griffe analog eingänge mit 6 gewidmet pins, beschriftet A0 durch A5. Diese Pins haben Zugriff auf einen Analog-Digital-Wandler, der den Bereich der Eingangswerte aufnimmt und eine digitale Version erstellt, indem der Bereich in winzige Teile zerlegt wird. All dies wird hinter den Kulissen abgewickelt – alles, was Sie tun müssen, ist einige sehr einfache Funktionen zu verwenden, und Sie erhalten, was Sie brauchen.

Sie Benötigen

  1. Potentiometer (jede widerstand palette wird arbeit)
  2. Jumper Drähte–mindestens 3
  3. Fahrrad reifen

Schritt-durch-Schritt Anweisungen

  1. Ort die potentiometer in ihre steckbrett.
  2. Führen Sie ein Überbrückungskabel vom 5-Volt-Pin des Arduino zu einem der äußeren Pins Ihres Potentiometers.
  3. Führen Sie ein weiteres Überbrückungskabel von einem der Massepins Ihres Arduino (mit der Bezeichnung GND) zum anderen äußeren Pin des Potentiometers.
  4. Führen Sie den letzten Jumper-Draht von Pin A0 Ihres Arduino zum mittleren Pin des Potentiometers.
  5. Schließen Sie den Arduino an Ihren Computer an.
  6. Öffnen Sie die Arduino IDE.
  7. Öffnen Sie die Skizze für diesen Abschnitt.
  8. Klicken Sie oben links auf dem Bildschirm auf die Schaltfläche Überprüfen. Es wird orange und dann wieder blau, sobald es fertig ist.
  9. Klicken Sie auf die Schaltfläche Hochladen (neben der Schaltfläche Überprüfen). Es wird orange und dann wieder blau, sobald es fertig ist.
  10. Gehen Sie in der Menüleiste zu Extras > Serieller Monitor – dadurch wird das Fenster Serieller Monitor geöffnet.
  11. Stellen Sie nun den Drehknopf des Potentiometers ein und beobachten Sie das serielle Monitorfenster. Die Zahlen sollten zwischen 0 und 1023 eingestellt werden.

 Mit der Arduino analogread und Map Funktion mit einem Potentiometer an Pin A0

Dieses Bild zusammengesetzt mit Fritzing.

Der Arduino-Code

/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor. Graphical representation is available using serial plotter (Tools > Serial Plotter menu) Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain.*/// the setup routine runs once when you press reset:void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600);}// the loop routine runs over and over again forever:void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // print out the value you read: Serial.println(sensorValue); delay(1); // delay in between reads for stability}

Besprechen Sie die Skizze

Diese Skizze beginnt mit einem mehrzeiligen Kommentar, der die Skizze und die Schaltung beschreibt. Sie werden wahrscheinlich feststellen, dass der erste Codeblock die Funktion setup() ist – wir deklarieren oder initialisieren keine Variablen zu Beginn dieser Skizze – stattdessen werden wir dies wie im letzten Beispiel innerhalb der Funktion loop () tun. In den geschweiften Klammern von setup() besuchen wir die Serielle Bibliothek erneut und verwenden die Funktion Seriell.beginnen().

void setup() {// initialize serial communication at 9600 bits per second:Serial.begin(9600);}

Wenn Sie sich an die letzte Lektion erinnern, Seriell.begin() nimmt die Baudrate als Argument (dies wird fast immer 9600 sein). Mit dieser Funktion können Sie einen Kommunikationskanal zwischen dem Computer und dem Arduino einrichten. Wie Sie vielleicht schon wissen, wird setup () nur einmal ausgeführt, und dann fahren wir mit dem nächsten Codeblock fort.

Aber warte! Müssen wir nicht den Modus der PIN einstellen, die wir verwenden werden? Toller Punkt!

Was der Arduino standardmäßig tut, ist, alle Pins auf der Platine als Eingänge zu setzen, es sei denn, Sie sagen es anders. In vielen Fällen müssen Sie also nicht explizit eine Pin als Eingabe mit der Funktion pinMode () festlegen. Davon abgesehen – ich mache es mir zur Gewohnheit, dies trotzdem zu tun – weil es mir die Dinge klar macht – und das ist es wert in Raum und Mühe.

Ich wage es also, den Modus des Pins mit der Funktion pinMode(A0, INPUT) in den geschweiften Klammern von setup() – Sie werden es nicht bereuen.

Wenn wir zur loop() -Funktion übergehen, beginnen wir mit einer Variablendeklaration und Initialisierung.

int sensorValue = analogRead(A0);

Wir deklarieren eine Variable namens sensorValue und initialisieren sie zur Ausgabe einer neuen Funktion. Diese neue Funktion ist die Funktion analogRead(). Also raten Sie mal, was diese neue Funktion analogRead () macht. Es liest den Wert an dem von Ihnen gewählten analogen Pin – in diesem Fall ist es der analoge Pin A0, an den der Mittelstift des Potentiometers angeschlossen ist. Die Spannung an Pin A0 wird auf eine Zahl zwischen 0 und 1023 abgebildet und dieser Wert wird der variablen sensorValue zugewiesen.

Wenn Sie sich von oben erinnern, liegt die tatsächliche Spannung an Pin A0 zwischen 0 und 5 Volt, je nachdem, wo Ihr Potentiometer eingestellt ist – dieser Wert wird mit Hilfe des Analog–Digital-Wandlers auf den Bereich 0 – 1023 abgebildet. Wir haben also eine Variable, die den Wert an unserem Potentiometer aufgezeichnet hat – was kommt als nächstes? Nun, schauen wir uns den Wert an. Dazu müssen wir es vom Arduino auf unseren Computer drucken – und Sie haben es erraten, wir werden die serielle Bibliotheksfunktion println() verwenden, um genau das zu tun…

Serial.println(sensorValue);

Keine großen Überraschungen hier – wir senden als Argument die Variable sensorValue an die Funktion Serial.println() und unser Serial Monitor-Fenster zeigen die resultierenden Werte an.

Um die Skizze zu beenden, rufen wir die Funktion delay() für eine Millisekunde auf, um sicherzustellen, dass unser nächster Messwert stabil ist, und beginnen erneut am oberen Rand der Schleife (). Wir zeichnen einen neuen Wert mit analogRead() auf, speichern ihn in der Variablen sensorValue und drucken ihn dann auf dem Computer aus.

All dies ist gut und gut, denken Sie vielleicht, aber was hat ein Potentiometer mit Sensoren zu tun? Ein Potentiometer spürt nichts! Sie haben Recht – aber interessanterweise arbeiten viele Sensoren nach dem gleichen Prinzip wie ein Potentiometer – dem Einstellen des Widerstands. Nehmen Sie zum Beispiel einen Fotowiderstand – er kann verwendet werden, um Licht zu erfassen –, da sich der Widerstand basierend auf der Helligkeit des Lichts ändert, dem er ausgesetzt ist. Jetzt ist der Ball in Ihrem Spielfeld – wofür können Sie analogRead() verwenden?

Versuchen Sie es selbst

  • Ändern Sie den analogen Pin in A2. Nehmen Sie Anpassungen im Code und in der Schaltung vor.
  • Versuchen Sie ein anderes Potentiometer in der Schaltung, beeinflusst es den angezeigten Wertebereich?

Weiterführende Literatur

  • analogRead()
  • Analoge Eingangspins
  • Potentiometer Tutorial – das ist gut

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.