Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Franzis Adventskalender für Arduino – Tag 9

Posted on 9. Dezember 202214. Dezember 2022 by Stefan Draeger

In diesem Beitrag möchte ich mit dir das neunte Türchen des Franzis Adventskalender für Arduino öffnen.

Franzis Adventskalender für Arduino - Tag 9
Franzis Adventskalender für Arduino – Tag 9

Wenn wir nun das Türchen öffnen, finden wir (wie gestern auch) zwei 10 cm lange, rote Breadboardkabel.

Eigentlich wollte ich mich mit Kritik zurückhalten, doch an zwei aufeinanderfolgenden Tagen die Breadboardkabel finde ich schon etwas unglücklich.

Da ich bereits das heutige Thema „Aufgabe: verbesserte Abfrage des Tasters“ dir in den letzten drei Tagen ausführlich gezeigt habe, möchte ich heute etwas ganz anderes machen, es soll nun heute um analoge Werte am Arduino Nano gehen.

Heute möchte ich dir zeigen, wie du eine LED als Lichtsensor einsetzen kannst. Eigentlich dient eine LED zum Abgeben von Licht, jedoch kann diese auch durch den verbauten Kristall eine kleine Spannung erzeugen, welche wir wiederum am Arduino per analogen Pin messen können. Dazu habe ich dir bereits ein kleines YouTube Video auf meinem Kanal gewidmet.

LED als Lichtsensor am Arduino UNO
Dieses Video auf YouTube ansehen.

Im gleichnamigen Beitrag Arduino Lektion #101: LED als Lichtsensor habe ich dir das ganze bereits ausführlich beschrieben, jedoch möchte ich hier mit den vorhandenen Bauteilen dir dieses Projekt etwas näher bringen.

Exkurs – Analoge Werte am Arduino Nano verarbeiten

Gewiss wird dieses Thema im Handbuch zum Adventskalender noch behandelt, aber es kann nicht schaden dieses Thema schon zu behandeln, denn dieses ist sehr essenziell für die Mikrocontrollerprogrammierung.

Was ist ein analoges Signal?

Ein analoges Signal am Arduino kann einen Wert zwischen 0 und, 1023 einnehmen. Dieses Signal können wir auf eine 5V Spannung repräsentieren, wobei 0 dann 0 V und der Wert 1023 5 V darstellen.

Somit kann ein analoges Signal mehr Zustände als ein rein digitales Signal besitzen, welches ja im Grunde nur die Zustände EIN/AUS – 1/0 hat.

Wie lese ich ein analoges Signal am Arduino?

Der Arduino UNO & Nano haben 6 analoge Pins, welche mit der Funktion „analogRead(<Pin>)“ gelesen werden können. Wobei die Rückgabe ein Integerwert (eine Ganzzahl) zwischen den erwähnten 0 und 1023 ist.

Wenn wir als nun die gelbe LED an einen der analogen Pins mit der Anode (dem Pluspol, langer Kontakt) anschließen und die Kathode (der Minuspol, kurzer Kontakt) an GND, dann können wir die Werte auf der seriellen Schnittstelle ausgeben und ablesen.

Programmieren

Das Programm zum auslesen eines analogen Wertes ist recht einfach, denn man muss wie erwähnt nur in einem Intervall den Pin auslesen und diesen Wert behandeln.

// LED am analogen Pin A0 angeschlossen
#define lichtsensor A0

void setup() {
  // beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
}

void loop() {
  // auslesen des aktuellen Wertes vom analogen Pin
  int value = analogRead(lichtsensor);
  // ausgeben des gelesenen Wertes auf der seriellen Schnittstelle
  Serial.println(value);
}

Wenn wir diesen Code auf den Mikrocontroller überspielen und zusätzlich den seriellen Plotter öffnen, können wir erkennen, wie sich die Werte je nach Lichteinfluss ändern.

Aktivieren der LEDs je nach Wert

Nun können wir wie erwähnt die untere und obere Grenze ermitteln und mit einer weiteren Funktion „map“ diese Werte verwenden und eine der beiden LEDs (rot & grün) einschalten.

// LED am analogen Pin A0 angeschlossen
#define lichtsensor A0

// rote LED am digitalen Pin D3 angeschlossen
#define ledRot 3

// grüne LED am digitalen Pin D8 angeschlossen
#define ledGruen 8

// ein Array mit den Pins der LEDs
int leds[] = { ledRot, ledGruen };

// Variable zum Speichern der zuletzt ermittelten LED bzw.
// der Index für das Array
int activeLed = 0;

void setup() {
  // beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);

  // die Pins der LEDs als Ausgang definieren
  pinMode(ledRot, OUTPUT);
  pinMode(ledGruen, OUTPUT);
}

void loop() {
  // deaktivieren der zuletzt aktivierten LED
  digitalWrite(leds[activeLed], LOW);

  // auslesen des aktuellen Wertes vom analogen Pin
  int value = analogRead(lichtsensor);
  // ausgeben des gelesenen Wertes auf der seriellen Schnittstelle
  Serial.println(value);

  // ermitteln des Indexes aus dem Array, mit der unteren und oberen Grenze
  activeLed = map(value, 100, 325, 0, 1);
  digitalWrite(leds[activeLed], HIGH);

  // eine kleine Pause von 125 ms.
  delay(125);
}

Wenn wir den obigen Code auf den Mikrocontroller überspielen, dann können wir zbsp. mit einer kleinen Taschenlampe auf die gelbe LED leuchten und so zwischen den beiden LEDs (rot & grün) wechseln.

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}