• Hallo Zusammen, Aufgrund der aktuellen Situation setzten wir die Möglichkeit aus, sich mit Gmail zu registrieren. Wir bitten um Verständnis Das RCMP Team

Anleitung Arduino - Wie setze ich ein Arduino - Projekt um

BAXL

Admin
Mitarbeiter
Umsetzung eines Arduino-Projektes

Über Arduinos wird viel geschrieben, es gibt unzählige Seiten mit Anleitungen zur Programmierung und ebenso viele Seiten mit Beispielprojekten.
Wenn man nicht gerade ein elektronischer Hardwarexperte, oder Softwarschreiber ist, fällt es schwer, eine eigene Idee in die Tat umzusetzen.
Wie fange ich an, worauf muß ich achten, was brauche ich, wie sieht die Zusatzbeschaltung aus?

Ziel des Themas
Ich versuche in diesem Thema zu beschreiben, wie ich selbst an die Umsetzung einer Idee herangehe. Das macht jeder anders und ob meine Herangehensweise die Richtige ist?
Ich weiß es nicht, zumindest kommt immer etwas am Ende heraus. Ich werde nicht bei allem bei Adam und Eva anfangen und auch nicht großartig Grundlagen aufarbeiten, dazu gibt es genügend Material hier im RCMP-Arduino-Forum oder im Internet. Man muß einfach mal danach suchen und lesen.

Projektidee
Am Anfang steht immer die Idee dafür, was man machen möchte. Im Grunde geht es immer darum, dass man irgendeine physikalische Größe erfasst oder misst und daraus Schaltfunktionen ableitet, im weitesten Sinne also eine Steuerung. Kurz gesagt, was will ich messen/überwachen, was soll dann passieren und wie programmiere ich das.

Daten erfassen
Für eine Steueraufgabe ist es immer erforderlich eine Eingangsgröße zu erfassen. Dafür gibt es unterschiedliche Sensoren, je nachdem, welche physikalische Größe gemessen werden soll.
Am Arduino kommt dann stets ein digitales Signal (An oder Aus) oder ein analoges Signal (Spannung) an. Der "normale" Arduino ist nur in der Lage Spannungen bis maximal +5V zu verarbeiten, sonst geht er kaputt. Einige Sonderformen oder Artverwandte des Arduinos können sogar nur maximal 3,3V vertragen. Ich beschränke mich, der Einfachheit halber, aber auf die 5V Varianten (Uno, Nano, Mega usw.).

Projektierung Schritt 1:
Im ersten Schritt sollte also klar sein, welche physikalische Größe man messen/erfassen möchte. Der Arduino ist leider nur in der Lage Spannungen/Pegel zu messen bzw. zu erkennen. Um andere Größen messen können wie z.B. Helligkeit, Temperatur, Magnetismus, Feuchtigkeit, Farben usw. muß eine Art Umsetzer her, der daraus eine messbare Spannung oder Digitalpegel macht.

Dafür gibt es, je nach physikalischer Größe, ein Vielzahl an Sensoren, die bereits für den direkten Einsatz am Arduino konzipiert sind, d.h., man kann sie direkt an einen der Arduinoeingänge mit einem Kabel anschließen. Diese Sensoren sind dann oft auf einer Platine angebracht, die eine zusätzliche Beschaltung mit weiteren elektronischen Bauteilen besitzt, um dem Arduino verarbeitbare elektrische Signale an den Eingängen liefern zu können. Nicht selten sind das auch Schaltungen, die dem Arduino kein einfaches An-Aus Signal, oder eine Spannung von 0 bis 5V liefern, sondern die Messwerte über eine serielle Kommunikation übermitteln. Wie das funktioniert ist aber nicht Bestandteil diese Themas.

Projektierung Schritt 2:
Wenn Signale verarbeitet wurden, bedarf es einer Möglichkeit darauf zu reagieren. Das können Schalt- und Steuerfunktionen, oder auch nur eine reine "Anzeige" (Display, Signal LED, akustische Ausgabe) sein. Ich muß mir also überlegen, in welcher Form der Arduino mit der Außenwelt in kontakt treten soll. Möchte ich irgendetwas einschalten (Motor, Lampe), oder soll mir der Arduino nur eine Information mitteilen (Display, Kontrolleuchte, sonstige Anzeigemöglichkeit, akustisches Signal, Speicherkarte).

Projektierung Schritt 3:
Wenn Messwerte zur Verfügung stehen, müssen diese programmtechnisch erfasst, verarbeitet und einer Ausgabe zugeführt werden. Das erfolgt entweder in einem Programm, dass man von Grund auf selbst schreibt, oder indem man bereits vorhandene Beispielprogramme auf eigene Bedürfnisse anpasst, erweitert, oder mehrere Beispielprogramme miteinander kombiniert.

Tipp:
Meine Taktik dabei ist immer schreitweise vorzugehen, d.h. ich probiere in ganz einfachen Programmen die Sensoren oder Ausgabegeräte einzeln, der Reihe nach aus. Damit behalte ich die Übersicht und finde Programmfehler schneller. Wenn jeder einzelne Sensor und jedes einzelne Ausgabegerät sicher funktioniert, beginne ich die einzelnen Komponenten nach und nach zu einem Gesamtsystem zusammenzufügen. Erst wenn jede neu entstandene Kombination zufriedenstellend funktioniert, kommt das nächste Teil, oder Funktion hinzu. Dabei nicht vergessen, jeden (funktionierenden) Zwischenstand einer Programmversion mit einem Sinnvollen Namen zu speichern und im Quelltext des Programms kurz mit einem Kommentar zu beschreiben. Wenn man nämlich bei der 5. Zwischenversion angekommen ist, weiß man oft nicht mehr, was man sich bei Version 2 gedacht hat. Das erleichtert auch einen Schritt zurück (Fall Back), wenn man sich vergallopiert hat und zu einer funktionierenden Version zurückkehren möchte.

Angenehmer Nebeneffekt, die Zwischenversionen können als Basis für eine neue abgewandelte Anwendung direkt verwendet werden, weil man ja genau weiß, dass sie funktionieren.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Messgrößen digital

Das einfachste Eingagssignal ist das Erkennen von "AUS" oder "EIN" (0 oder 1, LOW oder HIGH , 0V oder 5V). Die digitalen Eingangsports des Arduinos vertragen bis maximal 5V Spannung. Ein "AN", oder "HIGH" wird von der Schaltung registriert, wenn am Eingang eine Spannung zwischen ca. 3,3V bis 5V anliegen. Ein "AUS" oder "LOW", entsprechend unter 3,3V bis 0V.

Sensoren
Viele der im Handel erhältlichen, anschlußfertigen Sensoren sind in der Lage diese auf Arduinoanwendungen angepasste Spannungspegel zu liefern. Das ist natürlich nur dann sinnvoll, wenn der zu messende physikalische Zustand auf diese zwei Zustände reduziert werden kann. Typische Sensoren wären z.B. ein ganz einfacher Taster den man drückt, oder nicht drückt. Aber auch andere Ereignisse können auf zwei Pegel reduziert werden, Bewegung (Ja oder Nein), Licht (an oder aus), Relais (geschaltet oder nicht geschaltet).

Diese Sensoren besitzen eine Auswerteelektronik, die auf Schwellenwerte reagiert, die ggf. auch mit einem Poti veränderbar sind. Ein Sensor mit einem lichempfindlichen Widerstand könnte das z.B. sein, wenn es nicht auf den genauen Helligkeitswert ankommt, sondern nur das Über- oder Unterschreiten eines bestimmten Helligkeitswertes. Einsatzgebiet könnte ein Dämmerungsschalter sein, der beim Unterschreiten einer gewissen Helligkeit eine Lampe einschaltet. Es gibt viele weitere Sensoren, die diese zwei Zustände liefern können, aber parallel noch eine analoge Spannung zwischen 0 und 5V ausgeben.

Als Beispiel habe ich ein Foto eines Helligkeitssensors eingefügt (siehe Unten). Dort erkennt man als Ausgänge zwei Pins, die mit D0 und A0 gekennzeichnet sind. D0 gibt ein HIGH oder LOW (+5V - 0V) Signal aus, wenn ein Schwellenwert über- oder unterschritten wird. Diese Schwelle stellt man mit dem blauen Potentiometer ein.
Gleichzeitig erhält man ein Analoges Signal an A0, dass quasi stufenlos zwischen 0V und +5V liegen kann. Das Signal kannst Du mit einem analogen Eingang des Arduinos messen und auch Zwischenwerte auswerten. Damit die Schaltung arbeiten kann, muß man den Sensor zusätzlich an 5V Betriebsspannung an VCC+ und an GND des Arduinos anschließen.

 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Analoge Messgrößen

Verschiedentlich reicht es nicht aus, einfach nur ein digitales Signal auszuwerten. Ich denke dabei z.B. an eine Spannungsüberwachung für einen Akku. Da kann es u.U. gewünscht sein, je nach Spannungslage, unterschiedliche Schaltreaktionen auszulösen und/oder die gemessene Spannung auf einem Display anzuzeigen, oder per Funk an eine Kontrolleinheit zu übertragen.

Auch hier gilt, dass der Arduino nur maximal 5V an einem analogen Einganang verträgt und messen kann. Die Messwerte zwischen 0 und 5V entsprechen dann einem eingelesenen Zahlenwert zwischen 0 und 1024. Zwischenwerte müssen im Programm ausgerechnet werden. So entspräche der eingelesene Zahlenwert von 512 einer Spannung von 2,5V .

