Datenlogger Part 2

Nachdem der „Schimmelwächter“ so gut funktionierte, wollte ich die Daten in Echtzeit verfolgen ThinkSpeak wäre der geeignete Webdienst dafür und bei Conrad fand ich ein: „… Arduino kompatible Pretzelboard (NanoESP) mit integriertem WLAN-Modul“ und einen weiterer Sensor für Temperatur und Luftfeuchte. Fertig war das Internet of Things Projekt:

Datei 10.02.16, 15 22 55

Der Anschluß war hier einfacher das der Sensor schon den benötigten Widerstand auf der Platine hat somit ist es ein sehr aufgeräumtes Steckbrett:

Datenlogger_Web_Steckplatine

Der dazugehörige Code, damit der Akku länger nutze ich hier auch die Sleep Funktion:

Datenlogger_Web.ino

Share

Arduino erste Anwendung

Mit dem Arduino Uno R3, einem Shield mit SD Card und einen Temperatur / Luftfeuchte Sensor wurde ein „Schimmelwächter“ gebaut:

Datei 09.02.16, 15 02 02

Das Steckbrett dazu ist sehr einfach, es musste nur ein 1M Ohm Widerstand eingelötet werden und die Stromversorgung:

Datenlogger_Steckplatine

Der dazu gehörige Programmcode, der Logfile wird nur geschrieben wenn sich die neue Messung von der vorherigen unterscheidet:

#include // SD-Karten Bibliothek
#include "DHT.h" // Temperatur Sensor Bibliothek
#include // RealTime Bibliothek

RTC_DS1307 RTC; // Typ der RealTimeClock
DHT dht; // Typ des Sensors

const int chipSelect = 10; // Anschluss der SD-Karte
// Variablen definieren
int i = 0;
float h_neu = 0; // neuer Messwert
float t_neu = 0; // neuer Messwert
float h_alt = 0; // vorheriger Messwert
float t_alt = 0; // vorheriger Messwert

void setup() {
dht.setup(2); // data pin 2
Serial.begin(9600); //
RTC.begin();
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
while (1) ;
}
Serial.println("card initialized.");
//neue Datei
File dataFile = SD.open("datalog.csv", FILE_WRITE);
String dataString = "Datum Zeit;Luftfeuchte;Temperatur";
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
}

void loop() {

// Datum und Zeit fuer die Zeile in der Logdatei
boolean schreiben = false;
DateTime now = RTC.now();
char buffer [25] = "";
sprintf(buffer, "%02d.%02d.%04d %02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute());
h_neu = dht.getHumidity();
t_neu = dht.getTemperature();
if (h_alt != h_neu) {
h_alt = h_neu;
schreiben = true;
Serial.println("Luftfeuchte geändert");
}
else {
Serial.println("Luftfeuchte gleich");
}
if (t_alt != t_neu) {
t_alt = t_neu;
schreiben = true;
Serial.println("Temperatur geändert: ");
}
else{
Serial.println("Temperatur gleich");
}
// String fuer die Log-Datei zusammenstellen:
String dataString = ""; // leerer String
dataString += (buffer); // Datum + Zeit
dataString += (i);
dataString += (";"); // Trenner
dataString += (h_neu); // Luftfeuchte %
dataString += (";"); // Trenner
dataString += (t_neu); // Temperatur
Serial.println(dataString);
if (schreiben == true) {
//Serial.println(" logfile schreiben");
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
}
delay(60000); // Zeit zwischen den Messungen 1 Sek = 1000
}

Share

Arduino Spielwiese

Eines der ersten eigenen Projekte das mit dem Arduino umgesetzt worden ist, ist dieser Würfel 2.0 🙂

Datei 08.02.16, 21 03 25

Sobald der Ultraschall Sensor ein Hindernis in einem Abstand von unter 20 cm erkennt wird der Würfel gerollt, bis das Hindernis einen größeren Abstand hat oder ganz entfernt ist – es wurde hier eine 5 gewürfelt.

das Passende Steckbrett würde so aussehen:

Würfel2_0_Steckplatine

und hier noch der Arduino Quellcode:

#include // Groove_Ultrasonic_Range_Master Bibliothek

Ultrasonic ultrasonic(7);
int wurf = 0;
void setup() {
Serial.begin(19200);

pinMode(13, OUTPUT); // LED
pinMode(14, OUTPUT); // Eins
pinMode(15, OUTPUT); // Zwei
pinMode(16, OUTPUT); // Drei
pinMode(17, OUTPUT); // Vier
pinMode(18, OUTPUT); // Fünf
pinMode(19, OUTPUT); // Sechs
randomSeed(analogRead(6));
digitalWrite(14, LOW);
digitalWrite(15, LOW);
digitalWrite(16, LOW);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
digitalWrite(19, LOW);

}

void loop() {

long cm;

cm = ultrasonic.MeasureInCentimeters();
if (cm > 20){
digitalWrite(13, HIGH); // Bereit zum Würfeln
}
else {
digitalWrite(13, LOW); // nun wird gewürfelt
wurf = random(1, 7);
}

switch (wurf) {
case 1:{
digitalWrite(14, HIGH);
digitalWrite(15, LOW);
digitalWrite(16, LOW);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
break;}
case 2:{
digitalWrite(14, HIGH);
digitalWrite(15, HIGH);
digitalWrite(16, LOW);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
break;}
case 3:{
digitalWrite(14, HIGH);
digitalWrite(15, HIGH);
digitalWrite(16, HIGH);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
break;}
case 4:{
digitalWrite(14, HIGH);
digitalWrite(15, HIGH);
digitalWrite(16, HIGH);
digitalWrite(17, HIGH);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
break;}
case 5:{
digitalWrite(14, HIGH);
digitalWrite(15, HIGH);
digitalWrite(16, HIGH);
digitalWrite(17, HIGH);
digitalWrite(18, HIGH);
digitalWrite(19, LOW);
break;}
case 6:{
digitalWrite(14, HIGH);
digitalWrite(15, HIGH);
digitalWrite(16, HIGH);
digitalWrite(17, HIGH);
digitalWrite(18, HIGH);
digitalWrite(19, HIGH);
break;}
default: {
digitalWrite(14, LOW);
digitalWrite(15, LOW);
digitalWrite(16, LOW);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
break;}
}
delay(25);
}

Share