Fire Alarm
Obsah
Č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:
- include <SPI.h>
- include <Ethernet.h>
- include <TinkerKit.h>
- 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_”