Übersetzungen dieser Seite:

Water Alert Kit

Man ist gerade nicht zu Hause und dann wird eine Wasserschlauch undicht und setzt die Wohnung oder das Haus unter Wasser. „Warum habe ich das nicht schon vorher bemerkt?“

Um nicht weiter in Angst und Schrecken zu Leben bauen wir eine eigene Wasseralarmanlage - ohne Löten!

Beschreibung

Die Aufgabe besteht nun darin, Wasser auf dem Boden zu Messen und über eine IPv6 Funkstrecke die Messdaten dem Heimnetz zur Verfügung zu stellen und gegebenenfalls Alarm zu schlagen.

Blockschaltbild

Das Merkurboard liest über den analogen Eingang A5 den Messwert des Wasser-Sensors ein. Der Sensorwert wird dann über 6LoWPAN über einen 6LoWPAN Router in das IP Netz weitergeleitet. Das Merkurboard und der Wasser-Sensor werden direkt vom Batteriehalter versorgt.

Hardware

Zutaten

  • Merkurboard
  • Merkur Grove Shield 4
  • Grove Cable
  • Grove Buzzer
  • Battery Holder
  • 2x AAA Battery
  • Water Alarm Case

Nachbau

Nachdem wir uns die Einzelteile besorgt haben, können wir mit dem Zusammenbau beginnen.

Software

Auf dem Merkurboard wird das Betriebsystem Contiki-OS eingesetzt, das um den Arduino Befehlssatz erweitert wurde. Nun können wir Arduino-like über Sketch Files unser Programm erstellen. Im Sketch File definieren wir den Pin A5, für „Analog 5“ Eingang, an dem unser Wasser-Sensor angeschlossen ist. Des Weiteren definieren wir uns eine Variable water_voltage für unseren Messwert.

extern "C" {
#include <stdio.h>
#include "resource_water.h"

#define LED_PIN 4

uint8_t water_pin = A5;
uint16_t water_voltage = 0;
}

In unserer Setup-Funktion schalten wir die Merkurboard Led aus. Danach initialisieren wir unseren Coap Server, über den wir die Daten in unser IP Netz senden. Des Weiteren aktivieren wir unsere Coap-Resource resource_water, über die wir den Sensor auslesen und über das Coap Protokoll weiterleiten.

void setup (void)
{
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, HIGH);
    rest_init_engine ();
    rest_activate_resource (&resource_water);
}

In unserem Fall bleibt die loop Funktion leer. Wir fragen alle Werte über unseren Coap Server ab.

void loop (void)
{

}

In einem weiteren File namens resource_water.c definieren wir unsere Coap-Resource zum Einlesen und Abfragen des Sensors. Wir definieren eine Funktion zum Auslesen des Sensors. Nach dem Auslesen mit analogRead(water_pin) übergeben wir den gemessenen Wert durch return unserem Coap Server zurück.

size_t
water_v (const char *name, uint8_t is_json, char *buf, size_t bufsize)
{
  water_voltage = analogRead(water_pin);            
  return snprintf
    (buf, bufsize, "%d", water_voltage);
}

Als Letztes definieren wir noch unsere Coap Resource namens water, unser Messwert erscheint im Coap Baum unter water/v und sagen dem Coap Server, dass unsere Messroutine water_v heißt, die wir oben definiert haben.

GENERIC_RESOURCE \
    ( water, METHOD_GET
    , "water/v"
    , Water voltage
    , V
    , NULL
    , water_v
    );

Wir tragen in unserem Makefile das Sourcefile „resource_moisture.c“ ein.

-- snip --
CONTIKI=../../..
CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\"

PROJECT_SOURCEFILES += resource_water.c ${SKETCH}.cpp

-- snip --

Nun haben wir unser Programm fertig erstellt.

Download

Medien


de/projekte/water_alert_kit.txt · Zuletzt geändert: 2016/01/15 15:37 von harald42