Positionsschalter von Euchner


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Widerstandsdekade
(mit Arduino und Relais)


Die Widerstandsdekade, die wir in diesem Versuch konstruieren, besteht aus 15 Relais. Durch Ein- bzw. Ausschalten der einzelnen Relais wird der gewünschte Gesamtwiderstand, mit dem weitere Experimente oder Messungen durchgeführt werden können, eingestellt. An den Kontakten der Relais sind Widerstände mit verschiedenen Widerstandswerten angeschlossen. Durch Einschalten der Relais wird bewirkt, dass die betreffende Widerstände kurzgeschlossen werden und an der Bildung des Gesamtwiderstandes nicht teilnehmen. Den Gesamtwiderstand betrachten wir dabei als eine Binärzahl, die aus einzelnen Bits von unterschiedlicher Wertigkeit besteht. So steht das Relais K0 in der Schaltung für Bit Nr. 0. Das Relais K1 für Bit Nr. 1, das Relais K2 für Bit Nr. 2 usw. Mit der Widerstandsdekade werden Widerstandswerte mit einer Auflösung von 10 Ohm eingestellt. An dem Relais K0 ist folglich ein Widerstand von 10 Ohm angeschlossen. An dem K1 ist ein Widerstand von 20 Ohm und an dem Relais K2 ein 40-Ohm-Widerstand angeschlossen. Möchte man einen Gesamtwiderstandswert von 60 Ohm voreinstellen, müssen alle Relais ausgenommen K1 (20 Ohm) und K2 (40 Ohm) eingeschaltet werden.
An der provisorischen Testschaltung nehmen auch Widerstände mit 5% Toleranz teil. So kann mit der Widerstandsdekade auch eine Genauigkeit von 5% angestrebt werden. Bei einer Widerstandsdekade mit enger gesetzter Toleranz oder feinerer Auflösung (z.B. 1 Ohm) wären Optimierungsmaßnahmen erforderlich. Das könnten sein:
- Einsetzung von Widerständen mit kleinerer Toleranz.
- Aufteilung der Widerstandsdekade auf Unterdekaden, die gruppenweise geschaltet wären.
- Einsetzung von Trimmpotentiometer, um Widerstandswerte exakter einstellen zu können.
- hochwertige Relais mit vernachlässigbar kleinem Kontakt-Widerstand und geringem Verschleiß.
- Nutzung von Relais mit zwei Kontakten, um Übergangswiderstand maximal zu reduzieren.

Relais HF46F

HF46F

Das Relais HF46F ist für sieben Spule-Spannungen erhältlich: 3V, 5V, 6V, 9V, 12V, 18V und 24 V und verfügt über einen Schließer-Kontakt.

Anschlüsse

HF46F - Anschlüsse

Technische Daten:
- Zwischenleistung-Relais
- Spulenspannungen: 3, 5, 6, 9, 12, 18, 24 VDC
- Spulenwiderstand:
3 V – 45 Ω
5 V - 125 Ω
6 V - 180 Ω
9 V - 405 Ω
12 V- 720 Ω
18 V- 1620 Ω
24 V - 2880 Ω
- Schaltleistung:
7A – 250 VAC
7A – 30 VDC
- 1 x Schließer-Kontakt
- Abmessungen: 20,5 mm x 7 mm x 13,5 mm
- Hersteller: Hongfa


Widerstandsdekade

Widerstandsdekade mit 15 Relais

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.

Rückseite

Auf der Rückseite der Platine sind die Widerstände an den Kontakten der Relais angelötet.

ULN2003A

ULN2003A

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.

Eingabe

Tastatur

Die gewünschte Widerstandseinstellung wird mithilfe einer Tastatur realisiert. Diese Folientastatur verfügt über 16 Eingabefelder und beansprucht acht Arduino-Pins zum Ansteuern.

4x4 Tastatur


Arduino

Arduino Mega

Um 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 Arduino


Spannungsregler

Spannungsregler

In 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 LM2596


Der Schaltplan

Schaltplan für Widerstände

Schaltplan - Verschaltung der Widerstände

Schaltplan - Steuerung

Schaltplan - Steuerung der Relais

Testschaltung

Testschaltung (Teil auf dem Steckbrett)

Das Programm (Sketch)

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.

// ********************************************************************************
// Widerstandsdekade
// mit Arduino und Relais
// Arduino IDE 2.0.3
// Arduino Mega2560
// ********************************************************************************

#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

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz