INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 2 Bewertungen - 4.5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wasser-/Gassensor mit SMS Versand
31.08.2014, 17:05
Beitrag #1
Question Wasser-/Gassensor mit SMS Versand
Hallo zusammen,

ich bin neu hier im Forum und auch komplett neu in der "Arduino-Welt"
Nachdem ich mich ein paar Stunden mit kleineren Arduino Projekten beschäftigt habe, möchte ich mich meinem eigentlichen Projekt, für das ich mir den Arduino angeschafft habe, widmen.

Zuerst einmal zu meiner Hardware:

1 x Funduino Uno
2 x Schwimmerschalter (Link zu Ebay)
1 x SainSmart TC35i GSM Modul (Link zu Amazon)
1 x SainSmart MQ2 Gas Detector (Link zu Amazon)
1 x Netzteil für die Stromversorgung vom GSM Modul (Link zu Amazon)

Ich habe in meinem Keller 2 Wasserschächte sowie eine Gasheizung, die ich mit meinem Arduino in Zukunft überwachen möchte.

Das ganze soll so ablaufen:
Sobald einer der Schwimmerschalter einen zu hohen Pegel meldet oder der Gassensor Gas feststellt, soll EINE SMS versendet werden.
Sollte danach der zweite Schwimmerschalter oder Gassensor Alarm feststellen, sollte nochmal eine SMS verschickt werden.

Sprich', jeder Sensor veranlasst bei Alarm einen einmaligen SMS Versand.

Das wars in der Theorie.

Der SMS Versand in der Praxis klappt soweit ganz gut. Nur das ganze in Kombination mit den Sensoren als Auslöser bekomme ich einfach nicht gebacken.

Ich denke, dass ich in irgendeiner Weise mit if/else und einem Zähler arbeiten muss, nur bin ich absoluter Programmier-Anfänger, mir fehlt dazu einfach die analytische Denkweise.

Ich hoffe, es kann mir jemand von euch helfen und mir den entsprechenden Code liefern.

Achja, Pinbelegung ist egal, die kann ich aus dem Code dann schon rauslesen Wink

Vielen Vielen Dank schonmal!!

Grüße

Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.08.2014, 20:42
Beitrag #2
RE: Wasser-/Gassensor mit SMS Versand
HI,

also nach nem Code zu Fragen... wer macht sich schon die Arbeit ehrlich gesagt, ...

und es gibt dafür ne programmier ecke Wink


z u f ä l l i g e r w e i s e bin ich an einem ähnlichen projekt dran, vorweg, ich arbeite noch an dem reset um nicht immer zum arduino laufen zu müssen damit er wieder meldet, also ind einem fall wenn das wasser wieder auf niveau ist und erneut anfängt zu starten, aber ansonsten macht mein skript etwas ähnliches,... dein glück, ich arbeite auch mit dem mq2 sensor, hier mal mein skript kannst dir ja rausziehen was du magst... Smile

Code:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9);

String inData = "";
char last;
#include <DHT.h>
#include <SD.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht1 (DHTPIN, DHTTYPE);
#include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
const int chipSelect = 4;
const int analogInPin = A0;
int ring = 7;
int sensorValue = 0;
int sent = 0;

void setup()  
{
  Wire.begin();
  RTC.begin();
  Serial.begin(9600);
  Serial.println("Starte...");

  mySerial.begin(9600);
  mySerial.println("AT");
  pinMode(10, OUTPUT);
  pinMode(7, INPUT);
  digitalWrite(7, HIGH);

  if (!SD.begin(chipSelect))
  {
    Serial.println("Card failed, or not present");
    Serial.println("");
    return;
  }

  Serial.println("card initialized.");
  Serial.println("");
  delay(1000);
}

