Übersetzungen dieser Seite:

Plant Observation Kit

Öfters stellt sich bei mir die Frage, warum ist meine Pflanze schon wieder eingegangen? Pflanzen brauchen Wasser und Licht zum Leben. Licht ist vorhanden, aber es mangelt an Wasser. Man sollte die Pflanzen doch gießen. Ich habe das schon wieder vergessen :-(

Das muss sich ändern. Ich baue mir eine eigene Pflanzenalarmanlage, aber bitte ohne Löten !

Beschreibung

Die Aufgabe besteht darin, den Wassergehalt der Blumenerde zu messen und über eine IPv6 Funkstrecke die Messdaten dem Heimnetz zur Verfügung zu stellen.

Blockschaltbild

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

Hardware

Zutaten

  • Merkurboard
  • Grove Shield 4
  • Grove Moisture Sensor
  • Grove Cable
  • Battery Holder
  • 2x AAA Battery

Nachbau

Nachdem wir uns die Einzelteile besorgt haben, können wir mit dem Zusammenbau beginnen. Wir stecken das Grove Kabel an den Moisture Sensor an. Danach stecken wir die andere Seite des Kabels in die Buchse J2 des Merkur-Grove-4 Board.

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 Measture Sensor ageschlossen ist. Des Weiteren definieren wir uns eine Variable moisture_voltage für unseren Messwert.

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

#define LED_PIN 4

uint8_t moisture_pin = A5;
uint16_t moisture_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_moisture, ü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_moisture);
}

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_moisture.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(moisture_pin) übergeben wir den gemessenen Wert durch return unserem Coap Server zurück.

size_t moisture_v (const char *name, uint8_t is_json, char *buf, size_t bufsize)
{
  moisture_voltage = analogRead(moisture_pin);
  return snprintf (buf, bufsize, "%d", moisture_voltage);
}

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

GENERIC_RESOURCE \
( 
  moisture, METHOD_GET,
  "moisture/v",
  Moisture voltage,
  V,
  NULL,
  moisture_v
);

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

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

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

-- snip --

Nun haben wir unser Programm fertig erstellt.

Download

Medien


de/projekte/plant_observation_kit.txt · Zuletzt geändert: 2016/03/23 21:40 von kelvan