Zapisi in dokumenti iz področja prava, človekovih pravic in tehnologije.

BlueSensor: načrt vezja

Za projekt izdelave senzorske naprave, ki bo merila temperaturo, vlago in strupene oz. škodljive pline v okolju smo pripravili načrt tiskanega vezja. Načrt je dostopen v PDF datoteki in sicer v originalu ter v zrcalni obliki. Vezje ima dimenzije 70,92 mm x 47,27 mm. Načrt je izdelal Drago Trebežnik.

BlueSensor - načrt vezja.

BlueSensor – načrt vezja.

Tiskano vezje se od prototipa razlikuje v nekaj dodatnih funkcionalnostih. Tako se bosta na končnem izdelku nahajala dva plinska senzorja, en senzor za vlago, naprava bo imela možnost priklopa kar štirih temperaturnih senzorjev, dodan pa je še piezzo piskač. Programska koda bo tako omogočala, da bo v primeru ekstremnih temperatur ali povišane koncentracije plina, naprava sprožila zvočni alarm.

Če bi dali tiskano vezje izdelati k profesionalnemu izdelovalcu, bi na koncu izgledalo takole (zgornji del):

BlueSensor - slika vezja (zgornji del).

BlueSensor – slika vezja (zgornji del).

…in spodnji del:

BlueSensor - slika vezja (spodnji del).

BlueSensor – slika vezja (spodnji del).

Še prikaz ujemanja elementov z vezjem:

BlueSensor: slika vezja z elementi.

BlueSensor: slika vezja z elementi.

Sledi izdelava tiskanega vezja (jedkanje), nato pa bomo že lahko sestavili prvo napravo.

Projekt BlueSensor

Z Arduinom se je seveda mogoče lotiti tudi kakšnih bolj naprednih projektov. Tokrat si bomo pogledali projekt izdelave senzorja za merjenje nekaterih okoljskih parametrov.

Projekt je še v teku, zato zgolj grob opis in njegov trenutni status. Cilj projekta je izdelava senzorske naprave, ki bi merila temperaturo, vlago in strupene oz. škodljive pline v okolju. Naprava ali več njih naj bi podatke preko Bluetooth povezave pošiljale na spletni strežnik, ki bo risal grafe trenutnih vrednosti.

Spletni strežnik bo v bistvu kar Wifi dostopna točka (Access Point), ki bo preko Bluetooth povezave zbirala podatke iz več senzorjev in jih preko spletnih tehnologij servirala odjemalcem (računalnikom, telefonom, tablicam), ki se bodo nanjo povezali preko Wifi povezave.

Strojna oprema, ki jo potrebujemo za izdelavo senzorske naprave je naslednja:

  • Arduino Nano (z USB kablom);
  • Bluetooth modul HC-05;
  • senzor za temperaturo in vlago DHT22 (AM2302);
  • MQ senzorji za zaznavo plinov, konkretno senzor za ogljikov monoksid (MQ-7) ter senzor za kvaliteto zraka (MQ-135, ki merijo NH3, NOx, alkohol, benzene, CO2, amoniak, sulfide in podobne hlapljive organske spojine);
  • vodoodporni temperaturni senzor DS18B20 (na kablu);
  • dva 4.7 k Ohm upora;
  • ohišje za 4x AAA baterije;
  • razne malenkosti kot npr. protoboard, Dupont kabli, letvice, konektorji, itd.

Približna cena materiala za posamezno senzorsko napravo (pri Kitajcih) je med 10 in 15 EUR.

BlueSensor: ena izmed zgodnejših različic senzorske naprave.

BlueSensor: ena izmed zgodnejših različic prototipa senzorske naprave.

Dodatno bomo potrebovali še:

  • RaspberryPi 3;
  • napajalnik za RaspberryPi;
  • ohišje za RaspberryPi.

Izdelava posamezne senzorske naprave

Najprej fizično sestavimo eno ali več senzorskih naprav temelječih na Arduinu. Napravo najprej sestavimo na tim. protoboardu (plošči za izdelavo prototipnih vezij). Postopek sestavljanja bomo podrobneje opisali v enem prihodnjih nadaljevanj. V načrtu je sicer tudi izdelava namenskega tiskanega vezja.

Nato sprogramiramo Bluetooth modul in sicer tako, da mu določimo ustrezno ime (SENSOR1, SENSOR2, itd.) ter nastavimo PIN. V naslednjem koraku na Arduino naložimo aplikacijo (strojno programsko opremo) za branje podatkov iz senzorjev in posredovanje teh podatkov preko Bluetooth ali USB povezave.

BlueSensor: zgodnejša različica strojne programske opreme za senzorsko napravo.

BlueSensor: zgodnejša različica strojne programske opreme za senzorsko napravo.

Če je naprava pravilno sestavljena se na napravo najprej povežemo z USB kablom in preverimo ali preko serijske konzole prejemamo podatke. Nato pa se na senzorsko napravo povežemo z Androidnim telefonom s pomočjo aplikacije Bluetooth Terminal HC-05. Če vse deluje, bi morali videti podatke iz senzorjev v tekstovni obliki.

Priprava spletnega strežnika in Wifi dostopne točke

Sledi priprava RaspberryPi dostopne točke in spletnega strežnika. Najprej na RaspberryPi namestimo operacijski sistem Raspbian Jessie, nato pa nanj namestimo ustrezne Python aplikacije za branje podatkov preko Bluetooth povezave in prikaz podatkov v realnem času preko spletne aplikacije (aplikacije so še v razvoju, bodo pa objavljene na spletu). Namestimo še Supervisor s katerim bomo upravljali aplikacijo za zajem podatkov in prikaz na spletu ter Bluetooth naprave uparimo z računalnikom.

BlueSensor: stanje RaspberryPi Wifi dostopne točke.

BlueSensor: stanje RaspberryPi Wifi dostopne točke.

Python aplikacije trenutno sestojijo iz več delov. Glavna je btserver.py, ki zažene spletni strežnik Tornado in pokliče aplikacijo za branje podatkov. Le-te sta dve – ena omogoča branje podatkov preko Bluetooth modula, druga pa preko USB kabla. Pri pisanju te aplikacije sodelujeta Gašper Žejn in Matjaž Rihtar.

Trenutno je aplikacija narejena tako, da jo zaženemo s parametrom, ki pove ID senzorja. Če je ta ID enak npr. 2, potem bo aplikacija poiskala Bluetooth napravo z imenom SENSOR2, hkrati pa bo odprla spletno storitev na vratih 8882, kjer se v realnem času prikazuje graf. V primeru, da je parameter 3, bo naprava poiskala SENSOR3 in podatke prikazovala na vratih 8883. Pristop sicer ni najbolj celovit, je pa enostaven in povsem zadovoljiv za naš namen.

BlueSensor: prikaz grafa v realnem času (prototip).

BlueSensor: prikaz grafa v realnem času (prototip).

V naslednjem koraku RaspberryPi spremenimo v Wifi dostopno točko, ki omogoča povezovanje preko WPA ali WPA2. Ta dostopna točka omogoča deljenje internetne povezave, in sicer preko omrežnega kabla. Za ta amen uporabimo aplikaciji hostapd ter isc-dhcp-server, potrebno pa je tudi nekaj “čaranja” s požarnim zidom iptables.

Trenutno stanje projekta in načrti za naprej

Projekt je trenutno v fazi, da vse zgoraj opisano v grobem že deluje. RaspberryPi Wifi dostopna točka že deluje in omogoča povezovanje odjemalcev preko brezžičnega omrežja preko protokolov WPA ali WPA2. Testno smo sestavili dve senzorski napravi, ki se uparita z RaspberryPi, na katerem za vsako izmed njiju teče spletna aplikacija za prikaz grafov v realnem času. Na spodnji sliki sta vidni obe senzorski napravi in RaspberryPi, na računalniku pa se prikazuje graf za eno izmed teh senzorskih naprav. Ker smo v napravo pred tem spustili plin iz vžigalnika, se vidi kako je vrednost koncentracije plina na grafu praktično takoj močno poskočila.

BlueSensor: dva senzorska sistema in RaspberryPi.

BlueSensor: dva senzorska sistema in RaspberryPi.

V naslednjih korakih bo potrebno postoriti še nekaj malenkosti.

  • Do konca je potrebno razviti načrt tiskanega vezja in na to tiskano vezje prispajkati posamezne elemente senzorske naprave. To bo narejeno tako, da bodo na tiskano vezje prispajkane letvice na katere se bo potem nataknilo posamezne elemente (Arduino, senzorje, Bluetooth modul), pa se bo nato samo nataknilo na vezje. Vodoodporne temperaturne senzorje bo mogoče priklopiti s pomočjo posebnih konektorjev. Napravo bo tako mogoče brez spajkanja hitro sestaviti ali razstaviti na osnovne dele.
  • Na RaspberryPi napravi bo potrebno postaviti lokalni DNS strežnik, da bo spletna storitev enostavneje dostopna. Pri povezovanju Androidnih naprav v določenih okoliščinah prihaja do nenavadnih težav (opisali jih bomo v enem prihodnjih prispevkov), te težave pa bo verjetno rešila in postavitev DNS strežnika na napravi.
  • Rešiti bo potrebno težave s samodejnim zaganjanjem spletne storitve ob zagonu RaspberryPi ali pa narediti spletni vmesnik za preprosto priklapljanje in odklapljanje posameznih senzorskih naprav iz sistema.
  • Polepšati bo potrebno grafe (prikaz legende, opisa osi, itd.).
  • Še največji zalogaj pa bo verjetno predstavljala umeritev senzorjev ter izračun koncentracije plinov (v ppm) iz trenutnega odčitka iz senzorja.
  • Na dolgi rok se bodo podatki morda shranjevali v bazo ali celo na SD kartico, ki jo bo mogoče vstaviti na samo senzorsko napravo.

Za konec pa še na kratko o tem, čemu je naprava pravzaprav namenjena. Napravo bo sicer mogoče uporabiti kot poceni sistem za nadzor kvalitete zraka v stanovanju ali hiši. Zaradi nizke cene izdelave, bi lahko posamezno senzorsko napravo namestili v vsako sobo. Naprava bi tako merila temperaturo in vlago v prostoru, kvaliteto zraka in prisotnost nevarnega ogljikovega monoksida, dodatni temperaturni senzorji na kablu pa se lahko povežejo na radiator ali merijo zunanjo temperaturo.

V resnici pa je naprava trenutno namenjena otrokom (osnovnošolcem), ki se bodo konec meseca udeležili poletne šole eksperimentalne kemije na Institutu Jožef Stefan. Cilj je izdelati 5 senzorskih naprav, ki jih bodo otroci uporabili za poskuse (uporabljeni bodo senzorji za različne pline, tudi za vodik, LPG, butan, itd.). Čisto na začetku pa bodo otroci napravo tudi sami sestavili (zato bodo uporabljene letvice) ter si ogledali kako se nanjo naloži strojna programska oprema, sledila pa bo njena praktična uporaba.

Vsaka skupina osnovnošolcev se bo namreč lahko s pomočjo računalnika, telefona ali tablice povezala na RaspberryPi dostopno točko ter v živo gledala graf meritev iz svoje senzorske naprave ob izvajanju kemijskih poskusov.

Tak je trenutni cilj, in če bo naročeni material pravočasno prispel, ga bomo gotovo tudi dosegli.

Arduino kot učno okolje

Arduino je mikrokrmilnik na matični plošči. Preprosto povezano, gre za mini “računalnik”, zgrajen okrog preprostega procesorja, s katerim je mogoče krmiliti zunanje naprave, senzorje, itd.

Okrog Arduina se je zgradila močna skupnost, saj je strojna oprema Arduino izdelkov odprtokodna, na spletu pa je na voljo množica primerov, ki omogočajo učenje. Eden osnovnih namenov Arduina je namreč učenje, zato je Arduino poleg RaspberryPi postal eden pomembnejših učnih pripomočkov za otroke, mladino in tudi odrasle. Arduino je seveda mogoče uporabiti tudi za povsem resne projekte, tako za izdelavo prototipov, kot tudi za končne izdelke, kitajski kloni Arduino naprav pa so cenovno izredno dostopni.

Z Arduinom lahko sami oz. skupaj z otroci na hitro naredimo “pametno” igračo, pri čemer sama igrača ni tako pomembna, pomembno je, kako otroci sodelujejo pri njenem nastajanju.

Poleg same Arduino naprave (oziroma njenega klona), potrebujemo še programsko opremo, ki omogoča njeno programiranje. Programska oprema (Arduino IDE) je brezplačno na voljo na spletu. Za izdelavo “možička, ki igra”, smo uporabili kitajsko različico Arduino Nano s procesorjem ATmega328. Preko spleta ga je mogoče dobiti za okrog 2 EUR.

Programiranje v Arduino IDE.

