Archiv der Kategorie: Sensor

adv

Click the image for download the ebook.

Advertisements

Dezentrale Temperaturerfassung mit Calliope mini in Python

Auf Grund der abweichenden Pinbelegungen zwischen BBC micro:bit und Calliope mini ist die Programmierung in Python gerade für I/O-Operationen nicht immer ohne Probleme. Die folgende Tabelle zeigt die Unterschiede:

nRF51822 micro:bit Calliope mini
P0.00 SCL P0
P0.01 P2 P1
P0.02 P1 P2
P0.03 P0 P3 (MIC)
P0.04 COL1 P4 (LED_C1)
P0.05 COL2 P5 (LED_C2)
P0.06 COL3 P6 (LED_C3)
P0.07 COL4 P7 (LED_C4)
P0.08 COL5 P8 (LED_C5)
P0.09 COL6 P9 (LED_C6)
P0.10 COL7 P10 (LED_C7)
P0.11 COL8 P11 (LED_C8)
P0.12 COL9 P12 (LEDC_9)
P0.13 ROW1 P13 (LED_R1)
P0.14 ROW2 P14 (LED_R2)
P0.15 ROW3 P15 (LED_R3)
P0.16 P16 P16 (TAST_B)
P0.17 BTN A P17 (TAST_A)
P0.18 P18 P18 (RGB LED)
P0.19 TGT nRST P19 (SCL)
P0.20 P20 P20 (SDA)
P0.21 MOSI P21 (BMX055 INT)
P0.22 MISO P22
P0.23 SCK P23
P0.24 TGT TxD P24 (TxD)
P0.25 TGT RxD P25 (RxD)
P0.26 BTN B P26 (Rx)
P0.27 ACC INT2 P27 (Tx)
P0.28 ACC INT1 P28
P0.29 MAG INT1 P29
P0.30 SDA P30
Zur Temperaturmessung möchte ich von folgendem Setup ausgehen.
Calliope Radio

Dezentrale Temperaturerfassung mit Calliope

 

Ein abgesetzter Calliope mini wird über ein Steckernetzteil am USB-Anschluss mit Spannung versorgt. Ein Temperatursensor LM35 erfasst die Temperatur im Bereich von 0 bis 150 °C. Hat man eine LM35 nicht zur Verfügung, dann kann anfangs auch mit dem internen Temperatursensor der CPU gearbeitet werden. Der Sensor sendet über die Radio-Verbindung die erfasste Temperatur an einen zweiten Calliope mini, der über USB mit einem PC verbunden ist.

Auf dem PC läuft ein Terminalprogramm (z.B. PuTTY) und erfasst die hier mit 9600 Baud seriell übertragenen Daten und bringt diese zur Anzeige.

Die beiden Calliope mini sind mit den folgenden Programmen zu flashen.

Sender:

# Measuring chip temperature on CPU & output to console
# works unchanged for micro:bit & Calliope mini

from microbit import *
import radio

# The radio won't work unless it's switched on.
radio.on()

while True:
 temp = temperature() - 3 # offset to ambient temperature
 display.scroll(str(temp)+" *C")
 radio.send(str(temp))
 sleep(60000) # sleep a minute

Bei Einsatz eines LM35 Temperatursensors ist das Erfassen der Temperatur anzupassen:

temp = pin1.read_analog() * 330 / 1024

Der Ausgang des LM35 ist, wie in der Abbildung gezeigt, mit P2 am Calliope mini zu verbinden (sh. auch in der Tabelle oben).

Empfänger:

# Receiving chip temperature from a second board & output to console
# works unchanged for micro:bit & Calliope mini

from microbit import *
import os
import radio

uart.init()
uart.write(os.uname().machine + "\r\nGet chip temperature by radio connection\r\n")

# The radio won't work unless it's switched on.
radio.on()

while True:
 # Read any incoming messages.
 temp = radio.receive()
 if str(temp) != "None":
 display.scroll(str(temp)+" *C")
 uart.write("Received chip temperature = "+str(temp)+" *C\r\n")
 sleep(1000)

Die Reichweite der Radio Verbindung des Calliope mini liegt bei ca. 20 m, so dass dem Test im Wohnraum wenig Grenzen gesetzt sind.

 

Abgesetzter Temperatursensor mit micro:bit radio

Micro:bit ist zwar BLE tauglich, doch unter Python reichen die Ressorcen für den BLE-Stack nicht aus und es bleibt die micro:bit radio Verbindung.

Zur abgesetzten Temperaturmessung kann ein micro:bit als Sensorknoten und eine weiterer als Empfängerknoten genutzt werden. Die Message des Sensors wir hier als Broadcast versendet.

Das Python-Programm des Sensors ist:

# Measuring chip temperature on micro:bit & output to radio
from microbit import *
import radio

# The radio won't work unless it's switched on.
radio.on()

while True:
 temp = temperature() - 3 # offset to ambient temperature
 display.scroll(str(temp)+" C")
 radio.send(str(temp))
 sleep(5000)

Das Python-Programm des Empfängers ist:

# Receiving chip temperature from a micro:bit sensor node & output to console
from microbit import *
import os
import radio

uart.init()
uart.write(os.uname().machine +" get chip temperature by radio connection\r\n")

# The radio won't work unless it's switched on.
radio.on()

while True:
 # Read any incoming messages.
 temp = radio.receive()
 display.scroll(str(temp)+" C")
 uart.write("micro:bit chip temperature = "+str(temp)+" C\r\n")
 sleep(1000)

 

 

C.H.I.P. als Sensor-Knoten

Wegen seiner Kompaktheit kann C.H.I.P.  dann sehr gut als Sensor-Knoten eingesetzt werden, wenn es nicht auf minimalen Stromverbrauch ankommt.

Für erste Tests habe ich mit dem Program chiplog.py  die CPU-Last, den verfügbaren Speicher und die Boardtemperatur abgefragt und über Thingspeak visualisiert. Ausserdem wird beim Überschreiten der Temperatur eine Push-Message versendet. Mit dem Programm stress habe ich die CPU-Last erhöht, um die Auswirkungen auf die Boardtemperatur zur verdeutlichen.

CPU_Load

Mem_avail

PMU_Temp

Um einen externen Sensor abfragen zu können, bedarf es nur noch weniger zusätzlicher Zeile Code, die für einen Temperatur- und Feuchtigkeitssensor SHT31 noch folgen.

Das Programm BatStatus.py zeigt den Status der Batterie in den ersten Minuten nach dem Anschliessen an den C.H.I.P.  Controller.

BatStatus

Die Programme chiplog.py und BatStatus.py sind auf Github abgelegt. Im Wiki sind Installationshinweise nach einem Flashen des Betriebssystems und dem erforderlichen Python-Setup aufgeführt.

 

Einfache Wetterstation für € 20

sht31chip

Mit dem $ 9 C.H.I.P. und einem Grove SHT31 ($ 11.90) kann man schon für € 20 Temperatur und relative Luftfeuchtigkeit erfassen und in der Cloud visualisieren.

Vorbedingung ist die Installation der folgenden Pakete:

sudo apt-get install build-essential libi2c-dev i2c-tools python-dev libffi-dev

Drei sehr überschaubare Scripte übernehmen die Abfrage des Sensors und das Versenden der Daten.

Mit dem Python Script SHT31.py werden von dem über den I2C-Bus angeschlossene Sensor Temperatur und relative Luftfeuchtigkeit abgefragt und zwischengespeichert. Das Shell Script thingspeak.sh sendet die erhobenen Messwerte an den Thingspeak-Server, während das Shell Script mqtt.sh die gleichen Daten an einen MQTT Broker sendet. Mit dem Script weather.sh werden diese drei Scripte gekapselt und in die Crontab eingetragen.

# m h dom mon dow command
*/5 * * * * /home/weather.sh

Durch diesen Eintrag erfolgt ein Aufruf des Scripts weather.sh alle fünf Minuten.

Die Scripte stehen wieder in meinem CHIP Repository zum Download zur Verfügung. Hier können die Ergebnisse der Messungen verfolgt werden.

LoRa Gateway aktiv…

Heute habe ich zu Testzwecken ein LoRa Gateway installiert. Im TTN Mapping (TheThingsNetwork) ist es als „CK LoRa Gateway“ markiert.

Ein LoRa Concentrator iC880A ist bei IMST bestellt, dann wird das Gateway LoRaWAN kompatibel.

ck-lora-gateway

In den nächsten Tagen bekommt die eingesetzte LoRa Node (Dragino Lora Shield & Arduino Uno) noch einen Temperatursensor, dessen Daten dann übermittelt werden. Es folgen später stromsparende Varianten auf Basis des  LoRa Transceiver RFM95W & Arduino Pro Mini, Raduino32 SX1272 und LoPy.

IoT Projekte mit Cayenne erstellen

Cayenne bezeichnet sich selbst als den ersten  Drag & Drop IoT Builder in der Welt. Grund genug das Ganze auszuprobieren. Details sind unter http://www.cayenne-mydevices.com/ zu finden.

Was wird benötigt?

  1. Eine mit dem Internet verbundene Hardware (Raspberry Pi oder Arduino)
  2. Smartphone mit iOS oder Android oder ein Browser auf dem PC
  3. Ein Cayenne Account

Am Einfachsten ist die Installation mit dem Smartphone. Nach Auswahl des hier verwendeten Raspberry Pi werden Libraries und ein Agent auf den Raspberry Pi installiert und nach ca. 10 Minuten kann das erste Projekt gestartet werden.

Ich habe hier einen mit einem Enviro pHAT von Pimoroni ausgestatteten Raspberry Pi Zero wegen des dort vorhandenen AD-Converters ADS1015 verwendet und an diesen einen Temperatursensor TMP36 angeschlossen. Dieser liefert eine zur Temperatur proportionale Ausgangsspannung.

enviro-phat

Zuerst fügt man auf dem Cayenne Desptop den ADC hinzu und bekommt damit das Feld Analog Input, selektiert den ADC-Kanal und verbindet dann den Sensor TMP36 mit diesem. Daraufhin erhält man das Feld TMP36. Die anderen Felder werden defaultmäßig bereitgestellt. Die Anzeigen lassen sich konfigurieren.

cayenne-desktop

Mit wenigen Schritten hat man erreicht, dass auf dem Dashboard eine funktionierende Anzeige der gemessenen Temperatur erscheint.

Ebenso kann der Verlauf des Messwerte über einer vorwählbaren Zeit als Graph dargestellt werden.

tmp36_verlauf

Die Cayenne Plattform ist noch in Entwicklung. Neue Devices, wie bspw. LoRa, kommen hinzu. Die Palette der Sensoren und Aktoren wird erweitert etc. Diesen Entwicklungsstand spürt man an der einen oder anderen Ecke. Ein Blättern im Forum hilft den Eindruck etwas abzurunden. Interessant bleibt der Ansatz aber allemal.