• 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

Praxisbericht Arduino - Zusatzhardware und Sensoren - Vorstellung und Beispiele

BAXL

Admin
Mitarbeiter
ULN2803 Darlington-Transistor, Array- /Treiberplatine

Der Arduino und seine Brüder und Schwestern können nicht unbegrenzt Strom auf den Ausgängen abgeben. Beim nano liegt der Maximalwert bei 40mA, den man aber möglicht nicht und vor allem nicht dauerhaft ausschöpfen sollte. Darum empfliehlt es sich bei größeren Strömen so genannte "Treiber" zu verwenden. Das kann ein ganz simpler Transistor, oder auch ein integrierter Schaltkreis mit gleich mehreren Transistoren sein. So ein Schaltkreis ist der Baustein ULN2803, in dem sich 8 Darlinkton Transistoren befinden. Damit kann man Ströme bis zu 500mA bei 50V schalten. Aber auch das sind nur theoretische Werte, weil man die anfallende Verlustleistung berücksichtigen muß, damit der baustein nicht den Wärmetod stirbt.

Erhältlich sind diese fertigen Platinen bei vielen Anbietern, meine habe ich von Amazon für 6,39€ für drei Stück.

Ich werde diese Schaltung zum ersten Mal bei der Car-Beleuchtung einsetzen, darum etwas später mehr zu diesem Modul.



Die interne Schaltung sieht so aus:



Man kann auf dem Schaltbild sehr schön die Besonderheit des Darlingtontransistors erkennen, der genau genommen aus zwei "einfachen" Transistoren besteht, die kaskadiert wurden. Bei dem ULN2803 sind zudem bereits die Basiswiderstände und der Pull-Down-Widerstand integriert, weshalb man sich diese dann als äußere Beschaltung sparen kann.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
IR Empfänger CHQ 1838

Der CHQ 1838 ist ein Infrarotempfänger mit dem man Signale aus einer Infrarotfernbedingung einlesen kann. Link zum technischen Datenblatt beim großen C

Für viele Anwendungen ist es praktisch, Schaltvorgänge ferngesteuert auslösen zu können. Wir kennen das vom Fernsehapparat, Leuchten und DVD-Player. Dabei Sendet die Fernsteuerung codierte Signale aus, die am Empfänger in Zahlenwerte umgewandelt werden. Je nach empfangener Zahl, können verschiedene Schaltvorgänge vorgenommen werden.

Für Arduinos gibt es bereits fertige Bibliotheken, die einem die Arbeit der Umwandlung abnehmen und man bekommt sofort einen Zahlenwert als Ergebnis geliefert. Damit ist es sehr einfach möglich, diese Funktionalität in eigene Projekte einzubauen. Für meinen ersten Test habe ich eine Library von arduinolibrarys.info heruntergeladen und den Inhalt des heruntergeladenen ZIP-Files direkt in das Arduino Library-Verzeichnis meiner installierten Arduino IDE kopiert. Im Programm (Sketch) muß man lediglich im Vereinbarungsteil, ganz am Anfang des Programms, die Zeile:
#include <IRremote.h>
eintragen.

Angeschlossen wird der IR-Empfänger mit drei Leitungen, Signalausgang, GND, +5V.
Der Signalausgang des IR Empfängers kommt dann direkt an einen Digitaleingang des Arduinos (z.B. Pin D10).



.................... Signal ................ GND ....................+5V
Die Anschlussbelegung ist von links nach rechts:


Hier nun das versprochene Beispielprogramm in einer ultra simplen Version, ohne Schnörkel und Schnickschnack.
C++:
// Einfaches Testprogramm zum Auslesen empfangener Codes vom IR Empfänger

#include <IRremote.h>
int IRPin = 10; // Eingangspin für IR Signal
IRrecv irrecv(IRPin); // Objekt für IR Empfänger deklarieren
decode_results EingelesenerWert;

void setup() {

pinMode(IRPin, INPUT); // Den IR Pin als Eingang initialisieren
irrecv.enableIRIn(); //  Den IR Pin dem Objekt mitteilen
Serial.begin(9600); //serielle Schnittstelle mit 9600 Baud starten

}

void loop() {

  if (irrecv.decode(&EingelesenerWert)){
   int gelesenerCode =  EingelesenerWert.value;
   Serial.println(gelesenerCode, DEC);
   irrecv.resume(); // auf den Einlesewert warten
  }
delay(250); // kurze Verschnaufpause
}
Die Programmzeilen beschränken sich auf das Minimalste, um einmal die Library einzubinden, ein Objekt zu definieren und in einer Endlosschleife IR-Codes einzulesen.
Eine Kleinigkeit ist mir aufgefallen. Ich hatte in der Hauptschleife zuerst folgende Codezeile um den eingelesenen Wert auf dem seriellen Monitor auszugeben:

Serial.println(EingelesenerWert.value, DEC);

Aus irgendeinem Grund wurde beim Einlesen meiner Fernbedienung bei einer Taste mal der Wert "2" und mal ein Wert, der um die 62000 lag (weiß die Zahl nicht mehr genau), ausgegeben.
Das passierte bei allen Tasten der Fernsteuerung, dass zwei unterschiedliche Werte ausgegeben wurden, zwar jeweils immer Derselbe, aber eben alternativ der nierdige und der hohe Wert.
Nachdem ich dann eine zusätzliche Zeile eingefügt (siehe Programm) hatte, verschwand der Effekt und es wurde nur noch der jeweil niedrige Wert ausgegeben.

Für eine praktische Anwendung habe ich hier ein Miniprojekt erstellt, mit dem man IR-Codes auslesen und auf einem LCD-Display anzeigen kann.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Line Tracker KY-033

Der Line Tracker KY-033 ist ein Modul mit einer IR-LED und einer IR-Empfängerdiode, die nebeneinander angebracht sind. Die IR-LED sendet IR-Licht aus, das ggf. von einer Oberfläche reflektiert und von der IR-Empfängerdiode aufgefangen wird.

Auf dem Modul (Platine) ist ebenfalls ein Komparator (Vergleicher) und ein Poti. Mit dem Poti stellt man die Empfindlichkeit am Komparator ein. Genau gesagt wird das reflektierte IR-Licht gemessen und der Messwert mit der Vorgabe durch das Poti verglichen. Wird ein Schwellenwert über- bzw. unterschritten, gibt der Komparator an seinem Ausgang ein Signal aus. Dieses Signal liegt dann am entsprechnden Pin (Out) der Platine an. Die Platine genehmigt sich ca. 20 mA, was hauptsächlich an dem Stromverbrauch der IR-Senderdiode liegt.

Angeschlossen wird +5V (VCC), GND und Out. Out kann man direkt an einen digitalen Eingang eines Arduinos anschließen.



Die Einsatzgebiete sind vielfältig. Autonome Kleinstroboter können damit einer dunklen Linie folgen, Drehzahlen können gemessen werden, Endpositionen können berührungslos erfasst werden, man könnte damit sogar auch geöffnete Fenster erkannt werden.

Das mir vorliegende Modul aus der AZ-Delivery Wundertüte hat leider das Poti auf der Seite der beiden IR-Dioden und trägt dabei ziemlich auf. man ist also nicht in der Lage, die zu überwachende Oberfläche ganz dicht an die Platine haranzuführen. Eine denkbare Lösung wäre es, das Poti auszulöten und auf der Rückseite wieder anzubringen. Das erleichtert auch die Einstellarbeit der Erfassungsempfindlichkeit. Wahrscheinlich ist diese technische Unzulänglichkeit auch der Grund, warum AZ dieses Modul aus dem Programm genommen und in die "Wundertüten" gepackt hat.



Mir ist beim Ausprobieren des Moduls aufgefallen, dass unterschiedlich farbige Untergründe nicht immer gleich erfasst werden. Am besten Funktioniert eine weiße bzw. gut reflektierende und eine Sehr dunkle (schwarz) Oberfläche. Man kann da aber etwas mit dem Poti spielen um das auszugleichen und auch die Entfernung zum Untergrund einstellen. Ab einem gewissen Abstand funktioniert das aber nicht mehr. Einigermaßen gute Ergebnisse konnte ich bis zu einem Abstand von ca. 4cm feststellen. Darüber wird es mehr ein Zufallsprodukt. Möglicherweise kann ein entsprechender Kontrast oder die Größe der reflektierenden Oberfläche, auch noch bei größeren Abständen zu einem brauchbaren Ergebnis führen.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Flying Fish IR-Flammensensor

Normale Brandmelder detektieren auf Rauchteilchen in der Luft, um Entstehungsbrände zu melden. Wenn aber richtige Flammen entstanden sind, sind diese melder quasi blind, weil sie nur die entstehenden Rauchgase (Rauchpartikel in der Luft) erkennen können. Zur Erkennung von Flammen gibt es für die Maker (im englischen Sprachraum die Bezeichnung für Selbermacher) Module, die über einen IR-Empfänger derartige Erscheinungen detektieren. Das mir vorliegende Modul hat leider keine besondere Typenbezeichnung und nennt sich nur MH-Sensors-Series Flying Fish. Das Modul besteht aus einer IR-Empfängerdiode, einer Komparatorschaltung mit einem Poti und vier Anschlusspins. Die Anschlüsse sind für die Betriebsspannung, also +5V und GND und zwei Ausgängen. Die Ausgänge bestehen aus einem analogen Ausgabesignal und einem digitalen Signal, dass in Abhängigkeit von der Komparatoreinstellung einen einfachen High, oder Low-Pegel liefert.

Der Erfassungswinkel beträgt ca. 60° und das erkannte "Licht" ligt bei einer Wellenlänge von 760nm bis 1100nm



Der Anschluß an einen Arduino ist wieder sehr einfach. VCC - +5V, GND - GND, D0 - digitaler Eingangspin, A0 - analoger Eingangspin.

Entsprechende Programmzeilen zum Einlesen der Messung ist sehr simpel, weshalb ich dafür kein gesondertes Programm (Sketch) spendiere. Wer schon soweit ist, einen derartigen Sensor einsetzen zu wollen, ist sicher schon sehr gut zu Fuß mit der Programmierung.

 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
HTU21 Sensor zur Messung von Temperatur und Luftfeuchtigkeit

Das GY-21 Modul ist ein kleines Breakout-Sensormodul (Platinengröße ca. 11x13mm) zur Messung von Temperatur und Luftfeuchtigkeit.



Zur Messung wird das Modul gemäß Anschlußbild mit „+3,3V an VIN“ und „GND an GND“ eines Arduinos (oder kompatibler Clone) angeschlossen. Die Messwerte bekommt der Arduino über eine serielle I2C Datenverbindung. Die I2C Verbindung stellt man über die Anschlüsse A4-SDA und A5-SCL her.

Der HTU21 Baustein hat einen Temperaturmessbereich von -40°C bis +125°C und misst von ca. 5°C bis +60°C mit einer Abweichung von ca. 0,4°C.

Die maximalen Abweichungen liegen in den Endbereichen bei -40°C (1,4°C) und bei +125°C (1,6°C).

Bei der Messung der Luftfeuchtigkeit (Humidity) sind die Messungen im Bereich von ca. 20% bis 80% mit einer Abweichung von ca. 3% am genauesten. In den Endwerten, bei einer Luftfeuchtigkeit von 0% bzw. 100%, liegt der Sensor maximal um ca. 5% daneben.

Die üblicherweise gemessenen Werte für Temperatur und Luftfeuchtigkeit, fallen in die Bereiche der jeweils höchsten Messgenauigkeit.

Zur Ansteuerung und zum Auslesen des Sensormoduls habe ich auf eine Bibliothek von Adafruit zurückgegriffen, die den HTU21 Sensorbaustein bedienen kann.

Library: https://github.com/adafruit/Adafruit_HTU21DF_Library

Der Bibliothek ist selbstverständlich ein Beispielprogramm (HTU21DFtest) beigefügt, das ohne Änderungen direkt (auf einem Nano oder Uno) lauffähig ist.

Ich habe das Programm eine Weile laufen lassen und dabei den angezeigten Temperaturwert mit den gemessenen Temperaturen eines DS18B20 und eines preiswerten Raumthermometers verglichen.

Bei einer mit dem HTU21 gemessenen Temperatur von 21,77°C, beträgt die Abweichung zum DS18B20 (21,31°C) +0,46°C und zum Zimmerthermometer (22°C) +0,23°C. Zeitweise lagen die Werte aber auch etwas dichter beisammen. Welcher Sensor nun den wahren Wert geliefert hat vermag ich nicht zu sagen. Die wichtigste Erkenntnis ist aber, dass die Messunterschiede höchstens 0,5°C sind. Für die Innenraummessung, aber auch für den Außenbereich, ist die Genauigkeit absolut ausreichend. Für den Einsatz in einer Wetterstation, oder um im Haus, zusätzlich zur Raumtemperatur, auch die Luftfeuchtigkeit messen zu können, ist der GY-21 Sensor gut einsetzbar.

Auf dem folgenden Bild ist der Aufbau zu sehen.

Im Vordergrund der Nano mit dem GY-21 Modul, rechts dahinter das Zimmerthermometer.

Im Hintergrund die Messschaltung mit dem DS18B20, der seinen Messwert per 2,4 GHz auf die Schaltung mit der OLED-Anzeige (Messstelle 1) übermittelt.
Die übrigen, angezeigten Werte stammen von Messstellen, die sonst noch im Haus verteilt sind und ihre Werte ebenfalls per 2,4 GHz übermitteln (Messstelle 2 bis 4).

 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
DollaTek 2.4 Zoll TFT SPI LCD-Modul ILI9341

Das DollaTek 2,4” Display ist ein Farb-LCD-Display, das per SPI-Schnittstelle angesteuert wird. Als Treiber-IC werkelt das ILI9341 darin. Die Auflösung beträgt 240x320 Pixel. Die Betriebsspannung ist 3,3V! Damit kann man es z.B. an ESP8266 Module direkt anschließen, für Arduinos, wie den UNO, Mega und Nano benötigt man für die Signalleitungen einen Pegelwandler. Der Pegelwandler sollte schnell genug arbeiten, sonst funktioniert es nicht. Für meine Schaltung verwende ich ein Modul mit einem TXS0108E. Der Preis von rund 11€ (bei Amazon) ist ganz ok, viel billiger bekommt man das nicht.



Genauere Infos zum Anschluß und der Programmierung im gesonderten Thema
Arduino Nano mit DollaTek 2,4" TFT SPI LCD-Farb-Modul ILI9341 und
WEMOS D1 mini mit 240x320 2,4" TFT Display RGB

Hinweis: Man kann das Modul im Hoch- und im Querformat verwenden, dazu ist nur ein einfacher Befehl nötig um die Anzeige zu drehen.

tft.setRotation(1);
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Logic Level Converter 8 Kanal TXS0108E

Der TXS0108E ist ein vollduplexfähiger Hochgeschwindigkeits- Pegelwandler um Geräte mit einer Betriebs- und Portspannung von 3,3V CMOS Pegel an Geräten mit 5V TTL-Pegel Signalports anschließen zu können. Das betrifft eine Vielzahl Sensoren und Displays, die mit 3,3V arbeiten und an Arduinos betrieben werden sollen, die mit einem 5V Logik-Pegel arbeiten.

Pegelwandler werden viele auf dem Markt angeboten, aber nicht alle eignen sich für den Austausch von Datentelegrammen, darum sollte man da sehr genau hinsehen, ob diese auch schnell genug für die eigene Anwendung schalten können. Das erspart viel Zeit bei der Fehlersuche.

Der TXS0108E besitzt insgesamt 8 Kanäle. Für den Betrieb müssen 2 Spannungen angeschlossen werden. Dazu dienen die Anschlüsse VA – 3,3V und VB – 5V, der Masseanschluss GND beider Spannungen muß verbunden sein. Den Anschluß OE (Output-Enable) verbindet man mit VA, also auch mit 3,3V.

Die Kanalanschlüsse für die 5V Seite sind mit B1 bis B8 beschriftet, die 3,3V Seite mit A1 bis A8, die Kanäle mit jeweils gleichen Zahlen korrespondieren miteinander, also A1 mit B1, A2 mit B2 usw..



Der Preis liegt ca. bei 2€/Stück, das kann aber je nach Anbieter und Bestellmenge etwas schwanken.
 

DFENCE

Mitglied
Das ist mal ein wirklich sehr gutes Beispiel für eine dreiste Raubkopie von den Chinesen. Miss Adafruit tut mir echt Leid.
Ich gehe sogar soweit zu sagen das selbst der Microchip ne dreiste Raubkopie ist, den Texas Instruments hat nicht so eine richtig schlecht aufgelöste Beschriftung vorallem das Logo hat mich Skeptisch gemacht.
Eigentlich nennt sich die Platine TXB0108 und darauf ist der TI Chip "TXS0108E"

Falls mit dem Teil mal ne Schaltung nicht hinhaut und du findest einfach nicht den Fehler, zieh das Teil in betracht, manchmal kommen die Raubkopien einfach nicht an die Geschwindigkeit ran welche die Originalen haben, das ist bei den Atmega2560 Raubkopien genauso, Rate mal warum ich an meiner CNC nen Originalen Mega2560 aus Italien für 40€ hängt obwohl ich 10 Clone / Raubkopien von dem Teil hab.

Das wäre übrigens das Original von Miss Adafruit.
395-07.jpg



Edit : Ich habs doch noch richtig im Kopf gehabt das genau diese Dinger eine Fehlerquelle sind ( drum setzt ich auf SH74 NAND´s z.b )

Auszug einer Webseite wo dieser Pegel Konverter in einer SChaltung genutzt wird und Probleme verursacht :
The Adafruit boards use TXB0108 (YE08) Ti chips, while the "Chinese" units actually use TXS0108 (YF08E) Ti chips. The latter have open drain outputs. The YE08 chips can only sink one LS-TTL load. While the YF08E chips appear to be able to sink at least five LS-TTL loads.

Quelle : S100 Computers
 
Zuletzt von einem Moderator bearbeitet:

BAXL

Admin
Mitarbeiter
Keenso 2,8 Zoll SPI Display 240x30 mit ILI9341 Interface

Das Keenso 2,8” Display ist ein Farb-LCD-Display mit ILI9341 Interface, das per SPI-Schnittstelle angesteuert wird. Die Auflösung beträgt 240x320 Pixel. Die Betriebsspannung ist 3,3V! Damit kann man es z.B. an ESP8266 Module direkt anschließen, für Arduinos, wie den UNO, Mega und Nano benötigt man für die Signalleitungen einen Pegelwandler. Der Pegelwandler sollte schnell genug arbeiten, sonst funktioniert es nicht. Für meine Schaltung verwende ich ein Modul mit einem TXS0108E.



Der Anschluß und das Programm ist quasi identisch zum weiter oben beschribenen DollaTek 2,4" Display, darum verlinke ich hier.



Einen kleinen Unterschied gibt es aber dennoch, der zumindest in dem Beispielprogramm (siehe Link) schon berücksichtigt ist. Das Keenso besitzt einen CS (Chip Select) Anschluß, der im Schaltungsaufbau verbunden werden muß, ansonsten ist alles gleich zum DollaTek-Display. Für den ersten Test habe ich beide Module, das DollaTek und das Keenso, parallel am Arduino angeschlossen, ohne eine Zeile Programmcode zu ändern und neu hochzuladen. Das Keenso funktionierte sofort, was man auch an dem Foto erkennen kann, auf dem beide Display Module nebeneinander abgebildet sind.

Dem aufmerksamen Beobachter wird sicher der blaue Strich hinter 3 und dem A auf dem kleineren Display aufgefallen sein. Warum das so ist weiß ich nicht, der Strich entsteht immer dann, wenn dieser Bereich neu beschrieben wurde. Den Schönheitsfehler hat das Keenso nicht.
 
Zuletzt bearbeitet:
Top Bottom