Wir können hier auch wieder ein einfaches Beispiel wählen, die Spannung eines einzelligen (1s) Lipos. Ein Lipo hat voll geladen eine Spannung von 4,2V, wir können diesen Lipo also direkt an einen analogen Kanal anschließen (Auflösung von 10Bit also ca. 5mV) , weil der analoge Eingang maximal 5V verträgt. Führt man eine Messung durch, so bekommt man für einen vollen Lipo mit 4,2V einen Zahlenwert von ca 860. Ein leerer Lipo bei 3,5 V hat als Messwert die Zahl von ca 716. Es ist nun möglich Zwischenwerte auszuwerten um vielleicht eine gelbe LED einzuschalten wenn der Lipo eine Spannung von unter 3,7V (kleiner 757) hat oder eine rote LED, wenn die Spannung bereits auf 3,2V (kleiner 655) eingebrochen ist.

Sofern Sensoren analoge Messwerte liefern und direkt von der 5V Betriebsspannung des Arduinos gespeist werden, kommen als Messgröße natürlich maximal 5V heraus, weshalb man die Messausgänge dieser Sensoren auch direkt an einen analogen Meßkanal eines Arduinos anschließen und messen kann.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Pegelwandlung

Was ist das?

Pegelwandlung bedeutet, dass ich ein elektrisches Signal, mit einer hohen oder sehr niedrigen Spannung, durch eine elektronische Zusatzschaltung auf einen nutzbaren Spannungsbereich umsetze.

Wann ist das nötig?
Nicht immer ist es möglich, eine Meßgröße mit einem fertigen Sensormodul zu erfassen, dann ist Kreativität und Eigeninitiative gefragt, natürlich auch ein gewisses elektrotechnisches Wissen.
Sehr häufig kämpft man dann auch mit der Tatsache, dass man Meßgrößen erfassen muß, die jenseits der bequemen +5V Gleichspannung des Arduinos ist. Dann kann es notwendig sein, eine viel höhere, aber auch eine sehr kleine Spannung für den Arduino auswertbar zu machen.

Digitale Signale
Am leichtesten ist es wieder nur einen digitalen Zustand in einer "fremden" Schaltung zu erfassen, also ob etwas ein- oder ausgeschaltet ist. Der einfachste Weg wäre dann ein Relais parallel zur Messgröße zu schalten. Der Vorteil ist dann die galvanische Trennung der beiden Schaltkreise, um den Arduino vor einer zu hohen Spannung zu schützen. Zudem kann man dann auch das Vorhandensein einer Wechselspannung erkennen, weil der Arduino nur mit Gleichspannung arbeitet.

Analoge Signale
Sofern man eine Gleichspannung analog messen möchte, ist die einfachste Form der Pegelwandlung ein Spannungsteiler. Nehmen wir wieder einen Lipo-Akku als Bespiel, diesmal aber einen 2s Lipo, bei dem zwei Zellen in Reihe geschaltet sind. Voll aufgeladen hat ein 2s Lipo bereits 8,4V, also viel zuviel für den 5V Eingang des Arduinos. Wie funktioniert das?
ganz einfach, Du nimmst zwei gleichgroße Widerstände und schaltest die in Reihe. Die Widerstände sollte schon recht groß sein (hoher Ohmwert), damit darüber ein möglichst kleiner Strom fließt und den Akku nicht zusätzlich belastet. Für das Bespiel nehmen wir mal zwei Widerstände von je 1000 Ohm (oder auch 1 Kiloohm im Sprachgebrauch), die wir als Reihenschaltung an Plus und Minus vom Akku anschließen.

Durch beide Widerstände fließt nun derselbe Strom, der sich aus I = U/R errechnet. Bei einem vollen Akku mit 8,4V wären das 8,4V / 2000Ohm = 0,0042A (4,2 Milliampere). Für die Messung schließt man einen analogen Eingang des Arduinos zwischen die beiden Widerstände an und den GND vom Arduino an Minus vom Akku. Damit wird die tatsächliche Gesamtspannung des Akkus an dem messpunkt genau durch Zwei geteilt. Hat der Akku 8,4V, misst der Arduino 4,2V, habe ich 6V am Akku, misst der Arduino 3V. Ich brauche die Messwerte im Arduinoprogram nur mit 2 mal nehmen und habe dann die tatsächliche Akkuspannung.

Ist die maximal zu messende Spannung größer als 5V, muß ich den Spannungsteiler (also die einzelnen Widerstände) so bemessen, dass am Arduino nie mehr als 5V anliegen. Dazu muß der Widerstand, der an Plus anliegt, größer sein, als der zweite Widerstand, der an Minus liegt.

Pegelwandlung mit einem Transistor
Man kann eine Pegelwandlung auch indirekt herbeiführen. Sollte eine zu überwachende elektrische Einheit mit einer größeren Gleichspannung als 5V arbeiten, können z.B. Schaltzustände einer höheren Spannung, ohne galvanische Trennung, auch über einen simplen Transistor angepasst werden. Dazu benötigt man ein paar Widerstände und einen Transistor. Die höhere Spannung steuert einen Transistor über Widerstände durch und auf Seite des Arduinos wird einfach die eigene 5V Betriebsspannung mit zwei Widerständen, die ausgangsseitig am Transistor angeschlossen sind, an den Arduino-Eingang gelegt.