void loop()
{
  while (Serial.available() > 0)
  {
    char recieved = Serial.read();
    inData += recieved;
  }

  DateTime now = RTC.now();

  String dataString = "";

  sensorValue = analogRead(analogInPin);

  float h = dht1.readHumidity();  

  float t = dht1.readTemperature();

  if (isnan(t) || isnan(h))
  {
    Serial.println ("Fehler - Lesen von Luftfeuchte bzw. Temperatur");
    Serial.print("Gaswert ist:    ");    
    Serial.print(sensorValue);
    Serial.println(" ppm");
    Serial.println("");  
  }

  if (inData == "a")
  {
    Serial.print("Feuchte:        ");
    Serial.print(h);
    Serial.println(" %   ");
    Serial.print("Temperatur:     ");
    Serial.print(t);
    Serial.println(" C");
    Serial.print("Gaswert ist:    ");    
    Serial.print(sensorValue);
    Serial.println(".00 ppm");
    Serial.print("SMS Status:     ");
    Serial.println(sent);
    Serial.println("");  
    delay(1000);                    
  }

  if (last != now.minute())
  {
    byte a = h;
    byte b = t;
    byte c = sensorValue;
    dataString += String(a);
    dataString += ",";
    dataString += String(b);
    dataString += ",";
    dataString += String(c);
    dataString += ",";
    dataString += String(now.day(), DEC);
    dataString += ".";
    dataString += String(now.month(), DEC);
    dataString += ",";
    dataString += String(now.hour(), DEC);
    dataString += ":";
    dataString += String(now.minute(), DEC);
    dataString += ";";

    File dataFile = SD.open("datalog.txt", FILE_WRITE);

    if (dataFile)
    {
      dataFile.println(dataString);
      dataFile.close();
      Serial.println(dataString);
      Serial.println("Gespeichert - SD: 'datalog.txt'");
    }
    else
    {
      Serial.println("Fehler - Lesen von SD: 'datalog.txt'");
    }

    last = now.minute();

    Serial.println("");
  }
  
if (sent == 0)
{
   if ((sensorValue > 90) || (t > 50) || (h > 80))
   {
     sms(t,h,sensorValue);
     sent = 1;
   }
}

// if ((inData == "t") || (ring == HIGH))
// {
//   sms(t,h,sensorValue);
//   delay(5000);
// }

if ((inData == "r") || (ring == LOW))
{
  sent = 0;
  Serial.println("SMS reseted");
  Serial.println("");
  delay(5000);
}

  dataString="";
  inData = "";
  delay(10);
}

void sms(float t, float h, char sensorValue)
  {
    mySerial.print("AT+CMGF=1\r");
    delay(100);
    mySerial.println("AT+CMGS=\"handynummer\"");
    delay(100);
    mySerial.println("ALARM!");
    mySerial.print("Temp:     ");
    mySerial.print(t);
    mySerial.println(" C");
    mySerial.print("Feuchte: ");
    mySerial.print(h);
    mySerial.println(" %");
    mySerial.print("Gas:        ");
    mySerial.print(sensorValue);
    mySerial.println(".00 ppm");
    delay(100);
    mySerial.println((char)26);
    delay(100);
    Serial.println("SMS versendet");
    Serial.println("");
  }



mit der variable "sent" makiere ich ob die sms bereits versendet wurde, ansonsten würde hier im meinem falle bei einer dauerhaften auslösung ja hunderte sms versand werden... is nur meine lösung, gibs bestimmt elegantere Tongue

viel spaß erstmal beim analysieren Wink

gruss hilgi

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.09.2014, 18:40
Beitrag #3
RE: Wasser-/Gassensor mit SMS Versand
Hallo,

danke für die nette und hilfreiche Antwort!

Ich weis, es ist etwas dreist, nach dem Code zu fragen, aber ich benötigte einfach einen kleinen Denkanstoß, wie ich das Problem in den Griff bekommen kann.

Dein Code hat mir den entsprechenden Tip gegeben, bin jetzt dabei, dass ich mir meinen eigenen schreibe und sobald dieser einigermaßen läuft, lasse ich es euch selbstverständlich wissen Blush

Danke nochmal und bis bald!

Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.09.2014, 11:26
Beitrag #4
RE: Wasser-/Gassensor mit SMS Versand
Hallo,

nach langem versuchen, tüfteln und experimentieren habe ich nun folgenden Code zusammengebracht, der anscheinend auch noch zu funktionieren scheint:

Zitat:#include <SoftwareSerial.h>
SoftwareSerial gsmSerial(1,2);

int SMSsentW = 0;
int SMSsentV = 0;
int SMSsentG = 0;
int sensorW=3;
int sensorV=4;
int sensorG=A1;
int LEDblau=13;
int LEDrot=12;
int LEDgelb=11;


void setup()
{
pinMode(sensorW, INPUT);
pinMode(sensorV, INPUT);
pinMode(sensorG, INPUT);
pinMode(LEDblau, OUTPUT);
pinMode(LEDrot, OUTPUT);
pinMode(LEDgelb, OUTPUT);
gsmSerial.begin(9600);
delay(2000);
}

void loop()
{
if (digitalRead(sensorW)==HIGH && SMSsentW == 0)
{
digitalWrite(LEDblau,HIGH);
sendTextMessageW();
delay(9000);
SMSsentW=1;
}

else if (digitalRead(sensorW)==LOW && SMSsentW == 1)
{
SMSsentW=0;
digitalWrite(LEDblau,LOW);
}



if (digitalRead(sensorV)==HIGH && SMSsentV == 0)
{
digitalWrite(LEDrot,HIGH);
sendTextMessageV();
delay(9000);
SMSsentV=1;
}

else if (digitalRead(sensorV)==LOW && SMSsentV == 1)
{
SMSsentV=0;
digitalWrite(LEDrot,LOW);
}




if (analogRead(sensorG) >= 300 && SMSsentG == 0)
{
digitalWrite(LEDgelb, HIGH);
sendTextMessageG();
delay(9000);
SMSsentG=1;
}
else if (analogRead(sensorG) < 300 && SMSsentG == 1)
{
SMSsentG=0;
digitalWrite(LEDgelb, LOW);
}

}


void sendTextMessageW() {
gsmSerial.print("AT+CMGF=1\r");
delay(100);
gsmSerial.println("AT+CMGS=\"handynummer\"");
delay(100);
gsmSerial.print("ALARM im Schacht Waschraum! Kritischer Wasserstand! Sofortiges Handeln notwendig!!");

delay(100);
gsmSerial.println((char)26);
}

void sendTextMessageV() {
gsmSerial.print("AT+CMGF=1\r");
delay(100);
gsmSerial.println("AT+CMGS=\"handynummer\"");
delay(100);
gsmSerial.print("ALARM im Schacht Vorratsraum! Kritischer Wasserstand! Sofortiges Handeln notwendig!");

delay(100);
gsmSerial.println((char)26);
}

void sendTextMessageG() {
gsmSerial.print("AT+CMGF=1\r");
delay(100);
gsmSerial.println("AT+CMGS=\"handynummer\"");
delay(100);
gsmSerial.print("NOTFALL! GASALARM IM HEIZRAUM!!! FUNKEN & FEUER UNBEDINGT VERMEIDEN! SOFORT GAS ABSTELLEN UND LUEFTEN!!!! ");

delay(100);
gsmSerial.println((char)26);
}

Bin begeistert Big GrinBig GrinBig Grin

Was sagt ihr dazu? Ist das einigermaßen sauber programmiert?

Danke

Gruß

Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.09.2014, 20:57
Beitrag #5
RE: Wasser-/Gassensor mit SMS Versand
Sieht doch sehr gut aus Smile
und so lange es tut was du möchtest... keine kritik Wink

viel spaß noch und schön das du den code gepostet hast

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste