OK

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie. Více informací

Úvodní stránka » GSM » Jak jednoduše na GSM-VIII.díl - Hlídáme teplotu s AGS

Jak jednoduše na GSM-VIII.díl - Hlídáme teplotu s AGS

V tomto dílu si ukážeme, jak můžeme s Arduino GSM Shieldem (AGS) hlídat teplotu a dle potřeby např. spustit ventilátor nebo klimatizační jednotku, přičemž o každé aktivitě budeme notifikování SMSkou. Níže uvedený sketch využívá digitálního teploměru DS18B20 a funguje tak, že při překročení teploty 30°C sepne relé 1 - zde může být připojen na jeho spínací kontakty ventilátor. Ventilátor odventiluje teplo a relé 1 odpojí ventilátor při dosažení 24°C. Tyto meze jsem nastavil natvrdo a je možné je pochopitelně změnit - zavedením nějakých konstatnt nebo definic. Je zapracována také určitá hystereze a logika pro odeílání SMS a zapínání/vypínání ventilátoru.

O aktuální teplotě se pak můžete dozvědět odesláním SMS na číslo GSM shieldu s obsahem Teplota?, vrátí se Vám SMS s obsahem Teplota: xx.x st.C.

Připojení teploměru k AGS

Čidlo DS18B20 velmi rád používám ve svých příkladech, takže čtenářům pročítajícím i jiné rubriky je dobře známo. Na níže uvedeném obrázku je detail, kam a jak přesně čidlo zasunout do AGS. Jak již bylo zmíněno v V.dílu, je pro OneWire sběrnici, kterou DS18B20 využívá, vyveden pin D10 a je ošetřen pull up rezistorem 4k7, takže je možné DS18B20 připojit bez jakýchkoliv úprav. Pochopitelně můžete připojit i několik DS18B20 na tuto jednu sběrnici. Pro zjednodušení jsem vypracoval sketch, který bude pracovat pouze s jedním čidlem. Obsluha dvou čidel je zřejmá třeba z mého příkladu miniweb serveru.

 

Sketch AGS s DS1820

Sketch obsahuje potřebné komentáře a je ke stažení na mém GitHub repository zde. Před nahráním sketche udělejte jen malou úpravu - do SERVICE_NUMBER vepište své číslo mobilu, jinak bude SMSka chodit mi a ne Vám :-). Díky!

Ve sketchi využívám pochopitelně knihovnu ArduinotechGSMShield popsanou v minulém dílu, kde je velmi jednoduchý příklad jejího použití.

#include <ArduinotechGSMShield.h>
#include <SoftwareSerial.h>
#include <OneWire.h> 
#include <DallasTemperature.h>
#define LED 7
#define VENTILATOR 8
#define SERVICE_NUMBER "739822476"

//definice OneWire pro připojení DS18B20
#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 9 

//definice pro teploměr
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
float teplota;
String termIN;

//Vytvoření instance třídy AGS

AGS modul(1);
uint8_t infoStatus;
String number;
bool notificationSent;
bool afterReset;

//Vstupní parametry a inicializace shieldu

void setup()
{
  pinMode(VENTILATOR, OUTPUT);
  digitalWrite(VENTILATOR, LOW);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
  modul.begin();
  notificationSent = true;

  //teploměr
  sensors.begin();
  if (sensors.getDeviceCount()>0) Serial.println("Teplomer nalezen!");
  else Serial.println("Teplomer NENALEZEN!!!");
  oneWire.reset_search();
  oneWire.search(insideThermometer);
  //nastav rozliseni
  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
  sensors.requestTemperatures();
  printAddress(insideThermometer);
  printTemperature(insideThermometer);
  Serial.println("****************************************");

}

//Hlavní smyčka – čeká na příchod SMS s obsahem Teplota?
//Jakmile je taková SMS rozpoznána, změří se teplota a odešle
//se SMSka s obsahem Teplota:xx.x st.C
//Smyčka hlídá překročení teploty (zde pevně 30 st.), jakmile
//je teplota překročená, odešle se SMS, zapne se ventilátor
//pokud se teplota vrátí pod 25 st., vypne se ventilátor
//Ventilátor = RELE1 na D8

void loop()
{
  //měř periodicky teplotu
  sensors.requestTemperatures();
  teplota = sensors.getTempC(insideThermometer);
  
  infoStatus = modul.checkCallAndSMS();
  if (infoStatus == 2)
  {
    number = modul.getNumber();
    Serial.println("SMS from:" + number);

    if (modul.getSMSContent() == "Teplota?")
    {
      modul.sendSMS(number,"Teplota=" + String(teplota) + " st.C");
    }
  }
  //zkontroluj teplotu a je-li vyšší než 30 st., pak pošli SMS
  //nastav příznak, že SMS byla poslána, ať nechodí furt dookola
  //zapni ventilátor
  //vychozi stav odpovídá poslané SMS notification=true - kdyby
  //bylo vychozí false, po resetu by se hned odeslala SMSka pokud by teplota 
  //byla v normálu
  if ((teplota > 30.0)&&(notificationSent == false))
  {
    modul.sendSMS(SERVICE_NUMBER, "Pozor, teplota byla prekrocena!!!");
    notificationSent = true;
    Serial.println("Teplota prekrocena!!! Odeslana SMS.");
    digitalWrite(VENTILATOR, HIGH);
    Serial.println("Ventilator byl zapnut");
  }
  //vypni ventilator
  if ((teplota < 24.0) && (notificationSent == false))
  {
    modul.sendSMS(SERVICE_NUMBER, "Teplota v normalu");
    notificationSent = true;
    digitalWrite(VENTILATOR, LOW);
    Serial.println("Ventilator byl vypnut");
  }
  //smaž příznak odeslané SMSky, jakmile se teplota přiblíží
  //k hranici sepnutí ventiátoru
  if ((teplota > 29.0)&&(teplota < 30.0))
  {
    notificationSent = false;
  }
  //pokud je teplota vyšší jak 35 st. na nic nečekej
  //a zapni ventilátor - ošetření stavu po restartu
  if (teplota > 35.0) digitalWrite(VENTILATOR, HIGH);
  delay(1000);
}


//pro teploměr
void printAddress(DeviceAddress deviceAddress)
{
  Serial.print("Adresa teplomeru:");
  for (uint8_t i = 0; i < 8; i++)
  {
    // zero pad the address if necessary
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
  Serial.println("");
}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Teplota: ");
  Serial.print(tempC);
  Serial.write(176);
  Serial.println("C");
}

Jo a příště tedy nějaké ty examply s voláním a SMSkováním - spíše to asi navážu na tento díl a rozpracujeme inteligenci hlavní smyčky. Mrkneme taky na to, k čemu jsou na AGS vyvedeny piny pro display nebo obecně I2C sběrnice včetně napájení. Modulů pro integraci na I2C je celkem moře, kouknu do šuplíku, co mi tam kloudného lenoší a stálo by za pozornost, možná nějaké RTC, možná meteočidlo BMP180, když tak si napište, co by jste rádi s tímto shieldem pořešili.

PF

Přidat komentář

Zvýrazněné položky jsou povinné.


TOP produkty

Arduino MEGA2560

Arduino MEGA2560
424 Kč s DPH

NodeMCU s ESP8266

NodeMCU s ESP8266
350 Kč s DPH

Kontakt

Ing. Petr Foltýn
Kunčice pod Ondřejníkem 814, 73913
TOPlist