Členové projektu

Kristina Altal, StuNoMe (kristina.altal@gmail.com) Kateřina Tomalová, StuNoMe (k.tomalova@centrum.cz) Zuzana Ulmanová, StuNoMe, (zuzanaulmanova@icloud.com)

Motivace vzniku projektu a jeho význam

Arduino Fire Alarm vznikl jako školní projekt v rámci výuky předmětu Virtuální realita na internetu na Studiích nových médií, FF UK. Vzhledem k tomu, že jsme s Arduinem pracovaly poprvé, zvolily jsme projekt s menší náročností na sestavení avšak funkční a využitelný i v praxi. Jedná se o teploměr, který konstatně měří teplotu v místnosti/bytě a data následně pomocí webové aplikace Thingspeak odesílá a ukládá. Následně je lze vizualizovat a tedy konstatně sledovat změny teploty v bytě. Při dosažení kritické teploty (v případě požáru či neobvyklé situace) začne Fire Alarm hlasitě pípat a odešle tweet s označením majitelů bytu. Ten díky tomu bude okamžitě upozorněn o navýšení teploty a může i na dálku zasáhnout (zavolat hasiče). Podařilo se nám sestavit funkční fire alarm, který může být využit v rámci quantified data (neustále sbírání dat o teplotě na nějakém místě), ale i jako funkční firealarm či teploměr (při navyšování teploty jsou zobrazeny diody, až při kritické teplotě začne hlasitě pípat). Vzhledem k detailnímu popisu a relativně rychlé montáži bez nutnosti mnoha komponentů si tento FA může sestavit prakticky každý.

Použitý materiál a software

Arduino Uno TinkerKit Tinkerkit Thermistor Module TinkerKit Led 3x Reproduktor Arduino Shield Model Ethernet Ethernet kabel USB kabel


Odkazy na knihovnu arduina a vlastní zdrojový kód

Libraries: TinkerKit, Thingspeak Kód:

  1. include <SPI.h>
  2. include <Ethernet.h>
  3. include <TinkerKit.h>
  4. include "ThingSpeak.h"

char server[] = "api.thingspeak.com"; const char * APIKey = "8W0Z5V4ICJKU461L";

//inicializace ethernetu byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF }; IPAddress ip(192, 168, 0, 176); EthernetClient client;

TKLed led(O3); TKLed led_1(O4); TKLed led_2(O5); TKThermistor therm(I0); // creating the object 'led' that belongs to the 'TKLed' class // and giving the value to the desired output pin

float baseTemp = 20.0; float C; unsigned long channelNumber = 120178; unsigned int temperatureFieldNumber = 1; String thingtweetAPIKey = "M7W84FDJNHQWUIIC"; int failedCounter = 0; long lastConnectionTime;

void updateTwitterStatus(String tsData) {

 if (client.connect(server, 80))
 {
   // Create HTTP POST Data
   tsData = "api_key=" + thingtweetAPIKey + "&status=" + tsData;
   client.print("POST /apps/thingtweet/1/statuses/update HTTP/1.1\n");
   client.print("Host: api.thingspeak.com\n");
   client.print("Connection: close\n");
   client.print("Content-Type: application/x-www-form-urlencoded\n");
   client.print("Content-Length: ");
   client.print(tsData.length());
   client.print("\n\n");
   client.print(tsData);


   if (client.connected())
   {
     Serial.println("Connecting to ThingSpeak...");
     Serial.println();
     failedCounter = 0;
   }
   else
   {
     failedCounter++;
     Serial.println("Connection to ThingSpeak failed A (" + String(failedCounter, DEC) + ")");
     Serial.println();
   }
   
   client.flush();
   client.stop();
 }
 else
 {
   failedCounter++;
   Serial.println("Connection to ThingSpeak Failed B (" + String(failedCounter, DEC) + ")");
   Serial.println();
   lastConnectionTime = millis();
 }

}

void setup() {

 //nothing here
 Serial.begin(9600);
 if (Ethernet.begin(mac) == 0) {
   Serial.println("Failed to configure Ethernet using DHCP");
   // no point in carrying on, so do nothing forevermore:
   // try to congifure using IP address instead of DHCP:
   Ethernet.begin(mac, ip);
 }
 delay(1000);
 ThingSpeak.begin(client);

}

void loop() {

 C = therm.readCelsius();
 ThingSpeak.writeField(channelNumber, temperatureFieldNumber, C, APIKey);
 led.off();
 led_1.off();
 led_2.off();
 Serial.println(C);
 if (C < 25) {
   led.off();
   led_1.off();
   led_2.off();
   updateTwitterStatus("Je tu zima");
 }
 else if (C < 32) {
   led.on();
   led_1.off();
   led_2.off();
   updateTwitterStatus("Je tu příjemně.");
 }
 else if (C < 34) {
   led.on();
   led_1.off();
   led_2.off();
   int thisPitch = map( C, 30, 34, 1200, 1500);
   tone(8, thisPitch , 500);
   updateTwitterStatus("Je tu fakt vedro.. @ulmanaz @altkris_ @tomalovic");
 }
 else {
   led.on();
   led_1.on();
   led_2.on();
   updateTwitterStatus("HOŘÍÍÍÍÍÍ !! @ulmanaz @altkris_ @tomalovic");
 }
 delay(6000);

}

Popis vývoje a konečné verze vlastního produktu

Instalace ovládacího programu Arduino a knihovny TinkerKit Propojení Arduino Uno, TinkerKitu a počítače Zapojení tří LED diod, termometru a minireproduktoru Vytvoření kódu: kód je kombinací ukázkových kódů Blink, Thermistor a toneMelody Nastavení a upravení kódu: reproduktor a diody jsou propojené s termometrem a světelným a zvukovým signálem tak reagují na změnu teplot. Rozlišily jsme tři teplotní stupně, přičemž při nejnižším stupni se rozsvítí pouze jedna dioda a hraje nízký ton, při zvýšení teploty a dosažení druhého stupně se rozsvítí druhá dioda a změní tón. Při dosažení teploty 56 stupňů Celsia se rozsvítí všechny tři diody najednou a rozezní se nejvyšší tón. Propojení alarmu se službou ThingSpeak: Pomocí ethernetového kabelu jsme propojily alarm s počítačem a všechna data z termometru se tak odesílají do ThingSpeaku, kde se ukládají a současně vizualizují. Při dosažení kritické teploty 34 stupňů Celsia (stanovena nižší hranice, kterou jsme byli schopni na místě dosáhnout) náš alarm přes službu ThingSpeak pošle tweet “Hoří! @tomalovic @ulmanaz @altkris_”

Fotodokumentace