Sehr kleine analoge Signale
Manchmal kommt es vor, dass das messbare analoge Spannungssignal und natürlich auch die Spannungsveränderung nur sehr klein ist. Ein Beispiel wäre dafür die Themperaturmessung mit einem k-Typ Themosensor. Bei solch einem Sensor werden zwei Drähte, die aus Nickelchrom und Nickel bestehen (NiCr-N) an ihrer Spitze zusammengelötet. Bei unterschiedlichen Themperaturen entsteht dann eine so genannte Thermospannung, die im niedrigen Millivoltbereich liegt mit Thermospannungen zwischen −6,458 mV bei −270 °C und 52,410 mV bei 1300 °C mit einer Empfindlichkeit von etwa 40 µV/°C (oberhalb 0 °C). Diese Spannungen sind so klein, dass ein Arduino mit seinem Messbereich (0 - 5V) und seiner Messauflösung von ca 5 mV keine sinnvollen Messergebnisse liefert.
Dafür kann man eine Verstärkerschaltung aufbauen, die diesen kleinen Spannungsbereich auf eine Spannung von 0 - 5V anhebt. Den Selbstaufbau werden idR. nur erfahrene Elektroniker hinbekommen, weshalb ich das hier jetzt nicht beschreibe. Für den normalen Heimanwender werden deshalb fertige Verstärkerschaltungen angeboten. Entweder als einzelnes Zubehör, oder bereits auf die jeweilige Anwendung ausgelegt. Für die k-Typ Thermosensoren gibt es Verstärkerschaltungen mit einem MAX6675 Verstärkerbaustein. Siehe auch den Post im Bericht zu Arduino Zusatzsensoren.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Praktisches Beispiel: Temperaturmessung

Für das erste praktische Beispiel wähle ich die Temperaturmessung aus. Das ist relativ einfach und bietet eine Vielzahl Anwendungsmöglcihkeite. Was das im Einzelnen sein kann, wird sich ergeben.

Wo bzw. "worin" messen wir?
Für die Temperaturmessung gibt es unzählige Sensoren und Sensortypen. Darum ist zu klären wovon bzw. wo ich die Temperatur messen möchte. Soll die Lufttemperatur oder Temperatur in Flüssigkeiten gemessen werden und in welchem Temperaturbereich liegen die zu erwartenden Messwerte, nicht zu vergessen, welche Ansprüche an die Genauigkeit gestellt wird. Nicht zuletzt können die Kosten ür einen Sensor eine Rolle spielen. Um das Beispiel nicht unnötig kompliziert zu machen, lasse ich die Messgenauigkeit außen vor.

Das zu messende Medium (Luft, Flüssigkeit) kann die Auswahl bereits stark einschränken. Sensoren für Flüssigkeiten sollten "wasserdicht" sein, bei Messungen in der Luft ist man etwas flexiebler, es sei denn die Messung erfolgt im Außenbereich.

Innenraumtemperaturmessung (Wohnung)
Nehmen wir an, es soll einfach die Raumtemperatur gemessen werden und die Messwertauflösung braucht maximal 0,5°C betragen. Die zu erwartenden Temperaturen liegen zwischen 10°C und ca. 30°C. Also der typische Bereich im Winter, wenn mal das Fenster offen war und im Sommer, wenn wir mal wieder einen heißen Tag hatten.

Auswahl eines Temperatursensors

LM35 DZ und TMP36
Die einfachste Variante ist ein LM35 oder TMP36. Diese Sensoren sehen aus wie ein normaler Transistor mit drei Beinchen. Die Pins werden aber am +5V, GND und an einen analogen Eingang vom Arduino angeschlossen. Die Messbereiche liegen bei -40°C und +125°C (TMP36) oder 0°C bis 100°C LM35 DZ.

Der TMP36 liefert für den Temperaturbereich eine Spannung von 0V (0 / -50°C) und 2V (409 / +125°C) D.h. 11,4°C / mV
Der LM35 DZ liegt bei 0°C (0 / 0V) und bei 100°C (205 /1V). D.h. 10mV / °CDie Auflösung der Sensoren wird jeweils mit 0.5°C angegeben und die Genauigkeit bei ca. 2°C

Rein rechnerisch wäre der TMP36 mit 11,4 mV/°C sogar günstiger bei der Messung, obgleich dieser einen größeren Temperaturmessbereich abdeckt. Meine Wahl wäre in dem Fall der TMP36.
Je nach Anbieter und Bezugsmenge liegt der Einzelpreis zwischen ca. 5,65€ und ca. 2,20€.

Vorteile:
  • Schnell und einfach anzuschließen
  • Schneller Austausch bei Defekten
  • Einfacher Programmcode
  • ziemlich sichere Messwerte (nicht Genauigkeit!)

Nachteile:
  • Jeder Sensor benötigt einen eigenen Analogeingang
  • Messgenauigkeit
  • meist nur als TO-Version (Transistorgehäuse) verfügbar - nicht für Flüssigkeiten geeignet
  • Etwas teurer

Dallas DS18B20
Kostengünstiger fällt die Rechnung aus, wenn man einen DS18B20 Temperatursensor nimmt (ca. 1,50€ / Stück). Der DS18B20 sieht wie ein normaler Transistor mit drei Beinchen aus.
Diesen Sensor kann man ebenfalls direkt am Arduino anschließen. Der Unterschied zu den o.g. Sensoren (TMP36 / LM35 DZ) ist die Art und Weise, wie der Messwert ausgelesen wird. Beim DS18B20 misst man nicht mit einem analogen Kanal, sondern erhält den Messwert über eine serielle Kommunikation. Dazu benötigt man +5V, GND und einen digitalen Arduinoeingang. Die Daten ließt man über den Datenpin aus. Dafür benötigt man allerdings eine Programmbibliothek mit Funktionen, die etwas aufwändiger zu programmieren sind.

Vorteile:
  • Preiswert
  • Mehrere Sensoren parallel an einem Datenpin
  • Der Sensor führt die Messung quasi selbstständig durch
  • Temperaturwerte werden im "Klartext" übermittelt (keine Umrechnung nötig)
  • Die Auflösung ist softwaremäßig einstellbar - 0,5°C (9 Bit) bis 0,0625°C (12 Bit)
  • Wasserdichte Version mit Anschlußkabel verfügbar

Nachteile:
  • Aufwändigere Programmierung
  • Bei mehreren Sensoren im Parallelbetrieb müssen die Adressen vorher ausgelesen werden
  • 1:1 Austausch bei Defekten umständlicher (Adressen müssen im Programmcode neu eingetragen werden)
  • Langsamer bei der Messung je nach Auflösung
  • Häufiger falsche oder keine Messergebnisse durch die serielle Übertragung
  • zusäzlicher 4,7K Widerstand von +VCC zum Datenpin erforderlich
  • gelegentlich Probleme beim Parallelbetrieb
Entscheidung:
Sofern kein Parallelbetrieb mehrerer Sensoren erforderlich ist, würde ich persönlich zu einem DS18B20 greifen. Der Programmieraufwand ist etwas höher, hält sich aber bei nur einer Messstelle in Grenzen. Die Messauflösung kann man nach Wunsch, auch im laufenden Programm, verändern. Bei Bedarf können weitere Sensoren angeschlossen werden, ohne aufwändigere Änderungen an der Beschaltung vorzunehmen, d.h. einfach einen weiteren Sensor parallel zum vorhandenen anschließen. Sollte es nötig werden, kann ein Sensor im TO-Gehäuse gegen einen wasserdichte Sensor 1:1 ausgetauscht werden.

"Humane" Schnittstelle

Serieller Monitor der Arduino IDE

Sofern die gemessene Temperatur nicht unmittelbar nur zur Steuerung von Schalt- und Regelvorgängen genutzt werden sollen, ist es interessant die Messwerte angezeigt zu bekommen.
Dafür bieten sich mehrere Möglichkeiten an. Während der Schaltungsentwicklung, d.h., der Arduino ist ständig per USB-Kabel mit dem Programmier-PC verbunden, reicht schon die Anzeige auf dem seriellen Monitor, den man in der Ardunino-Programmierumgebung öffnen kann. Mit entsprechenden Einstellungen und Programmzeilen, kann man sich die gemessenen Temperaturen fortlaufend auf dem PC-Monitor anzeigen lassen.

LEDs
Im Stand-Alone Betrieb, also der nackte Arduino nur mit einer Spannungsversorgung, braucht man ein Anzeigemedium. Geht es nur darum, Schwellen- bzw. Warnwerte sichtbar zu machen, reicht u.U. schon eine einfache LED, die beim Über- oder Unterschreiten eines Warnwertes aufleuchtet. Möchte man den echten Zahlenwert sehen, wird man um eine Anzeigevorrichtung, die lesbare Zeichen anzeigen kann, nicht herum kommen.

Vorteile:
  • einfach, billig

Nachteile:
  • sehr eingeschränkte Information

7 Segment Anzeige
Für die reine Darstellung von Zahlen (Temperaturen) reicht bereits eine einfache 7 Segmentanzeige. Bei Anzeigeblöcken, für jeweils eine Zahl, müssen die einzelnen LEDs separat über mehrere Digitalausgänge des Arduinos angesteuert werden. Das ist sehr ineffizient, weil man bei einer Temperatur mehrere Zahlen darstellen muß und quasi alle Digitalausgänge nur für die Anzeige belegen würde.
Für simple Zahlendarstellungen erhält man deshalb fertige, vierstellige Zahlenblöcke, die über eine kleine Zusatzelektronik komplett angesteuert werden. Die Übermittlung der Zahlen vom Arduino zur Anzeige erfolgt dann seriell. Das belegt dann nur zwei Digitalausgänge. Natürlich muß auch noch +Vcc und GND angeschlossen werden. Preislich liegen diese Anzeigen bei ca. 5,50€ und 1,70€.

Vorteil:
  • Einfach anzuschließen und anzusteuern
  • kostengünstig

Nachteil
  • reine Zahlendarstellung

LCD-Display
Um die Anzeige etwas netter zu gestalten z.B. in der Form "Temp: 23,5°C", kann man LCD-Displays einsetzen. Diese haben in einfachen Ausführungen zwei Zeilen mit 16 Zeichen, oder etwas größer mit 4 Zeilen zu 20 Zeichen. Für "nackte" Displays benötigt man dafür mehrere Digitalausgänge um die Anzeigedaten auf das Display zu transportieren. Zur Vereinfachung kann man einen (I2C) Konverter zwischen LCD-Display und Arduino schalten. Der Konverter bekommt die Anzeigedaten wieder seriell übermittelt, wofür am Arduino nur zwei Digitalausgänge benötigt werden. Und, selbstverständlich wieder +Vcc und GND. Zur Zeichenausgabe bekommt man Programmbiliotheken, die mit vorgefretigten Funktionen die Übermittlung vereinfachen. Der Preis liegt zwischen 6,00€ und 3,00€

Vorteile:
  • einfach anzuschließen
  • ausführliche Darstellung auch mit Erklärung um welchen Messwert es sich handelt
  • ggf. Sonderzeichen wie das ° Gradzeichen
  • kostengünstig

Nachteile
  • größere Bauform

OLED-Displays
Möchte man die Anzeige noch etwas bunter und munter machen, bieten sich Grafikdisplays. Diese werden idR. auch über eine serielle Schnittstelle beschrieben, wofür man ebenfalls eine Programmbibliothek benötigt.

Vorteile:
  • Ansprechende Darstellung mit Zeichen und Grafiken möglich

Nachteil:
  • umständliche Programmierung
  • Hoher Speicherbedarf der Programmbibliothek
  • oft sehr kleine Darstellung (schlecht ablesbar)
  • teuer

Entscheidung:
Die 7 Segmentanzeige reicht im Prinzip aus, ist hell und gut ablesbar, trotzdem würde ich zumindest ein LCD-Display mit 2 Zeilen zu je 16 Zeichen bevorzugen. Der Anschluß ist bei allen Anzeigetypen quasi identisch und bedarf so oder so der Einbindung einer Library. Die 2 zeiligen LCD Displays sind allgemein sehr kostengünstig erhältlich und bieten bei Programmerweiterungen die Möglichkeiten mehr Informationen als nur die reine Temperatur anzuzeigen, evtl. kann man das Projekt noch um eine zusätzliche Zeitanzeige erweitern, oder die Anzeige der maximal und minimal gemessenen Temperatur über einen Zeitraum usw..

Hardware klar!
Für das Musterprojekt kommt ein DS18B20 Temperatursensor im TO Gehäuse und ein 16x2 LCD-Display zum Einsatz. Es bleibt noch genügend Luft und Möglichkeiten das Projekt mit weiteren Sensoren oder Anzeigen zu erweitern. Nun braucht nur noch das Programm entwickelt werden. In diesem Thema soll es aber primär um die Projektierung der Hardware gehen.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Praktisches Beispiel: "Helligkeitsmessung"

Bei diesem Beispiel geht es um die Messung/Auswertung der Helligkeit. Die Anwendung könnte z.B. ein Dämmerungserkennung sein, um eine Lampe ein und wieder auszuschalten. Man könnte das gebrauchen, um eine Aussenleuchte in den dunklen Nachstunden einzuschalten, oder für den Innenraum als Nachtlicht im Flur.

Was messen wir?
Wir messen die Beleuchtungsstärke, also wie "hell" es ist, oder in einfachen Worten, wieviel Licht da ist.

Womit messen wir?
Für die Helligkeitsmessung bieten sich Fototransistoren (LDR) an. LDR ist die Abkürzung für Light Dependend Resistor, was übersezt ungefähr lichtempfindlicher Widerstand heißt. Tatsächlich ist das aber kein Widerstand im landläufigen Sinn, sondern ein Halbleiterlelement, dass wie ein Transistor funktioniert, nur dass zur Ansteuerung der Basis von außen keine Spannung (Strom) angelegt wird. Die Ansteuerung der Basis erfolgt über das einfallende Licht. Je nach Beleuchtungsstärke wird der Transistor mehr oder weniger durchgesteuert.

Auswahl eines Fototransistors (LDR) bzw. anschlußfertige Sensorplatine

Einfacher (nackter) LDR
Es ist in diesem Beispiel nicht das Ziel die Beleuchtungsstärke genau zu messen und als Wert zu beziffern, sondern nur bei einer subjektiv empfundenen Helligkeit einen Beleuchtungskörper zu aktivieren. Im Prinzip reicht es, wenn man sich einen Fototransistor(LDR) beschafft und diesen in Reihe mit einem Widerstand betreibt. Weil der LDR in Abhängigkeit des einfallenden Lichtes seine Leitfähigkeit verändert wird ein mehr oder weniger großer Strom durch die Schaltung fließen. Die am LDR abfallende und messbare Spannung ist dann quasi proportional zum einfallenden Licht. Viel Licht, kleine Spannung, wenig Licht große Spannung.

Anschlußfertige LDR Sensorplatine
Wesentlich einfacher ist eine fertige Sensorplatine, die direkt, ohne weitere Zusatzbeschaltung, an einen Arduino angeschlossen werden kann. Auf der Sensorplatine befindet sich bereits ein LDR mit einer kleinen Elektronik. Die Elektronik kann eine analoge Spannung an einem Anschlußpin (A0) ausgeben und zusätzlich ein digitales (AN - AUS) Signal an einem weiteren, separaten Pin (D0). Das digitale Signal wird mit einer Komparatorschaltung erzeugt, die man mit einem Poti in der Empfindlichkeit einstellen kann. Man hat also die Freiheit das Licht quasi stufenlos auszuwerten, oder nur bei einer bestimmten Helligkeitsschwelle zu reagieren.

Für die stufenlose Auswertung misst man analogen Ausgang der Platine eine Spannung zwischen 0 und 5V. Dabei gilt, je kleiner die gemessene Spannung, um so heller das Licht. Bei welchem gemessenen Wert man dann Schaltvorgänge auslösen möchte, muß man vorher durch Ausprobieren herausfinden. Pratisch ist dafür ein simpler Aufbau nur mit Sensorplatine und einem Minimalprogramm und einer direkten Verbindung zum PC, um am seriellen Monitor die jeweils gemessenen Werte ablesen zu können.



Ausgabeschnittstelle
Weil das Projekt lediglich einen Beleuchtungskörper einschalten soll, muß eine reine Schaltfunktion realisiert werden. Dafür reicht ein digitaler Kanal des Arduinos. Weil es sich um eine Beleuchtungsaufgabe handelt, wird eine direkt am Arduino angeschlossene LED wahrscheinlich nicht ausreichen. D.h., dass ein höherer Strom fließen wird und vieleicht auch eine höhere Spannung.

Handelt es sich nur um einen höheren Gleichstrom mit einem zusätzlichen leistungsfähigeren Netzteil, kann wieder ein Transistor zum Einsatz kommen. Alternativ geht auch ein Relais, dass sogar potentialgetrennt eine höhere (Wechsel)Spannung schalten kann. Das hängt dann vom geplanten Leuchtmittel ab.

Transistor
Soll das Leuchtmittel eine HPL (High Power LED) sein, wird vermutlich ein Strom zwischen 350mA bis fast 1A fließen. Bei solchen Strömen bietet sich ein Darlingtontransistor an, der mit einem kleinen Basisstrom einen hohen Arbeitsstrom schalten kann. Wir müssen nämlich aufpassen, dass der digitale Ausgang des Arduinos nicht überlastet wird. Möchte man höhere Ströme mit einem einfachen Transistor schalten, kann der erforderliche Steuerstrom für die Basis u.U. den maximal erlaubten Ausgangsstrom des Arduinoports (20mA) übersteigen.

Vorteil
  • kleine kompakte Zusatzschaltung
  • kostengünstig

Nachteil
  • zusätzlicher Schaltungsaufwand
  • sorgfältige Auslegung und Auswahl der Zusatzbauteile

Relaismodul
Für höhere und potentialfrei geschaltete Ströme/Spannungen bieten sich bereits fertige Relaismodule für Arduinos an. Diese Module benötigt idR. arduinoseitig den Anschluß von +5V, GND und dem Signalpin. Die Relaisschaltkontakte werden dann zwischen Leuchtmittel und der Versorgungsspannung des Leuchtmittels angeschlossen.
Ein typische Relaismodul dieser Gattung könnte jenes sein:



Vorteil:
  • schnell und einfach anzuschließen
  • galvanische Trennung

Nachteil:
  • größere Bauform
  • höhere Kosten
  • mechanisch

Entscheidung:
Möchte man tatsächlich nur eine LED mit einer Gleichspannung betreiben, ist ein Transistor oder FET (Feldeffekttransistor) eine Option, die Schaltung klein zu halten, möchte man aber eine normale Glühlampe schalten, ist die einzige Option ein Relaismodul. Aber Vorsicht bei 230V Wechselspannung, da sollte man einen Fachmann hinzuziehen.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Praktisches Beispiel: Schalten mehrerer Geräte mit IR-Fernbedienung