Programiranje v Arduino IDE.

Na ploščo mikrokrmilnika priključimo piezo piskač (cena je okrog 1 EUR) ter 4 AAA baterije. Namesto piezo piskača lahko uporabimo tudi star zvočnik (npr. iz odpadnega računalnika). Piezo piskač priklopimo na nožice GND in D8, vir napetosti (baterije) pa na GND in VIN. Vmes vežemo še stikalo, s katerim bomo napravo vključili in izključili. Za vezavo uporabimo tim. dupont kable, ki jih preko spleta naročimo za drobiž. Celoten strošek strojne opreme je med 3 in 5 EUR, porabljen čas pa dobre pol ure.

Arduino Nano.

Arduino Nano.

Nato Arduino preko USB povežemo na računalnik, v Arduino IDE nastavimo kateri tip naprave je povezan in preko katerega serijskega vmesnika ter odpremo projektne datoteke.

Za igranje preproste glasbe potrebujemo program, ki ga prevedemo in naložimo na procesor. Primer programa:

// Igraca, ki igra melodijo.
// Naprava: Arduino Nano, ATmega328
//
// Priklop:
// - piezzo piskac priklopi na GND in D8
// - 4 x 1.5 V baterije (AAA) priklopi na GND in VIN

#include "pitches.h"
#define NO_SOUND 0 // pavza


// Melodija (Beverly Hills Cop)
int melody[] = { NOTE_D4, NO_SOUND, NOTE_F4, NOTE_D4, NO_SOUND, NOTE_D4, NOTE_G4, NOTE_D4, NOTE_C4, NOTE_D4, NO_SOUND, NOTE_A4, NOTE_D4, NO_SOUND, NOTE_D4, 
 NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_D4, NOTE_A4, NOTE_D5, NOTE_D4, NOTE_C4, NO_SOUND, NOTE_C4, NOTE_A3, NOTE_E4, NOTE_D4, NO_SOUND };

int noteDurations[] = { 8, 8, 6, 16, 16, 16, 8, 8, 8, 8, 8, 6, 16, 16, 16, 8, 8, 8, 8, 8, 8, 16, 16, 16, 16, 8, 8, 2, 2 };

void setup() {
}

void loop() {
 // iterate over the notes of the melody:
 for (int thisNote = 0; thisNote < sizeof(melody)/2; thisNote++) {
 // izracunaj trajanje note
 
 int noteDuration = 1000 / noteDurations[thisNote];
 tone(8, melody[thisNote], noteDuration);
 
 // za vsako noto dodaj majhno pavzo, da se note ločijo med sabo
 // trajanje note + 30% deluje v redu:
 int pauseBetweenNotes = noteDuration * 1.30;
 delay(pauseBetweenNotes);
 
 // prenehaj z igranjem note
 noTone(8);
 }
 
 // pocakaj 15 sekund in ponovi igranje
 delay(15000);
}

Poleg programa potrebujemo še definicije tonov, ki so shranjene v datoteki pitches.h. Zgornja programska koda zaigra (oziroma odpiska) uvodne takte melodije iz filma Beverly Hills Cop, nato pa počaka 15 sekund (ukaz delay(15000)) in ponovi vajo.

V nekoliko razširjeni aplikaciji je na voljo nekaj več pesmi (pred nalaganjem je treba pravo pesem odkomentirati), če pa napravo preko serijske konzole povežemo z računalnikom, program izpiše še koliko not ima pesem, ki se predvaja.

Sledi seveda izdelava ohišja, za kar smo uporabili kar odpaden tulec kuhinjskega papirja.

 

Tehnična osnova igrače.

Tehnična osnova igrače.

“Igračo” še pobarvamo, ji dodamo iz kartona izrezano kitaro, in izdelek je narejen.

Končni izdelek.

Končni izdelek.

Z nekaj več truda bi lahko dodali še en gumb (tipko), s katerim bi izbirali med vnaprej pripravljenimi pesmimi. Lahko pa za pol evra kupimo nosilec SD kartic in s pomočjo Arduina izdelamo MP3 predvajalnik.

Primerov preprostih aplikacij za Arduino je namreč na spletu ogromno, in tudi če ne znamo programirati, so primeri večinoma tako dobro dokumentirani in preprosti, da jih zlahka prilagodimo za svoje potrebe.

Ali pa se jih lotimo skupaj z otroci.