| Widerstandsdekade
|
So gestaltete Widerstandsdekade bietet uns 32767 mögliche Widerstandseinstellungen. Der abgedeckte Bereich
erstreckt sich von 0 Ohm bis 327670 Ohm (Auflösung 10 Ohm). Die pro Relais benötigten Widerstandswerte wurden meistens
aus mehreren Widerständen zusammengesetzt. So z.B. wurde der Widerstand 40960 Ohm (Relais K12) aus den Widerständen 33
kOhm, 7,5 kOhm, zwei 220 Ohm und einem 20-Ohm-Widerstand zusammengesetzt. Die Leuchtdioden, die an die Spulen der Relais
angeschlossen sind, dienen der Visualisierung der Relais-Schaltzustände.
Auf der Rückseite der Platine sind die Widerstände an den Kontakten der Relais angelötet.
Bei den Relais, die unsere Widerstandsdekade bilden, handelt es sich um 24 VDC – Relais. So hohe Spannung
kann der Mikrocontroller Arduino nicht bereitstellen. Deswegen wird zwischen Arduino und Relais die integrierte
Schaltung ULN2003A geschaltet. Sie bildet zwischen dem Arduino und Relais eine Schnittstelle, die es ermöglicht,
mit 5V-Signalen 24 V Relais zu schalten. In dem Baustein sind die Freilaufdioden bereits
integriert.
Die gewünschte Widerstandseinstellung wird mithilfe einer Tastatur realisiert. Diese Folientastatur verfügt über 16 Eingabefelder und beansprucht acht Arduino-Pins zum Ansteuern.
4x4 TastaturUm die Eingabe-Tastatur abzufragen und alle Relais direkt anzusteuern, werden insgesamt 23 I/Os benötigt. Arduino Mega stellt uns ausreichende Menge an Anschlüssen bereit. Die Aufgabe des Mikrocontrollers besteht darin, die Tastatur auf Eingaben zu überwachen, die empfangene Vorgabe umzuwandeln, um schließlich entsprechend die Relais zu schalten.
Mehr über ArduinoIn der Schaltung haben wir mit zwei Spannungen zu tun. Die 24 VDC Relais-Spannung ist gleichzeitig die Hauptversorgungsspannung der Schaltung. Für die Einspeisung von Arduino werden dagegen 5 V gebraucht. Für diese Spannung ist der Spannungsregler zuständig. Das Modul arbeitet mit dem IC LM2596 und liefert beim Bedarf einen Strom von 3A.
Modul mit LM2596Schaltplan - Verschaltung der Widerstände
Schaltplan - Steuerung der Relais
Testschaltung (Teil auf dem Steckbrett)
Das Programm fragt permanent die Tastatur, abgesehen von kurzen 50ms-Pausen, ob eine Taste des
Eingabefeldes betätigt wurde, ab. Wenn ein solches Ereignis erkannt wird, wird die neu eingegebene Ziffer zu der
Variable „Eingabe_String“, die als String definiert ist, hinzuaddiert. Sobald das Betätigen der Taste „#“ erkannt wird,
beginnt die Verarbeitung der Variable. Sie wird zunächst in eine numerische Variable „Eingabe_Zahl“ umgewandelt.
Gleichzeitig erfolgt eine Division durch 10, da die Auflösung der Widerstandsdekade 10 Ohm beträgt.
Anschließend beginnt eine „for“ – Schleife. Hier werden die einzelnen Bits der eingegebenen Zahl ausgelesen und
die zuständigen Relais passend geschaltet. Dabei wird ein Relais bei einem Wert „0“ eingeschaltet, bei „1“
ausgeschaltet. Nachdem diese Aufgabe erledigt ist, beginnt erneut das „Überwachen“ des
Eingabe-Feldes.
#include <Keypad.h> const byte ROWS = 4; // 4 Reihen const byte COLS = 4; // 4 Spalten int Relais_Pins [15] = { 22, 23, 24, 25, 26, // Ausgänge für Relais 27, 28 ,29, 30, 31, // K0 bis K14 32, 33, 34, 35, 36 }; // Tastatur - Zeichen char hexaKeys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {53, 51, 49, 47}; // Arduino PinsReihen) byte colPins[COLS] = {45, 43, 41, 39}; // Arduino Pins (Spalten) // Initialisierung Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); // Variablen String Eingabe_String ; // Tastatureingaben long Eingabe_Zahl; // String umgewandelt String Tastatur_Taste; // Aktuelle Taste bool Bit; // Einzelne Bits der Eingabezahl // SetUp ****************************** void setup(){ for (int i = 0; i < 15; i++) { // Pins für Relais als Ausgänge pinMode(Relais_Pins [i], OUTPUT); // definieren } } // Hauptprogramm ********************** void loop(){ Tastatur_Taste = customKeypad.getKey(); // Tastaturabfrage delay(50); // Kurze Pause if (Tastatur_Taste == "#") { // mit "#" wird Eingabe übernommen Eingabe_Zahl = Eingabe_String.toDouble() / 10; // String in Zahl umwandeln (10 Ohm Schritt) for (int i = 0; i < 15; i++) { // Maximale Anzahl der Bits ist 15 Bit = !bitRead(Eingabe_Zahl , i); // Einzelne Bits abfragen und invertieren digitalWrite(Relais_Pins [i], Bit); // Relais schalten } Eingabe_String = Tastatur_Taste = ""; // Beide Variablen löschen } if (Tastatur_Taste) { // Tastatureingaben zum String zusammenfassen Eingabe_String = Eingabe_String + Tastatur_Taste; } }
Kurzvideo
Google-Suche auf MEINE-SCHALTUNG.de : |