14
Arduino - Einfacher Teiler https://smart-wohnen.org 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird – kann man alternativ zu fertigen Lösungen (z.B. industrieller Vorwahlzähler) sehr leicht und kostengünstig auf einem Arduino-Board abbilden. Im folgenden sind drei verschiedene Varianten beschrieben, wobei mal die Teil-Verhältnisse sehr einfach anpassen kann: Variante 1: Zähler 16 zu 1 Schaltausgang schaltet auf HIGH Variante 2: Zähler 16 zu 1 Schaltausgang schaltet auf LOW Variante 3: Zähler 16 zu 1 Schaltausgang schaltet auf LOW mit LCD-Anzeige Anmerkung vorweg: Wenn das Arduino-Board aus dem gleichen Netzteil versorgt wird, wie die angeschlossene Schaltung und damit die gleiche Masse benutzt, können die Arduino Ein- und Ausgänge des Arduino-Boards unmittelbar angeschlossen werden. Die nachfolgende Beschreibung geht hiervon aus. Ansonsten sollte die Ein-/ Ausgänge z.B. mit Optokopplern galvanisch getrennt werden. Variante 1 – Zähler 16 zu 1 Schaltausgang schaltet auf HIGH Diese Variante kann z.B. verwendet werden, um ein 3-Kanal-Funk-Schließerkontakt-Interface „HM- SCI-3-FM“ über einen Optokoppler am Ausgang des Arduino zu schalten. Auch ein fertiges Ralais- Modul, das bei HIGH (+5V) schaltet, lässt sich so ansteuern. Bauteileliste: 1 Arduino (z.B. Arduino UNO) 1 Optokoppler oder Ralais-Modul, das bei HIGH (+5V) schaltet 1 10kΩ Widerstand 1 220Ω Widerstand Schaltung:

1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Embed Size (px)

Citation preview

Page 1: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 1/14

Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird – kann manalternativ zu fertigen Lösungen (z.B. industrieller Vorwahlzähler) sehr leicht und kostengünstig aufeinem Arduino-Board abbilden. Im folgenden sind drei verschiedene Varianten beschrieben, wobeimal die Teil-Verhältnisse sehr einfach anpassen kann:

Variante 1:Zähler 16 zu 1 Schaltausgang schaltet auf HIGHVariante 2:Zähler 16 zu 1 Schaltausgang schaltet auf LOWVariante 3:Zähler 16 zu 1 Schaltausgang schaltet auf LOW mit LCD-Anzeige

Anmerkung vorweg:Wenn das Arduino-Board aus dem gleichen Netzteil versorgt wird, wie die angeschlossene Schaltungund damit die gleiche Masse benutzt, können die Arduino Ein- und Ausgänge des Arduino-Boardsunmittelbar angeschlossen werden. Die nachfolgende Beschreibung geht hiervon aus. Ansonstensollte die Ein-/ Ausgänge z.B. mit Optokopplern galvanisch getrennt werden.

Variante 1 – Zähler 16 zu 1 Schaltausgang schaltet auf HIGH

Diese Variante kann z.B. verwendet werden, um ein 3-Kanal-Funk-Schließerkontakt-Interface „HM-SCI-3-FM“ über einen Optokoppler am Ausgang des Arduino zu schalten. Auch ein fertiges Ralais-Modul, das bei HIGH (+5V) schaltet, lässt sich so ansteuern.

Bauteileliste:1 Arduino (z.B. Arduino UNO)1 Optokoppler oder Ralais-Modul, das bei HIGH (+5V) schaltet1 10kΩ Widerstand1 220Ω Widerstand

Schaltung:

Page 2: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 2/14

Aufbau:

Page 3: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 3/14

Arduino Programm (Sketch):

/* Zähler 16 zu 1 Schaltausgang HIGH für Arduino 1.0.3 (getestet mit demArduino UNO Klon "SainSmart UNO")

Das Programm zählt die HIGH (+5V) Impulse am entprellten Pin 2. Jeder Zählimpuls wird über eine LED am Pin 13 angezeigt. Nach dem 16. Impuls werden Pin 12 für 10 Sekunden auf HIGH (+5V) undder Zähler zurück gesetzt. */

#include // Entprell-Library einbeziehen

const int ledPin = 13; // Pin 13 (interne LED -> Zähltakt) const int relaisPin = 12; // Pin 12 (Schaltausgang)

int inputPin = 2; // Pin 2 (Zähler-Eingang) int counter = 0; // Zähler-Variable initialisieren und auf 0 setzen Bounce bouncer = Bounce(inputPin,5); // Entprell-Objekt mit 5Millisekunden Entprellzeit initialisieren

void setup() // Setup-Routine (wird nur einmal durchlaufen) { pinMode(ledPin, OUTPUT); // Pin 13 als Output

Page 4: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 4/14

pinMode(relaisPin, OUTPUT); // Pin 12 als Output pinMode(inputPin, INPUT); // Pin 2 als Input (kann weggelassen werden,da INPUT standard für alle Pins ist) }

void loop() // Schleifen-Routine (wird unendlich oft wiederholt) { if (bouncer.update()) // WENN der Eingang aktualisiert wird... { if (bouncer.read() == HIGH) // WENN der Eingang auf HIGH (+5V) steht,DANN... { counter++; // Zähler um 1 erhöhen digitalWrite(ledPin, HIGH); // Zähltakt-LED (Pin 13) einschalten delay(500); // 500 Millisekunden warten digitalWrite(ledPin, LOW); // Zähltakt-LED (Pin 13) ausschalten } } if (counter == 16) // WENN der Zähler auf 16 steht, DANN... { digitalWrite(relaisPin, HIGH); // Schaltausgang (Pin 12) +5V delay(10000); // 10 Sekunden warten digitalWrite(relaisPin, LOW); // Schaltausgang (Pin 12) 0V } counter = counter % 16; // Den Zähler beim Zählerstand 16 zurücksetzen }

Variante 2 – Zähler 16 zu 1 Schaltausgang schaltet auf LOW

Diese Variante ist z.B. erforderlich, wenn ein HM-SCI-3-FM über ein bereits fertig aufgebautesRalais-Modul geschaltet werden soll, dessen Eingang auf Masse (LOW, 0V) geschaltet werden muss.

Solch ein Ralais-Modul ist beispielsweise das hier bei meinem Prototyp verwendete „SainSmart 2Channel 5V Relay Module for Arduino“…

Page 5: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 5/14

Bauteileliste:1 Arduino (z.B. Arduino UNO)1 Ralais-Modul, das bei LOW (0V) schaltet, z.B. „SainSmart 2 Channel 5V Relay Module for Arduino“1 10kΩ Widerstand

Schaltung:

Page 6: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 6/14

Aufbau:

Page 7: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 7/14

Arduino Programm (Sketch):

/* Zähler 16 zu 1 Schaltausgang LOW für Arduino 1.0.3 (getestet mit demArduino UNO Klon "SainSmart UNO" und dem "SainSmart 2 Channel 5V Relay Module for Arduino")

Das Programm zählt die HIGH (+5V) Impulse am entprellten Pin 2. Jeder Zählimpuls wird über eine LED am Pin 13 angezeigt. Nach dem 16. Impuls werden Pin 12 für 10 Sekunden auf LOW (0V) und derZähler zurück gesetzt. */

#include // Entprell-Library einbeziehen

const int ledPin = 13; // Pin 13 (interne LED -> Zähltakt) const int relaisPin = 12; // Pin 12 (Schaltausgang)

int inputPin = 2; // Pin 2 (Zähler-Eingang) int counter = 0; // Zähler-Variable initialisieren und auf 0 setzen Bounce bouncer = Bounce(inputPin,5); // Entprell-Objekt mit 5Millisekunden Entprellzeit initialisieren

void setup() // Setup-Routine (wird nur einmal durchlaufen) {

Page 8: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 8/14

pinMode(ledPin, OUTPUT); // Pin 13 als Output pinMode(relaisPin, OUTPUT); // Pin 12 als Output pinMode(inputPin, INPUT); // Pin 2 als Input (kann weggelassen werden,da INPUT standard für alle Pins ist) digitalWrite(relaisPin, HIGH); // Schaltausgang (Pin 12) +5V }

void loop() // Schleifen-Routine (wird unendlich oft wiederholt) { if (bouncer.update()) // WENN der Eingang aktualisiert wird... { if (bouncer.read() == HIGH) // WENN der Eingang auf HIGH (+5V) steht,DANN... { counter++; // Zähler um 1 erhöhen digitalWrite(ledPin, HIGH); // Zähltakt-LED (Pin 13) einschalten delay(500); // 500 Millisekunden warten digitalWrite(ledPin, LOW); // Zähltakt-LED (Pin 13) ausschalten } } if (counter == 16) // WENN der Zähler auf 16 steht, DANN... { digitalWrite(relaisPin, LOW); // Schaltausgang (Pin 12) 0V delay(10000); // 10 Sekunden warten digitalWrite(relaisPin, HIGH); // Schaltausgang (Pin 12) +5V } counter = counter % 16; // Den Zähler beim Zählerstand 16 zurücksetzen }

Variante 3 – Zähler 16 zu 1 Schaltausgang schaltet auf LOW mit LCD-Anzeige

Mit ein paar wenigen Euro Mehrinvestition für ein HD44780-kompatibles LCD-Display (z.B, einesvom Typ 1602), kann man den Zähler sehr einfach um eine Anzeige erweitern…

Page 9: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 9/14

Bauteileliste:1 Arduino (z.B. Arduino UNO)1 LCD Anzeige 16*2 HD44780-kompatibel (z.B.Typ 1602)1 Ralais-Modul, das bei LOW (0V) schaltet, z.B. „SainSmart 2 Channel 5V Relay Module for Arduino“1 10kΩ Widerstand1 220Ω Widerstand1 10kΩ Trimmer Potentiometer1 Schalter (optional)

Schaltung:

Aufbau:

Page 10: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 10/14

Arduino Programm (Sketch):

/* Zähler 16 zu 1 Schaltausgang LOW für Arduino 1.0.3 mit LCD-Anzege getestet mit dem Arduino UNO Klon "SainSmart UNO", dem "SainSmart 2Kanal 5V Relais Modul für Arduino" und einem HD44787-kompatiblen 16*2 LCD-Display.

Das Programm zählt die HIGH (+5V) Impulse am entprellten Pin 2. Jeder Zählimpuls wird über eine LED am Pin 13 angezeigt. Nach dem 16. Impuls wird Pin 12 für 10 Sekunden auf LOW (0V) und derZähler zurück gesetzt. */

#include // Entprell Bibliothek einbeziehen #include // LCD Bibliothek einbeziehen

LiquidCrystal lcd(11, 10, 6, 5, 4, 3); //LCD Bibliothek mit denentsprechenden Pins initialisieren

const int ledPin = 13; // Pin 13 (interne LED -> Zähltakt) const int relaisPin = 12; // Pin 12 (Schaltausgang)

int inputPin = 2; // Pin 2 (Zähler-Eingang) int counter = 0; // Zähler-Variable initialisieren und auf 0 setzen

Page 11: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 11/14

float kwh = 0; // Variable für den Verbrauch initialisieren und auf 0setzen Bounce bouncer = Bounce(inputPin,5); // Entprell-Objekt mit 5Millisekunden Entprellzeit initialisieren

void setup() // Setup-Routine (wird nur einmal durchlaufen) { pinMode(ledPin, OUTPUT); // Pin 13 als Output pinMode(relaisPin, OUTPUT); // Pin 12 als Output pinMode(inputPin, INPUT); // Pin 2 als Input (kann weggelassen werden,da INPUT standard für alle Pins ist) digitalWrite(relaisPin, HIGH); // Schaltausgang (Pin 12) +5V lcd.begin(16, 2); // Größe des LCD einstellen lcd.print("Zaehler bis 16"); // Begrüßungstext schreiben lcd.setCursor(0, 1); // Cursor positionieren lcd.print("fuer HomeMatic"); // Begrüßungstext schreiben delay(3000); // 3 Sekunden warten lcd.clear(); // Display löschen lcd.print("0"); // Zähler auf 0 setzen lcd.setCursor(0, 1); // Cursor positionieren lcd.print("0.00000 kWh"); // Verbrauch auf 0 setzen }

void loop() // Schleifen-Routine (wird unendlich oft wiederholt) { if (bouncer.update()) // WENN der Eingang aktualisiert wird UND... { if (bouncer.read() == HIGH) // ...WENN der Eingang auf HIGH (+5V)steht, DANN... { counter++; // Zähler um 1 erhöhen kwh = (counter * 0.0104167); // Verbrauch * Zählimpulse berechnen(für Zähler mit 96 Impulsen (Umdrehungen) / kwh) lcd.setCursor(0, 0); // Cursor positionieren lcd.print(counter); // Zähler anzeigen lcd.setCursor(0, 1); // Cursor positionieren lcd.print(kwh,5); // Verbrauch anzeigen (mit 5 Nachkommastellen) lcd.print(" kWh"); // Einheit "kwh" anzeigen digitalWrite(ledPin, HIGH); // Zähltakt-LED (Pin 13) einschalten delay(500); // 500 Millisekunden warten digitalWrite(ledPin, LOW); // Zähltakt-LED (Pin 13) ausschalten } } if (counter == 16) // WENN der Zähler auf 16 steht, DANN... { lcd.setCursor(3, 0); // Cursor positionieren lcd.print("Senden an CCU"); // "Senden an CCU" anzeigen digitalWrite(relaisPin, LOW); // Schaltausgang (Pin 12) 0V delay(10000); // 10 Sekunden warten digitalWrite(relaisPin, HIGH); // Schaltausgang (Pin 12) +5V lcd.clear(); // Display löschen

Page 12: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 12/14

lcd.print("0"); // Zähler auf 0 setzen lcd.setCursor(0, 1); // Cursor positionieren lcd.print("0.00000 kWh"); // Verbrauch auf 0 setzen counter = counter % 16; // Den Zähler beim Zählerstand 16zurücksetzen } }

Alle Varianten können leicht auf andere Teilerverhältnisse angepasst werden. Hierzu muss im Codean folgenden Stellen die Zahl „16“ geändert werden.

(…)if (counter == 16) // WENN der Zähler auf 16 steht, DANN…(…)counter = counter % 16; // Den Zähler beim Zählerstand 16 zurücksetzen(…)

Zu beachten ist dabei, dass der Zähler während der Wartezeiten (delay) nicht zählt. Wenn dieImpulse vom Zähler schneller kommen, als die Programmschleife durchläuft, wird er daher nichtrichtig zählen können. In diesem Fall müssen die Wartezeiten ggf. reduziert werden.

Impressionen:

Page 14: 1 Arduino (z.B. Arduino UNO) 1 10kΩ Widerstand · PDF fileArduino - Einfacher Teiler 1/14 Einen Teiler – z.B. zur Reduzierung von Stromzählerimpulsen, wie er hier benötigt wird

Arduino - Einfacher Teiler

https://smart-wohnen.org 14/14

Die Schaltpläne und Steckbrettbilder wurden mit Fritzing erstellt.

Zum korrespondierenden Beitrag im…

Bitte beachten...

Die Verwendung meiner Hinweise, Anleitungen, Schaltungen und Software erfolgt auf eigenesRisiko. Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung.

Copyright © Jens-Peter Stern | SMART WOHNEN by sTeRn AV | smart-wohnen.org