Arduino - Einfacher Teiler

Ähnliche Dokumente
Arduino für FunkAmateure

Arduino. Inhalt. (mit Arduino UNO)

Eine tastergesteuerte LED

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt:

LED Skalenbeleuchtung mit einem Arduino

Tauben Selbstschuss anlage

Eingaben. Themen heute. Taster. Eingaben Zuweisungen Zeitmessung. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

Erste Gehversuche mit ARDUINO (DL6OAA)

Was so passieren wird:

Arduino für FunkAmateure

SINNsorik Wahrnehmen durch Sensoren NAME, KLASSE:

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert?

Wir hätten nie gedacht das drei Computer und Elektronik-Fans soweit kommen!! Mit diesem Video sagen wir vielen Dank!

Abbildung 4-4-1: Ein prellender Taster

Arduino für FunkAmateure

Einführung Arduino - Aufbau

Haftkünstler auf dem Prüfstand. Online Ergänzung HOLGER FLORIAN BOHN OLGA SPECK THOMAS SPECK

TRIER. Automatische Messwerterfassung mit dem Arduino (Mikrocontroller) ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht

Eine tastengesteuerte Ampelanlage

Erste Gehversuche mit ARDUINO (Teil 3) (DL6OAA) Die 7-Segmentanzeige (1-stellig)

Milliwattmeter mit Arduino Uno (low-cost-version)

Arduino für FunkAmateure

Girls Day. Einführung Mikrocontroller,

Bei jedem Arduino-Projekt muss man ein Grundgerüst "bauen". Das sieht dann so aus:

Einführung in Mikrokontroller Benutzung mit dem Arduino Board. Ramon Hofer ICVR

// Daniel Ettenhuber // Projekt Kameraslider // letzte Änderung: // //

Highspeedaufnahmen mit dem Arduino Uno Board

Einführung in das Programmieren in der Sekundarstufe 1. mit einem Arduino und der Physical-Computing-Plattform

saarland Prof. Dr. Andreas Zeller Verantw. Tutor: Florian Groß Übungsblatt 4

Ich werde immer wieder mal gebeten zu erläutern, was es mit der Abfrage der Systemvariablen CCU_im_Reboot in einigen meiner Programme auf sich hat.

LED Skalenbeleuchtung mit einem Arduino

Arduino Uno Bastelecke

Arduino Kurs Bits und Bytes. Stephan Laage-Witt FES Lörrach

Fachprojekt for Embedded System: Design and Implement Your Own Embedded Systems (2) LS 12, TU Dortmund

TaT-Maker Steuerung. Selbstbauanleitung. von. Kurt Sepke

Arduino Kurs Das LC-Display. Stephan Laage-Witt FES Lörrach

myavr Programmierung in C

Arbeitsblatt Nr.19: RFID Kit

Mark VHS Augsburg Einführung in die Mikrocontroller-Programmierung.

Felder und Schleifen. Themen heute. Felder Schleifen Heartbleed. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

LCD-Display 16x2 QAPASS (AllNet)

Arduino LCD Shield. Quelle:

Arduino Kurs Timer und Interrupts. Stephan Laage-Witt FES Lörrach

Arduino für FunkAmateure

Für den CTC-Mode kann demnach TCCR1A komplett auf 0 gesetzt werden, weil WGM11 und WGM10 in diesem Register liegen und beide laut Tabelle 0 sind:

Arduino, IR Fernbedienung dekodieren

Mit dieser kleinen Adapter-Platine können HD44780 kompatible LCD-Displays am I2C-Bus betrieben werden.

Universelle Bestimmung der Zählimpulsrate von Sensoren für Radioaktivität mit dem Arduino Bernd Laquai , Update

Struktur eines Sketches

ARDUINO KENNENLERNEN WAS IST EIN ARDUINO?

Messen von Gasmengen mit einfachen Mitteln. Version: 1.1 Datum: Autor: Dave Hoffmann

P(k, λ) = λ k /k!*exp(-λ) angegeben werden kann.

Um überhaupt produktiv arbeiten zu können, sind eine Reihe grundlegender Vorbereitungen notwendig:

analoge Ein- und Ausgänge

I2C Serial 2.6 LCD Modul

Girls Day 2017 Programmierung

TCS3200 Farbsensor. Schritt 1 Anschließen des Sensors. Bild 1: TCS3200 Farbsensor

OLEDs und EL-Folie. Madleen Sklenar Sommersemester Masterstudiengang: Interaction Design Kurs: Neue Technologien Betreuung: Prof.

Arduino Digispark. Ausgabe Copyright by Joy-IT 1

Selbstschließende Hand (SsH)

Der Arduino im Physikunterricht Cheat-Sheet. Christopher Kommetter

ARDUINO Übung. Inhalt:

I2C Serial 2.6 LCD Modul. Verwendung mit einem Arduino

LCD Modul 84x84 Nokia 5110

Bedienungsanleitung Bordcomputer : 1. Einstellen der Anzeige (Setup Anzeige) :

Ulrich Stein

Eine tastergesteuerte LED

Microcontroller im Amateurfunk

Erste Schritte. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Joy-IT Ultraschall Abstandssensor

Android + Arduino Hardware steuern mit Android. Entwicklertag Karlsruhe, Sebastian Wastl

8.3 Taster am µcontroller

HomeMatic - Pushnachrichten mit Pushover an Android bzw. ios

Bausatz mit 2 16 Zeichen LCD-Display

Wetterdaten online GND 3,3V VIN CLK MISO MOSI CS VBEN IRQ GND V D13 D12 D11 D10 D5 D3. Arduino

Thermostat/Temperaturwächter

Ich werde immer wieder mal gebeten zu erläutern, was es mit der Abfrage der Systemvariablen CCU_im_Reboot in einigen meiner Programme auf sich hat.

Informatik Enlightened. Station 0 - Einstieg

GTP444. GSM-SMS-Fernschaltund Alarmmodul 4-Kanal. Programmierbar am PC mit Software. Kurzanleitung 1/2017. Seite 1 von 7

HomeMatic - Einfacher CCU-Watchdog mit Pushover und Tasker

Laborübung 3. Latches, Flipflops, Counter

foexlab-materialien Arduino-Schaltungen First Steps Gottfried Wilhelm Leibniz Universität Hannover

DTMF-Decoder-Modul mit 8 Ausgängen & Morse-Transponder

Interaktionstoolkit How To

Dynapic und Dynasim Interface mit Hilfe von Mikroprozessoren

Einen elektronischen Würfel programmieren

Batteriewächter/-umschalter mit LCD Display

Warum dieses Projekt

Der Geiguino - Ein Geigerzähler auf Zählrohrbasis kombiniert mit Arduino UNO zur Auswertung und Anzeige

Arduino µcontroller. Virtuelle COMSchnittstelle

Anleitung Arduino-Experimentiersets

MT681. Handbuch

Transkript:

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 HMSCI-3-FM über einen Optokoppler am Ausgang des Arduino zu schalten. Auch ein fertiges RalaisModul, 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/14

Aufbau: 2/14

Arduino Programm (Sketch): /* Zähler 16 zu 1 Schaltausgang HIGH für Arduino 1.0.3 (getestet mit dem Arduino 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) und der 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 5 Millisekunden Entprellzeit initialisieren void setup() // Setup-Routine (wird nur einmal durchlaufen) pinmode(ledpin, OUTPUT); // Pin 13 als Output 3/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 aufgebautes Ralais-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 2 Channel 5V Relay Module for Arduino 4/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: 5/14

Aufbau: 6/14

Arduino Programm (Sketch): /* Zähler 16 zu 1 Schaltausgang LOW für Arduino 1.0.3 (getestet mit dem Arduino 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 der 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 5 Millisekunden Entprellzeit initialisieren void setup() // Setup-Routine (wird nur einmal durchlaufen) 7/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, eines vom Typ 1602), kann man den Zähler sehr einfach um eine Anzeige erweitern 8/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Ω Widerstand 1 220Ω Widerstand 1 10kΩ Trimmer Potentiometer 1 Schalter (optional) Schaltung: Aufbau: 9/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 2 Kanal 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 der Zähler zurück gesetzt. */ #include #include // Entprell Bibliothek einbeziehen // LCD Bibliothek einbeziehen LiquidCrystal lcd(11, 10, 6, 5, 4, 3); //LCD Bibliothek mit den entsprechenden 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 10/14

float kwh = 0; // Variable für den Verbrauch initialisieren und auf 0 setzen Bounce bouncer = Bounce(inputPin,5); // Entprell-Objekt mit 5 Millisekunden 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 11/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 16 zurücksetzen Alle Varianten können leicht auf andere Teilerverhältnisse angepasst werden. Hierzu muss im Code an 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 die Impulse vom Zähler schneller kommen, als die Programmschleife durchläuft, wird er daher nicht richtig zählen können. In diesem Fall müssen die Wartezeiten ggf. reduziert werden. Impressionen: 12/14

13/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 eigenes Risiko. Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung. Copyright Jens-P. Stern stern AV stern-av.de 14/14