MICO - Murrelektronik


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Kirchenglocke
Steuerung mit Arduino und zwei Näherungsschaltern

Mini Kirchenglocke


Mit einem Gleichstrommotor und dem Motortreiber L9110H soll eine Kirchenglocke zum Läuten gebracht werden. Zu Testzwecken kann eine beliebige Glocke benutzt werden, hier führen wir den Test mit einer Glocke, die stolze 500 Gramm wiegt. Die Aufgabe der Schaltung besteht darin, die Glocke zum Schwingen zu bringen, was durchaus mit Problemen verbunden werden kann. Je nach Größe und Gewicht der Glocke muss die Leistung des Motors entsprechend angepasst werden. Auch die Kette, Zahnriemen oder Getriebe müssen der geforderten Leistung gerecht werden.
Bei unserer kleinen Glocke stellen sich solche Fragen nicht, ein kleiner Getriebemotor mit 6mm breitem Zahnriemen bewältigt die Aufgabe problemlos.
Nach jedem Satz der Glocke nach Links oder Rechts muss die Drehrichtung des Motors geändert werden. Diese Aufgabe überlassen wir dem Motortreiber L9110H. Der Chip mit acht Beinen ist klein, benötigt nur wenig Verdrahtung und ist für solche Aufgaben wie das Ansteuern eines Kleinleistungsmotors besonders prädestiniert.
Mit zwei Näherungsschaltern werden die Positionen Rechts und Links der Glocke abgefragt. Sie bestimmen den Moment der Drehrichtungsumkehr.
Mit einem kurzen Ablaufprogramm koordiniert das Schwingen der Glocke der Mikrocontroller Arduino Nano. Gestartet wird mit einem Ein/Aus - Taster.

Arduino Nano

Arduino

Bei Einsetzung eines Mikrocontrollers muss stets seine Arbeitsspannung beachtet werden. Die Arduino-Ein- und Ausgänge arbeiten mit 5VDC. Deswegen ist es notwendig, die Signale der Näherungssensoren, die in diesem Fall 12VDC betragen, an den Mikrocontroller anzupassen. Diese Aufgabe übernehmen in der Schaltung zwei lineare Spannungsregler aus der L78-Reihe.

Arduino

Gleichstrommotor

Gleichstrommotor

Die eigentliche Arbeit übernimmt der Gleichstrommotor JGB7-520-CE. Er arbeitet nominal mit 12 VDC und ist vom Werk mit einem Getriebe ausgestattet. In diesem Fall, um die Schwingfrequenz der Glocke passend einzustellen, wird seine Spannung mit einem Spannungsregler eingestellt. In der Testschaltung wird er mit ca. 9VDC eingespeist.

Gleichstrommotor JGB7-520-CE

Motortreiber

Motortreiber

Der Baustein arbeitet mit einer Spannung im Bereich 2,5V bis 12V und kann mit 800 mA belastet werden. Mit jeweils einem Eingang wird die Links- oder Rechtsdrehung des Motors bestimmt. Das war‘s dann schon.

Motortreiber L9110H

Spannungsregler L78L05AC

Spannungsregler L78L05AC

In der Schaltung kommen zwei Spannungsregler L78L05AC vor. Sie regeln die Signalspannung der Näherungssensoren auf 5 VDC runter. Die Näherungssensoren arbeiten in der Schaltung mit 12 VDC. Eine höhere Spannung als 5 VDC an den Eingängen des Arduino könnte den Mikrocontroller beschädigen.

Spannungsregler L78L05AC

Spannungsregler LM2596

Spannungsregler LM2596

Das Modul mit dem Spannungsregler LM2596 stellt die Spannung für den Motor bereit. Mit ihr kann die gewünschte Schwingungsfrequenz der Glocke eingestellt werden. Diese ist auch von der Getriebe des Motors und Zahnradübersetzung abhängig. Die in der Testschaltung eingestellte Motorspannung beträgt ca. 9 VDC.

Spannungsregler LM2596

Turck Näherungsschalter

Turck Näherungsschalter

Zwei induktive Näherungsschalter von Turck überwachen die aktuelle Position unserer Mini-Kirchenglocke. Beide Sensoren markieren die Punkte, wo die Drehrichtungsumkehr des Motors stattfindet. Sie arbeiten mit 12 VDC. Die Signale, die zu Arduino geführt werden, werden zunächst mit zwei 5V-Spannungsregler auf Arduino taugliche Spannung runtergeregelt.

Turck Näherungsschalter

Schaltplan

Schaltplan

Schaltplan

Testschaltung

Testschaltung Steckbrett


Testschaltung komplett


Programm (Sketch)

// *****************************************************************************************
// Kirchenglocke (Steuerung mit Arduino)
// Eine Schaltung mit Arduino Nano
// Arduino IDE 1.8.19
// *****************************************************************************************

int Ini_Links = 2;                                // Abfrage Glocke Position links
int Ini_Rechts = 3;                               // Abfrage Glocke Position rechts
int Taster_Start = 4;                             // Start - Taster
int Rechtslauf = 5;                               // Ausgang Rechtsdrehung
int Linkslauf = 6;                                // Ausgang Linksdrehung
int Schritt = 0;                                  // Aktueller Abfolgeschritt
bool Start_Stop;                                  // Hilfsvariable

// *****************************************************************************************
void setup()   {
  
    pinMode (Ini_Links, INPUT);                   // Pin D2 Eingang
    pinMode (Ini_Rechts, INPUT);                  // Pin D3 Eingang
    pinMode (Taster_Start, INPUT_PULLUP);         // Pin 4 Eingang (Pullup)
    pinMode (Rechtslauf, OUTPUT);                 // Pin 5 Ausgang
    pinMode (Linkslauf, OUTPUT);                  // Pin 6 Ausgang
}

// *****************************************************************************************

void loop()  {  

    if (digitalRead (Taster_Start) == LOW) {      // Ablauf Start wenn Taster betätigt
        Start_Stop = true;                        // Hilfsvariable (es läuft) auf TRUE
    }   
     
    if (Start_Stop == true) {                     // Ablauf start
        if (Schritt == 0) {                       // Begin mit Linksdrehung
            digitalWrite (Linkslauf, HIGH);       // L9110H - Linksdrehung EIN
            digitalWrite (Rechtslauf, LOW);       // L9110H - Rechtsdrehung AUS
            Schritt = 1;
        }
        if ((Schritt == 1) & (digitalRead (Ini_Rechts) == LOW)) { // Geber Pos. Rechts verlassen
            Schritt = 2;                                          // Linksdrehung aktiv
        }
        if ((Schritt == 2) & (digitalRead (Ini_Links) == LOW)) {  // Geber Pos. Links verlassen
            Schritt = 3;                                          // Gleich kommt Drehrichtungsumkehr
        }         
        if (Schritt == 3) {                                       // Drehrichtungsumkehr
            digitalWrite (Linkslauf, LOW);                        // L9110H - Linksdrehung AUS
            digitalWrite (Rechtslauf, HIGH);                      // L9110H - Rechtsdrehung EIN
            Schritt = 4;                                          // Rechtsdrehung aktiv
        } 
        if ((Schritt == 4) & (digitalRead (Ini_Links) == HIGH)) { // Geber Pos. Links angefahren
            Schritt = 5;                                          // Rechtsdrehung aktiv
        }       
        if ((Schritt == 5) & (digitalRead (Ini_Rechts) == HIGH)) {// Geber Pos. Rechts angefahren
            Schritt = 6;                                          // Rechtsdrehung aktiv
        }        
        if ((Schritt == 6) & (digitalRead (Ini_Links) == LOW)) {  // Geber Pos. Links verlassen
            Schritt = 7;                                          // Rechtsdrehung aktiv
        }
        if ((Schritt == 7) & (digitalRead (Ini_Rechts) == LOW)) { // Geber Pos. Rechts verlassen         
            Schritt = 8;                                          // Gleich kommt Drehrichtungsumkehr
        }
        if (Schritt == 8) {                                       // Drehrichtungsumkehr
            digitalWrite (Linkslauf, HIGH);                       // L9110H - Linksdrehung EIN
            digitalWrite (Rechtslauf, LOW);                       // L9110H - Rechtsdrehung AUS
            Schritt = 9;                                          // Linksdrehung aktiv
        }        
                                                                  // Stop Sequenz
        if ((Schritt == 9) & (digitalRead (Taster_Start) == HIGH)) { // Taster losgelassen
            delay(170);                                           // Wartezeit bis UT
            digitalWrite (Linkslauf, LOW);                        // L9110H - Linksdrehung AUS
            digitalWrite (Rechtslauf, LOW);                       // L9110H - Rechtsdrehung AUS
            Start_Stop = false;                                   // Hilfsvariable (es läuft) auf FALSE
            Schritt = 0;                                          // Schrittzähler zurücksetzen
        }        
        
        if ((Schritt == 9) & (digitalRead (Ini_Rechts) == HIGH)) {// Geber Pos. Rechts angefahren
            Schritt = 10;                                         // Linksdrehung aktiv
        }        
        if ((Schritt == 10) & (digitalRead (Ini_Links) == HIGH)) {// Geber Pos. Links angefahren 
            Schritt = 1;                                          // Linksdrehung aktiv
                                                                  // Mit Schritt 1 Wiederholung
        } 
    }
}       

// *****************************************************************************************
         

Der Programmablauf ist nicht kompliziert. Es wird laufend die Position der Glocke überprüft. Nach jeder vollständigen Schwingung der Glocke erfolgt, sofern der Taster gedrückt gehalten wird, eine Wiederholung des Vorgangs. Die notwendigen Informationen liefern die beiden Näherungsschalter. Sobald die an der Achse angebrachte Nocke beide Schalter verlassen hat, erfolgt eine Drehrichtungsumkehr.
Je nach Aufbau einer Testeinrichtung kann es, so wie auch in diesem Fall, notwendig sein, mit zusätzlichen Maßnahmen dafür zu sorgen, dass die Glocke nach dem Stopp im unteren Bereich stehen bleibt. In dem Programm wird das Problem mit einer Zeitfunktion gelöst. Nach Drehrichtungsumkehr, wenn der Start Taster bereits losgelassen wurde, dreht der Motor, bevor er stehen bleibt, noch eine in der Anweisung „delay“ eingegeben Zeit weiter.

Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz