Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Zuverlässiger Sigfox-kWh-Zähler mit Arduino MKR Fox 1200

Benötigte Bauteile

Arduino MKR Fox 1200 Mit integriertem Sigfox-Modul (868 MHz) 1
Steckbrett (Breadboard) 1
Steckbrücken 1 Set
CNY70 Reflexionslichtschranke Erkennt schwarze Markierung auf Ferraris-Zähler-Rad 1
Widerstand 221 Ω Für IR-LED der CNY70 1
Widerstand 10 kΩ Pull-Up für Fototransistor 1
Widerstand 100 Ω 1
Drehpotentiometer Justierung Empfindlichkeit/Schwelle 1
Taster 12 mm (SparkFun) Für Kalibrierung & Start 1
LED (beliebig) Statusanzeige 1

Software & Dienste

Projektbeschreibung

1. Kurzfassung

Dieses Tutorial zeigt, wie man einen alten Ferraris-Stromzähler (Drehscheibenzähler) ans Internet anbindet. Der Zähler hat eine rotierende Aluminiumscheibe mit reflektierender Farbe und einem schwarzen Strich. Jede Passage des Strichs = 1 Umdrehung. Bei diesem Zähler entsprechen 120 Umdrehungen = 1 kWh.

2. Hardware & Netzwerk

Arduino MKR Fox 1200 mit eingebautem Sigfox-Modem (LPWAN, 868 MHz ISM-Band). Sigfox erlaubt 140 Uplink-Nachrichten pro Tag (je 12 Byte Payload). Nachrichten landen in der Sigfox-Cloud und können per Callback weitergeleitet werden.

ThingSpeak dient als visualisierende Plattform. Der Sigfox-Callback schreibt die empfangenen Daten direkt in einen ThingSpeak-Channel – Diagramme aktualisieren sich in Echtzeit.

3. Praktischer Aufbau

  1. Verdrahtung gemäß Schaltplan (siehe unten). Stromversorgung per USB-Powerbank oder Laptop-USB.
  2. Code hochladen (siehe Code-Sektion).
  3. ThingSpeak einrichten:
    • Channel 1 anlegen: Name, Beschreibung, Field 1 = „Consumption“.
    • Channel 2 anlegen (basiert auf Channel 1), MATLAB Analysis aktivieren mit Code:
readChannelID = TYPE_CHANNEL1_ID_HERE;
readAPIKey = 'TYPE_CHANNEL1_READ_API_KEY_HERE';
writeChannelID = TYPE_CHANNEL2_ID_HERE;
writeAPIKey = 'TYPE_CHANNEL2_API_KEY_HERE';
data = thingSpeakRead(readChannelID, 'ReadKey', readAPIKey,'OutputFormat','table');
analyzedData = data;
analyzedData.('Consumption') = (data.('Consumption') + YOUR_CURRENT_CONSUMPTION_STATUS_IN_WH)/1000;
thingSpeakWrite(writeChannelID, analyzedData, 'WriteKey', writeAPIKey);
  1. Sigfox Callback anlegen (backend.sigfox.com → Callbacks):
    • Type: DATA UPLINK
    • Channel: URL
    • Custom Payload Config: status::uint:32:little-endian
    • URL Pattern: https://api.thingspeak.com/update?api_key=THINGSPEAK_WRITE_API_KEY_CHANNEL1&field1={customData#status}
    • HTTP Method: GET

4. Montage & Logik

CNY70 mit doppelseitigem Klebeband auf das Zählerglas kleben – genau über der Mitte der Drehscheibe (siehe Foto „Installation“).

Inbetriebnahme:

  1. Taster 2× drücken → Kalibriermodus: LED leuchtet bei reflektierendem Bereich, erlischt bei schwarzem Strich.
  2. Nach erfolgreicher Kalibrierung Taster 1× drücken → Normalbetrieb.
  3. Gerät zählt Umdrehungen (Auflösung: 3 Umdrehungen = 25 Wh). Alle 30 Minuten wird der aktuelle Zählerstand (kWh) per Sigfox gesendet.

5. Ergebnis

In ThingSpeak sehen Sie den Stromverbrauch als zeitliches Diagramm – ideal für Verbrauchsanalyse, Lastprofil-Erkennung, Abrechnungskontrolle.

Code

Sigfox kWh electric energy power meter (Arduino .ino)

#include <SigFox.h>

int DIODE = 13;      // Status-LED
int BTN = 12;        // Taster
int BTN_state = 0, BTN_prev = 0, BTN_NR_OF_PRESS = 0;
int CALC = 0;
unsigned long i = 0;
uint32_t CONSUMPTION = 0; // Zählerstand in Wh
boolean SHINE = false;    // reflektierender Bereich erkannt
boolean KARDAN = false;   // Zählflanke gesperrt

void setup() {
  pinMode(DIODE, OUTPUT);
  pinMode(BTN, INPUT);
  Serial.begin(9600);
  if (!SigFox.begin()) {
    Serial.println("Sigfox-Modul nicht verfügbar.");
  }
}

void loop() {
  int sensor = analogRead(A3);        // CNY70 an A3
  BTN_state = digitalRead(BTN);

  // Taster-Flankenerkennung
  if (BTN_state != BTN_prev) {
    if (BTN_state == HIGH) BTN_NR_OF_PRESS++;
  }
  BTN_prev = BTN_state;

  // Modus 0: Kalibrierung (BTN_NR_OF_PRESS % 3 == 0 → 0,3,6...)
  if (BTN_NR_OF_PRESS % 3 == 0) {
    if (sensor > 300 && sensor < 950) digitalWrite(DIODE, HIGH);
    else digitalWrite(DIODE, LOW);
  }

  // Modus 1: Zählen (BTN_NR_OF_PRESS == 4)
  if (sensor < 1020 && SHINE == false) SHINE = true;           // Hell erkannt
  if (sensor > 1020 && SHINE == true && BTN_NR_OF_PRESS == 4) { // Dunkel (Strich) erkannt
    CALC++;
    SHINE = false;
  }

  // 3 Striche = 25 Wh
  if (CALC % 3 == 0 && CALC != 0 && KARDAN == false) {
    KARDAN = true;
    CONSUMPTION += 25;
  }
  if (CALC % 3 != 0) KARDAN = false;

  // Modus 2: Senden alle 30 Min (BTN_NR_OF_PRESS % 4 == 0 → nach 4. Druck)
  if (BTN_NR_OF_PRESS % 4 == 0) {
    digitalWrite(DIODE, LOW);
    if (SHINE == false) {
      for (millis(); (millis() - i) > 1800000; ) { // 1.800.000 ms = 30 Min
        i = millis();
        SigFox.debug();
        SigFox.beginPacket();
        SigFox.write(CONSUMPTION);
        SigFox.endPacket();
      }
    }
  }
}

Schaltplan

Verbindungen: CNY70 an A3 (Analog), Taster an D12, LED an D13, Widerstände gemäß Bauteilliste. MKR Fox 1200 wird per USB versorgt (5 V).

Wichtige Hinweise

Herstellungsprozess

  1. Smart Thirst Alert: DIY Pflanzen-Alarm für optimale Bewässerung
  2. Italienische Word Clock mit Arduino Nano, NeoPixel, LCD & RTC
  3. Arduino-Pins sparen: 4x3 Tastenfeld mit nur 3 Anschlüssen verbinden
  4. Bluetooth-Temperaturmonitor mit Arduino Nano
  5. DIY Auto-Ranging Kapazitätsmesser (10 pF – 10 µF) – Einfacher Arduino-Nano-Bau
  6. Berührungsloses Gesten-Schloss: Sicherer Zugang mit APDS-9960 & Arduino
  7. Arduino Nano Begleiter-Set – Essentielle Bauteile & Werkzeuge für DIY-Elektronik
  8. USB-MIDI-Adapter für Arduino Micro / Leonardo – Komplettes Bauteil-Kit & Code
  9. Isolierter Analogeingang für Arduino: Spannung/Strom galvanisch trennen
  10. Präziser Reaktionszeit-Test mit Arduino UNO