Category Archives: Arduino

Optokoppler

Ein Optokoppler ist leichter nutzbar, als man anfänglich vielleicht denkt. Doch klären wir erstmal, was man mit einem Optokoppler macht:

Mit einem Optokoppler überträgt man Signale und zwar nicht elektrisch, sondern mittels Licht, denn ein Optokoppler ist eigentlich nichts anderes als eine Leuchtdiode und ein Fototransistor in einem einzigen Gehäuse.

Sichtbar wird das im Schaltplan-Symbol des Optokopplers:

Der Vorteil der Übertragungsmethode mittels Licht ist, dass dabei keine elektrische Verbindung zwischen der Leuchtdiode und dem Fototransistor besteht.
Leuchtet die Fotodiode auf, schaltet auf der anderen Seite der Fototransistor durch.

Wir sprechen daher auch von einer galvanischen Trennung zweier Stromkreise (auch mit möglichen unterschiedlichen Spannungsniveaus) und wir können damit Signale innerhalb der Schaltungen hin- und herschicken.
Das ist vor allem dann notwendig bei einer gefährlich hohen Spannung, störverseuchten Umgebungen und zur Verhinderung von Masseschleifen.
Auch ist es möglich, das Signal mittels Optokoppler zu invertieren.

Spezielle Einsatzgebiete wären beispielsweise in Maschinensteuerungen, Relaisansteuerungen, Computern, medizinischen Apparaten, usw.

Die große Anzahl an Optokoppler sind nur für digitale Signale nutzbar (0 oder 1).
Zur Trennung analoger Signalen gibt es spezielle analoge Optokoppler.

Ich verwende hier einen CNY17/4-Optokoppler. Falls Ihr einen anderen habt, dann müsst Ihr unbedingt einen Blick ins Datenblatt werfen.

Berechnen des LED-Vorwiderstands

Der LED-Teil des Optokopplers benötigt UNBEDINGT einen Vorwiderstand, der an die Spannung der Schaltung angepasst ist. Berechnet wird das ganz genau so wie man den Vorwiderstand einer ganz normalen LED berechnet.
Hierzu brauchen wir nur das ohmsche Gesetz zum berechnen:

In unserem Test hat die Schaltung eine Spannung von U = 5V.
Die Spannung der Foto-LED von 1.5V ist ein Mittelwert, denn laut Datenblatt liegt UF zwischen 1,39V – 1.65V.
IF liegt bei 10mA.

    \[ R = \frac{U - U_F}{I_F} = \frac{5V - 1.5V}{0,010 A (10mA)} = 350\Omega \]

Somit brauchen wir einen 350Ω-Widerstand.

Berechnen des Arbeitswiderstands

Auf der anderen Seite (Fototransistor) brauchen wir noch einen Arbeitswiderstand für die Schaltung.

    \[ R_A = \frac{V_c_c * SF}{I_F * CTR} = \frac{12V * 3}{0,010 A (10mA) * (160/100) } = 2250\Omega \]

RA:      Arbeitswiderstand
Vcc:     Betriebsspannung am Ausgang
CTR:   Stromübertragungsfaktor (engl. Current Transfer Ratio)
IF:        Vorwärtsstrom LED
SF:       Sicherheitsfaktor

Wir brauchen wieder unser Datenblatt … In diesem suchen wir uns den minimalen ausgewiesenen CTR für unseren Optokoppler. Dieser ist abhängig vom Typ, Temperatur und möglicherweise vom LED-Strom.

Normale Transistoren haben ja eine Stromverstärkung, Optokoppler eine CTR (Current Transfer Ratio).  Damit kann man abschätzen wieviel Strom man am Eingang braucht um einen bestimmten Strom am Ausgang zu schalten.

Der Sicherheitsfaktor ist mindestens 2, da die Lebensdauer eines Optokopplers in der Regel auf die halbe optische Leistung ausgelegt ist.
Je höher unser Sicherheitsfaktor, desto höher die Lebensdauer des Bauteils.
Man sollte daher zwischen einem Wert von 2-5 auswählen.

Kompromisse muss man eingehen, denn um die maximale Schaltgeschwindigkeit eines Optokopplers zu erreichen, muss man mit Nennstrom und minimalem Arbeitswiderstand arbeiten.
Zum einfachen Schalten von Relais, Motoren und dergleichen spielt die Schaltgeschwindigkeit keine große Rolle, da auch mit ausreichendem Sicherheitsfaktor der Koppler schnell genug schaltet.

Und für andere Fälle ist man mit einem High-Speed-Optokoppler besser bedient. Kostet aber halt ein wenig mehr.

Hat der Optokoppler am Transistorausgang einen herausgeführten Basisanschluss – so wie es bei dem CNY17 der Fall ist, kann man durch einen passenden Widerstand zwischen Basis und Emitter die Abschaltgeschwindigkeit deutlich steigern.
Allerdings erkauft man sich das dann auf Kosten der Empfindlichkeit.

Der Arbeitswiderstand ist in den weiter unten abgebildeten Grundschaltungen R4, bzw. R6.

Verbraucher Berechnen

Möchte man mit dem Ausgang gleich einen Verbraucher, beispielsweise ein Relais schalten, dann muss man vorher sicherstellen, den Optokopplerausgang nicht zu überlasten.
Beispiel: Wir haben ein 12V Relais mit einem Spulenwiderstand von 400 Ω (Fin 36.11.9.012-Relais).

Kleine Anmerkung: In der Regel steht der Spulenwiderstand auch im Datenblatt. Falls nicht, könt Ihr diesen wie folgt messen:
Voltmeter auf “Ω” stellen und an den Pins des Spulensymbols messen:

 

Auch bei der Lastberechnung gilt das ohmsche Gesetz:

    \[ I = \frac{U}{R} = \frac{12V}{400\Omega } = 0,03 A = 30mA \]

Der CNY17 ist nach dem Datenblatt mit bis zu 60 mA am Ausgang belastbar.
Das funktioniert wunderbar ohne weitere Mittel (aber die Freilaufdiode am Relais nicht vergessen!).

Ist die Belastung höher, beispielsweise bei mehr als einem Relais, brauchen wir weitere Bauteile, wenn wir unseren Optokoppler nicht grillen möchten.

Mit der maximalen 60 mA-Belastung können wir beispielsweise einen Transistor, einen MOSFET oder eine Darlington-Schaltung/-IC schalten um die große Last dahinter ansteuern zu können.
Optokoppler-Grundschaltungen:

Nichtinvertierende Grundschaltung

 

Invertierende Grundschaltung am Eingang

 

Invertierende Grundschaltung am Ausgang (häufigste Schaltung)

 

 

 


Spannungsregler variabel mit LM317

Ausdrucken Ausdrucken

Heute bauen wir uns einen regelbaren Spannungsregler und verwenden hierzu einen LM317-Baustein.

Im Gegensatz zu den meisten Reglern gibt es beim LM317 praktisch keine maximale Eingangsspannung, so lange die Differenz von Ein- zu Ausgangsspannung nicht höher als 40V ist.
Das Ganze funktioniert, da der LM317 keinen direkten Massebezug hat, nur den über den Widerstand zur Einstellung der Ausgangsspannung.

“Read More”

Lichtschranke (mit dem Arduino)

Kategorien: Arduino, Elektronik

Ausdrucken Ausdrucken

k153pDer Aufbau einer Lichtschranke ist nicht sehr schwer. Vereinfacht ausgedrückt haben wir nur zwei Zustände: Der Infrarotstrahl ist nicht unterbrochen (=0), oder der Strahl wurde unterbrochen (=1).

Ich habe für den Aufbau zuerst den Temic K153P-Lichtsensor verwendet (siehe Bild rechts), den gibt es ganz günstig bei Pollin (Infrarot-Lichtschrankenpaare Temic K153P – 10 Paare für 0,95 EUR).

Die Schwierigkeit mit diesem Sensor war, dass ich kein korrektes 0- oder 1-Signal bekam, dass ich mit dem Controller verarbeiten konnte.

analogWrite() mit Pi mal Daumen rechnen mag zwar gehen, aber ich wollte ein sauberes, digitales Signal.

Bei microcontroller.net fand ich dann eine wunderbare Schaltung, die diesem Wunsch nachgekommen ist.

Da ich keinen CD4093N-IC zur Hand habe, habe ich hierfür einen 74HC132N genommen.
Tut ebenfalls, was er soll und preislich ist er sogar wenige Cent günstiger.

Den Rest hat man ja eh daheim und dann geht es auch schon los.

“Read More”

Schieberegister – Am Arduino anschließen

Kategorien: Arduino

Ausdrucken Ausdrucken

74hc595

Gehen uns die Ausgabepins an unserem Arduino aus, können wir einfach und preisgünstig mit einem oder mehreren Schieberegistern die Pinanzahl erhöhen.

Pro Schieberegister können wir 8 weitere Pins hinzufügen.

Zum Anschließen von weiteren 8 Pins werden lediglich einmalig 3 freie Pins am Arduino benötigt.

Wie eine Schieberegister funktioniert, könnt Ihr unter “Schieberegister – Was ist das?” nachlesen.

In diesem Beitrag zeige ich Euch, wie Ihr ein Schieberegister über das SPI-Bussystem anschließen könnt und gehe auf den Schaltplan ein.
Danach erweitern wir noch unser Schieberegister um ein weiteres Register.

“Read More”

Schieberegister – Was ist das?

Ausdrucken Ausdrucken

74hc595Das Schieberegister erweitert zum Beispiel die Eingangs- und/oder die Ausgangspins eines Mikrocontrollers.

Hierbei gilt zu beachten, dass man für Eingangs- und Ausgangspins das jeweilig passende Schieberegister verwendet.

Das wohl bekannteste Schieberegister trägt die Bezeichnung “74HC595” und ist ein Schieberegister des SIPO-Typs (SIPO steht für Serial in, Parallel out, was bedeutet, dass es ein Ausgaberegister ist).

Das Pendant hierzu – beispielsweise ein “74LS299” – ist ein Schieberegister des Typs PISO (PISO steht für Parallel in, Serial out). Mit diesem kann man den Status eines Pins des Schieberegisters abfragen.

Diese beiden Schieberegister gehören zu der Klasse der 8Bit-Schieberegister. Das heißt, man kann mit diesem Baustein 8 Pins (jeweils Ein- oder Ausgang des verwendeten Typs) ansteuern.

Es gibt auch eine Mischform, den “74LS194A”. Dieser ist ein 4bit-Schieberegister und besitzt 4 Ein- und 4 Ausgabepins in einem Baustein.

“Read More”

Temperatursensor LM 35

Kategorien: Arduino, Elektronik

Ausdrucken Ausdrucken

LM35_small

Es gibt verschiedene Sensortypen, um einen Temperaturwert auszulesen.

Verwendung findet hier heute der Feld-, Wald- und Wiesen-Temperatursensor LM 35 und zwar um genau zu sein, der LM 35 DZ.
Es gäbe beispielsweise noch einen CZ-Typen, der einen anderen Temperaturbereich auslesen kann, so wie einen DT-Typ mit anderem Gehäuse.

Alternativen wären auch noch der LM75, so wie der LM 335 (rechnet in Kelvin, statt in °C) da, die beide zur Messung von Minustemperaturen besser geeignet sind als der LM35.

Es gibt viele unterschiedliche Typen, auch preislich weichen sie enorm voneinander ab. Unseren LM 35 DZ-Typ bekommt man schon so für rund 1 EUR und man kann mit ihm viele schöne Dinge machen in Verbindung mit anderen Bauteilen und/oder einem Microcontroller wie dem Arduino.

“Read More”

Pullup- und Pulldown Widerstand

Ausdrucken Ausdrucken

PullupPulldown-HeaderHeute mal ein kurzer Beitrag zum Thema Pullup- und Pulldown-Widerstände in Verbindung mit Buttons, sprich Tastern.

Aber auch beim Einsatz von Transistoren kommen recht häufig auch Pulldown-Widerstände vor. Das ist nicht sehr verwunderlich, sind Transistoren ja auch eine Art Schalter, die schalten, sobald an der Basis genug Strom anliegt und der Transistor dann Collector und Emitter durchschaltet.

Wofür brauchen wir aber diese Pullup-/Pulldown-Widerstände?
In knappen Worten: Um einen unbestimmten Zustand bestimmt zu machen. Mit den Worten eines Programmierers: Wir initialisieren die Variable “Taste” mit dem Wert “HIGH” oder “LOW”.

Stellen wir uns folgendes vor:

Zum Vergrößern Bild anklicken

Zum Vergrößern Bild anklicken

“Read More”

Arduino Pro Mini 3.3V programmieren (mit Arduino Uno oder USB-Programmer)

Ausdrucken Ausdrucken

Arduino Pro Mini

Nehmen wir uns mal einen Arduino Pro Mini in der Variante mit 3.3V vor, um ihn zu programmieren.
Wie auch schon im Blog zum programmieren eines ATtiny-Mikrocontrollers zeige ich Euch wie Ihr entweder mit einem Arduino (Uno) oder einem USB-Programmer einen Pro Mini mit einem Sketch versehen könnt. Dort beschreibe ich auch ausführlich den USB-Programmer samt Kabelanschluss.

 

Ganz wichtig!!! Ihr braucht unbedingt eine Stromversorgung die konstant nicht mehr als 3.3 Volt liefert, sonst könnte es sein, dass Ihr Euren Pro Mini schrottet. Die USB-Buchse Eures Computers liefert je nach USB-Port eine Spannung, die darüber liegt.
Benutzt Ihr die 5V-Variante, könnt Ihr sie ohne Spannungswandler direkt mit dem Strom aus der USB-Buchse versorgen.

Folgende Übersicht zeigt Euch die Spannung und die Stromstärke an, die Euer USB-Port bereitstellt.

  • 4,40 V bis 5,50 V an einem Low Powered Port (100 mA)
  • 4,75 V bis 5,50 V an einem High Powered Port (500 mA)
  • 4,45 V bis 5,50 V an einem USB 3.0-Port (900 mA)
“Read More”

ATtiny85 programmieren (mit Arduino Uno oder USB-Programmer)

Tags:

Kategorien: Arduino

 

Ausdrucken Ausdrucken

attiny85Heute wollen wir einen ATtiny85 programmieren.

Hierzu ist es wichtig, dass Eure Arduino-IDE ATtiny-Prozessoren unterstützt. Wie Ihr das einstellt, könnt Ihr hier nachlesen.

 

Entscheidet Ihr Euch dazu, Euren Prozessor mit einem USB-Programmer zu programmieren (finde ich am elegantesten, zumal man sich bei häufiger Nutzung ein spezielles Breadboard vorbereiten kann und nicht jedesmal seinen Arduino anschließen muss), so kann ich Euch wärmstens den USB-Programmer aus dem Guloshop ans Herz legen.
Das Teil kostet nicht mal 5 Euro und Ihr könnt gleich noch ein wenig löten üben, da Ihr einen Wannenstecker, so wie das USB-Kabel anlöten müsst.
Bestellt am besten gleich noch ein 10-poliges-Breadboard-Programmierkabel mit, wenn Ihr so ein Kabel wie unten abgebildet nicht habt. Das erleichtert Euch die Arbeit.
Alternativ macht es so wie ich und vielleicht befindet sich in Eurer Restekiste vergangener PCs auch ein RS 232-Kabel (DSUB9). Man nutzt es für die COM-Ports.

Zum Vergrößern Bild anklicken

Zum Vergrößern Bild anklicken

“Read More”

Yikes! Invalid device signature – Da brennen mir die Sicherungen durch

Tags:

Kategorien: Arduino

Ausdrucken Ausdrucken

errorEinmal nicht aufgepasst und beim Übertragen eines neuen Sketches den falschen Mikrocontroller in der Arduino-IDE ausgewählt und es erschien die folgende Fehlermeldung:

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x00
avrdude: verification error; content mismatch

Was war passiert? Ich schaute im Werkzeugemenü nicht genau hin. Die automatische Erkennung erkannte dummerweise einen ATtiny45 statt einem 85er.

Es ist schon verdammt spät und so führte dieser Fehler zum nächsten, denn ohne groß darüber nachzudenken, änderte ich einfach mal die Taktfrequenz von 1 Mhz auf 8 Mhz (“Irgendwas war da noch mit 8 Mhz ?!?”). Nein, war es nichts und der fatale Fehler daran war jetzt, dass ich nicht die internen 8 Mhz ausgewählt, sondern externe 8 Mhz. Aua.

Beim nächsten Versuch den Sketch aufzuspielen bestrafte mich avrdude mit der folgenden Fehlermeldung:

avrdude: Yikes!  Invalid device signature. Double check connections and try again, or use -F to override this check.

“Read More”