Um Strom zu sparen, verwenden viele abschaltbare Steckdosen, mit denen sie elektronische Geräte im Stand By Betrieb komplett ausschalten. Zum Beispiel im Wohnzimmer, in dem man Fenrseher, DVD-Player, Soundanlage, Sat-Receiver usw. in eine Steckdosenleiste einsteckt. Leider schaltet man damit immer komplett alle Geräte an oder aus. Praktisch wäre es, wenn man nur die jeweils benötigten Geräte getrennt schalten könnte. Dafür gibt es sogar schon Steckdosenleisten, die für jede Steckdose einen zusätzlichen Schalter besitzen. Schöner wäre es allerdings, wenn man dafür nicht immer extra aufstehen muß. Das Problem kann man mit einem Arduino lösen, der per IR-Fernbedienung ein Signal erhält und die gewünschten Geräte ein oder ausschaltet.

Wo bekommt man eine IR-Fernbedienung her?
Die meisten Geräte aus dem Bereich der Unterhaltungselektronik (TV, DVD-Player usw.) besitzen eine Infrarot Fernbedienung. Alte defekte Geräte werden oft entsorgt, normalerweise die dazugehörige Fernbedienung gleich mit. Diese Fernbedienungen braucht man nicht wegwerfen und kann sie noch sinnvoll für unseren Zweck weiterverwenden.

Wie empfängt der Arduino IR-Signale?
Um IR-Signale empfangen zu können braucht men eine Fotodieode, die im infraroten Bereich arbeitet.

Welche IR-Empfängerdiode nehme ich?
Die Auswahl ist zwar einerseits recht groß aber trotzdem recht einfach. Im Grunde kann man jede IR-Empfängerdiode nehmen, die angeboten wird. Bei den Sensoren habe ich bereits den CHQ 1838 vorgestellt.



Damit gestaltet sich die Hardwareauswahl für dieses Projekt recht einfach.

Womit schalte ich die Last?
Bei diesem Projekt führt wegen der galvanischen Trennung kein Weg an einem Relaismodul vorbei. Im Handel sind Relaismodule, speziell für den Arduino, mit einem, zwei, vier und acht Relais erhältlich. Die Relais schalteten man einzeln mit getrennten Digitalausgängen des Arduinos, was die Programmierung sehr leicht macht. Weil die zu schaltenden Geräte mit 230V Wechselspannung betrieben werden, ist eine Elektrofachkraft zu Rate zu ziehen.
 

BAXL

Admin
Mitarbeiter
Wie man an den Beispielen sieht, läuft das Verfahren immer ähnlich ab.

Was will ich als Messgröße erfassen, welchen Sensor verwende ich dafür und was ist die Ausgabegröße. Dazwischen liegt dann immer das Auswerteprogramm des Arduinos.

Das Thema ist jetzt offen für Fragen, Anmerkungen und eigene Projektierungsvorstellungen.
 
Zuletzt bearbeitet:

Cybermungo

Mitglied
BAXL,

du hast mir ja schon im thread von rockracer geholfen....danke dafür . hab die schaltung fertig. hab jetzt alles in "alter" bauweise hergestellt , also LED mit entsprechenden Vorwiderständen. bei der darlington variante bin ich geblieben, da ich mehrere LED´s mit einem PIN schalten kann.
Hab mehrere sketches ausprobiert, aber die funzten nur teilweise. bin jetzt aber auf deinen gestoßen und der funktionierte auf anhieb. ich hab die light variante genommen. jetzt versuche ich noch aus den anderen teilen die warnblinker zu integrieren, ist aber nicht so leicht, da du eine andere programmierung nutzt als zb rockracer.... mir kommt aber vor, das deine variante schneller schaltet? vielleicht täusche ich mich auch...
lg
 

BAXL

Admin
Mitarbeiter
Hi Mungo,

mein Programm ist quasi noch in einem Betastadium, weil ich mich im Code auf ein Minimum beschränkt habe, sicher ist er deshalb schneller. Aus gewissen Gründen ist da noch nicht die Blinkfunktion integriert. Das muss über eine Kombination aus Ein- und Ausschaltvorgängen realisiert werden, bei denen das Blinkintervall im Grunde parallel zu allen anderen Programmfunktionen bedient werden muss. Dazu kann man nicht den delay(), Befehl nehmen. Für diese Sache fragt man zyklisch den internen Timer ab. Das habe ich aber noch nicht geschrieben. Wo genau drückt jetzt bei Dir der Schuh?
 

Cybermungo

Mitglied
Danke dir die schnelle Antwort...
Und nochmal danke dir den Sketch, er hat auf Anhieb funktioniert . Respekt.
Folgende funktionen möchte ich noch implementieren:
1.Warnblinker bei Inaktivität
2.Mit einem maximal lenkeinschlag links für zb .5s einen zustand schalten. Zb licht komplett aus, oder zb. Ein crawl modus wo nur bestimmte leuchten ein sind
3. Aus dem fahren heraus, auch wenn man nicht aktiv an der steuerung bremst, also gas neutral, sollte das Bremslicht angehen.

Ich habe diese Funktionen schon in anderen sketches gesehen, sind aber in deinen nicht zu integrieren. Zumindest die mich noch nicht

Lg
 
Top Bottom