Vrei să-ți construiești propriul robot? Iată pașii pentru construirea unui robot simplu

5 proiecte Robo Cool pe care le poți face cu Arduino

Roboții și lumea artificială există deja în lumea noastră. Poate că nu îi vedem astăzi, încă, în mod direct, dar ei deja lucrează cu și pentru noi. Roboții ne influențează deja prezentul, dar mai ales ne vor influența viitorul. Se „hrănesc” cu date și informații pe care noi le oferim și își vor avea locul pe internet, în birouri, în fabrici, în știință și divertisment, în spitale și chiar în școli. 

Inginerul din tine își dorește să construiască propriul robot? Ne-am propus să-ți dăm o mână de ajutor și să-ți oferim pașii pentru construirea unui robot simplu, un robot explorator, un fel de Curiosity, doar că nu pe Marte, ci în propria ta cameră. Poți face un robot complet din componente analogice sau poți cumpăra un kit de robotică de pornire. Companii precum Lego oferă truse prefabricate, destinate copiilor și profesorilor, care să-i ajute în procesul de învățare și predare, dar noi credem că cel mai bine vei învăța construind singur un robot adevărat.

Continue reading

Let’s PI: Zero to IoT

Apariția Raspberry Pi Zero a făcut disponibile funcționalitățile familiei Raspberry Pi la o dimensiune și un cost mult mai mici. La jumătatea dimensiunii unei plăci obișnuite Raspberry Pi, varianta Zero oferă un microprocesor BCM2835 la 1GHz frecvență de funcționare, 512MB memorie RAM, ieșire video mini HDMI, port micro USB OTG, conector cameră și toate facilitățile oferite de sistemul de operare Raspbian.

Singura problemă pentru a utiliza această variantă a plăcii Raspberry Pi este conectivitatea de rețea. Fără a apela la versiunea Zero W, ce oferă conectivitate WiFi, putem utiliza placa Raspberry Pi Zero în proiecte IoT fără nici un fel de problemă. Este recomandată achiziționarea unui kit ce include adaptoarele HDMI – mini HDMI și micro USB OTG – USB precum și bareta de pini deoarece ele sunt absolut necesare în utilizarea plăcii Raspberry Pi Zero. Pentru punerea în funcțiune mai sunt necesare și un card microSD pentru sistemul de operare, se recomandă un card de calitate, și un alimentator de 5V.

După copierea imaginii sistemului de operare pe cardul de memorie avem următoarele opțiuni pentru interacțiunea cu placa Raspberry Pi Zero:

  • Conectăm placa la un monitor cu intrare HDMI (prin intermediul adaptorului mini HDMI – HDMI) și la o tastatură USB (prin intermediul adaptorului micro USB – USB). Această variantă de utilizare ne permite utilizarea plăcii de dezvoltare dar nu oferă nici o facilitate de conectare la Internet.
  • Conectăm, prin intermediul adaptorului micro USB – USB, o placă de rețea USB. Interacțiunea cu placa Raspberry Pi Zero se va face în linie de comandă prin intermediul protocolului SSH (utilizând programul PUTTY de exemplu). Majoritatea plăcilor de rețea, mai ales cea indicată, vor fi văzute în mod automat de sistemul de operare Raspbian și nu vor necesita nici o operație de instalare / configurare suplimentară. Pentru a activa serviciul SSH încă de la prima pornire a plăcii este necesară creare unui fișier gol cu numele ssh pe cardul pe care copiem sistemul de operare (a se vedea și „Enable SSH when creating SD card”). Bineînțeles, se poate utiliza un adaptor de rețea WiFi în locul celui Internet dar probabilitatea ca acest tip de adaptoare să necesite operații suplimentare de instalare / configurare este mai mare, cu alte cuvinte nu ne vom putea conecta din prima la placă fără tastatură și monitor.
  • Este posibilă combinarea celor două soluții anterioare dar este necesară utilizarea unui hub USB – placa de dezvoltare are un singur port USB OTG și este necesară conectarea tastaturii și a adaptorului de rețea. Este o soluție ce complică destul de mult utilizarea plăcii, este de preferat achiziționarea unei plăci Raspberry Pi 3.

Vom exemplifica realizarea sistemului IoT utilizând cea de a doua opțiune: placa Raspberry Pi Zero, adaptor micro USB – USB și placă de rețea USB. Ca serviciu IoT vom utiliza serviciul gratuit Robofun IoT iar datele raportate vor proveni de la un senzor digital de temperatură și umiditate SHT11. Conectarea dintre senzorul digital și placa de dezvoltare se face în felul următor:

3

Senzorul se va alimenta la 3.3V, pinul SCK se va conecta la pinul 23 iar pinul DAT la pinul 18. Pentru configurarea și scrierea programului IoT ne vom conecta la placa Raspberry Pi Zero prin SSH utilizând Putty. Este recomandată aducerea la zi a pachetelor software:

# sudo apt-get update

# sudo apt-get upgrade

Programul va fi scris în limbajul Python și va utiliza biblioteca pi-sht1x, pentru instalarea acesteia vom executa:

# sudo apt-get install python3-pip

# pip3 install pi-sht1x

Testele au fost realizate sub Raspbian 9, kernel 4.14.34+, Python 3.5.3 și pi-sht1x 1.0.9. Programul utilizat este următorul (PiZeroIoT.py):

import RPi.GPIO as GPIO

from pi_sht1x import SHT1x

import urllib.request

DATA_PIN = 18

SCK_PIN = 23

with SHT1x(DATA_PIN, SCK_PIN, gpio_mode=GPIO.BCM) as sensor:

temp = sensor.read_temperature()

humidity = sensor.read_humidity(temp)

SENSOR1_TOKEN="…"

SENSOR2_TOKEN="…"

urllib.request.urlopen("http://iot.robofun.ro/api/v1/senzor/"+SENSOR1_TOKEN+"/input?value="+str(temp)).read()

urllib.request.urlopen("http://iot.robofun.ro/api/v1/senzor/"+SENSOR2_TOKEN+"/input?value="+str(humidity)).read()

Variabilele SENSOR1_TOKEN și SENSOR2_TOKEN trebuie completate cu datele obținute în urma definirii a doi senzori în cadrul platformei Robofun IoT. Pentru a executa programul în mod automat la anumite intervale de timp vom crea o intrare în fișierul de configurare a serviciului cron (/etc/crontab) de forma (execuție la 10 minute):

*/10 *  * * *   pi      python3 /home/pi/PiZeroIoT.py

După repornirea sistemului, fără a ne conecta la placă, programul se va executa în mod automat și vom putea vedea graficele pentru temperatură și umiditate în interfața serviciului IoT:

4

5

Cum să realizăm un repetor WiFi utilizând ESP8266

Dispozitivele de tip repetor sau amplificator WiFi (WiFi Repeater sau WiFi Extender) sunt utilizate pentru a crește aria de acoperire a rețelelor WiFi. În case sau clădiri de dimensiuni mai mari un singur dispozitiv de acces WiFi, oricât de performant ar fi, este greu să asigure semnal radio WiFi pe toată aria. Utilizarea mai multor dispozitive de acces WiFi independente ridică probleme destul de mari de administrare de rețea și de management a datelor de acces. Soluția mult mai simplă și mai ieftină este utilizarea dispozitivelor de tip repetor WiFi. Aceste dispozitive sunt diponibile comercial la prețuri variate și cu funcționalități și perfomanțe diverse. Totuși, dorim să vă propunem realizarea unui astfel de dispozitiv într-o manieră personală (și extrem de ieftină) utilizând o placă de dezvoltare bazată pe circuitul WiFi ESP8266. Acest circuit are marele avantaj de a putea funcționa simultan atât ca AP cât și ca client WiFi permițând implementarea funcționalității de repetor într-o manieră foarte simplă. Testele au fost realizate utilizând o placă de dezvoltare Adafruit Feather HUZZAH dar la fel de bine pot fi utilizate plăci precum NodeMCU, Sparkfun ESP8266 Thing sau chiar ESP-01.

Pentru a implementa funcționalitatea de repetor WiFi vom utiliza pachetul software esp_wifi_repeater. Pachetul poate fi modificat și recompilat după propriile dorințe înainte de încărcarea pe placa de dezvoltare dar pentru început se pot utiliza fișierele binare oferite de dezvoltatori pachetului (fișierele 0x00000.bin, 0x10000.bin și esp_init_data_default_v08_vdd33.bin din directorul firmware). Pentru încărcarea fișierelor binare se va utiliza utilitarul ESP8266 DOWNLOAD TOOL. După copierea utilitarului și a fișierelor binare pe calculatorul local se poate trece la încărcarea acestora în memoria plăcii. Înainte de apăsarea butonului START aveți grijă să completați adresele de încărcare a fișierelor binare, să selectați portul serial pe care este conectată placa de dezvoltare și, specific plăcii Adafruit Feather HUZZAH, să selectați dimensiunea memoriei flash 32Mbit.

3

După încărcarea în memorie a software-ului putem verifica inițializarea corectă a dispozitivului repetor WiFi cu ajutorul unui utilitar de conectare pe serială (de exemplu Putty). Viteza de conectare serială este 115200 baud.

4

Cea mai simplă modalitate de configurare a acestuia este prin intermediul interfeței web. Dispozitivul se poate configura și prin consola serială sau printr-o conexiune telnet pe portul 7777 dar aceste modalități sunt puțin mai dificile. Pentru a accesa interfața web este necesar să ne conectăm la AP-ul creat de dispozitiv (MyAP) și să accesăm adresa 192.168.4.1.

5

Conectarea la AP-ul dispozitivului se poate observa imediat în consola serială:

6

Interfața web de configurare permite introducerea datelor de acces a rețelei WiFi a cărui semnal dorim să-l extindem ca arie de acoperire (STA Settings) și datele de acces ale noului punct de acces (AP Settings). La finalizarea configurării dispozitivului vom putea face diferența între AP-ul inițial și noul AP (AP-ul repetor) deoarece vor avea denumiri și date de acces diferite. Performanțele oferite de AP-ul bazat pe circuitul ESP8266 nu sunt spectaculoase (maxim 8 clienți și rată de transfer de maxim 5Mbps) dar oferă o modalitate de extindere a ariei de acoperire WiFi extrem de simplă și ieftină. Aceaste dispozitive repetoare WiFi pot fi utilizate pentru rețele IoT sau pentru extinderea semnalului WiFi în spații deschise (parcele mari de teren de exemplu).

7

Dacă dorim ca repetorul WiFi să fie transparent (să nu definim un nou AP cu nume și date de acces proprii) se poate bifa opțiunea Automesh. În acest caz nu mai este necesar să completăm informațiile din secțiunea AP Settings – dispozitivul repetor va propaga semnalul WiFi sub numele rețelei WiFi originale (și datele de conectare vor fi identice). Facilitatea de Automesh permite crearea unei rețele de repetoare WiFi cu până la 5 niveluri permițând extinderea ariei de acoperire într-o manieră impresionantă.

8

Dacă apelăm la configurarea în consolă a dispozitivului repetor WiFi putem accesa funcții avansate implementate în pachetul software utilizat (a se vedea documentația oficială). Printre aceste funcții putem enumera:

  • Configurarea statică a setărilor pentru interfețele de rețea;
  • Definirea de rute (routes) personalizare – facilități de rutare avansată;
  • Definirea de reguli de dirijare a traficului (ACLs) – facilități de firewall;
  • Redirecționarea unor porturi – port mapping;
  • Facilități de raportare prin intermediul protocolului MQTT;

Controlul consumului – dacă tensiunea de alimentare scade sub un anume prag putem configura dispozitivul să intre într-o stare de consum redus.

Managementul conexiunii WiFi la ESP8266

Circuitul WiFi Espressif ESP8266 a reprezentat o evoluție importantă în universul plăcilor de dezvoltare în general dar și a comunității Arduino. Permițând conectivitate WiFi la un preț derizoriu și ușurință de programare și utilizare în cadrul sistemelor DIY, ESP8266 are o popularitate și o răspândire din ce în ce mai mare echipând plăci de dezvoltare diverse.

Facilitățile oferite de extensia ESP8266 pentru Arduino IDE includ conectarea la Internet prin intermediul unui AP, activarea ca un AP, funcționarea duală client WiFi și AP, utilizarea protocoalelor http și https, funcționarea ca server web sau server DNS ș.a.m.d. Toate aceste facilități oferite de circuitul ESP8266 fac din acesta un instrument extrem de util în cadrul proiectelor proprii. Una dintre problemele care apare totuși la construirea unui dispozitiv bazat pe circuitul ESP8266 este managementul datelor de conectarea la rețea. Dacă se dorește schimbarea datelor de acces la rețeaua WiFi (mutăm dispozitivul în altă locație sau modificăm infrastructura de acces la Internet) dispozitivul trebuie reprogramat. Chiar dacă luăm în calcul programarea OTA tot este necesară utilizarea unui sistem de calcul (PC sau laptop cu Arduino IDE instalat) pentru a modifica datele de acces (SSID și parolă).

Bineînțeles, este posibilă programarea unei interfețe web care să permită modificarea variabilelor corespunzătoare datelor de acces dar acest lucru este destul de consumator de timp și adaptarea codului pentru proiecte diverse este o sarcină repetitivă destul de anevoioasă. Din fericire există o bibliotecă software ce permite automatizarea acestui proces și ușurează foarte mult dezvoltarea noilor proiecte în care avem nevoie de modificarea parametrilor de funcționare fără a reprograma dispozitivul.

Această bibliotecă se numește WiFiManager și permite configurarea, prin intermediul unei interfețe web, a conexiunii WiFi în cazul în care configurarea implicită nu funcționează (interfața web de configurare se activează doar în cazul în care conectarea la rețea nu este posibilă cu datele de autentificare curente). Instalarea bibliotecii se face din Library Manager a mediului Arduino IDE. Testele au fost realizate pe o placă NodeMCU utilizând Arduino IDE 1.8.5 și extensia ESP8266 Community 2.4.1.

2

După instalarea bibliotecii facilitățile de configurare se includ în program inserând în cod secvențele următoare. La începutul programului se include biblioteca WiFiManager și dependințele acesteia:

#include <ESP8266WiFi.h>

#include <DNSServer.h>   

#include <ESP8266WebServer.h> 

#include <WiFiManager.h>

WiFiManager wifiManager;

În cadrul secțiunii setup() se înlocuiește codul obișnuit de conectare cu instrucțiunea:

wifiManager.autoConnect();

Execuția acesteia va conduce la conectarea la rețea dacă procesul de configurare a fost deja parcurs sau la blocarea programului și la pornirea interfeței de configurare web. Aceasta va fi accesibilă prin intermediul unui AP propriu sistemului, AP denumit ESPXXXXXX, la adresa IP 192.168.4.1 .

3

Interfața web permite configurarea și salvarea rețelei în care va funcționa dispozitivul, vizualizarea informațiilor hardware specifice plăcii de dezvoltare și resetarea acesteia.

4

5

Dacă conectivitatea de rețea nu este esențială în funcționarea dispozitivului – dispozitivul trebuie să funcționeze și fără conexiunea de rețea – putem adăuga următoarea instrucțiune pentru a defini un timp în care se așteaptă configurarea după care se trece mai departe la execuția normală a programului.

wifiManager.setConfigPortalTimeout(180);

În cazul în care dorim totuși să reluăm periodic tentativa de conectare la rețea, utilă de exemplu în cazul în care repornirea sistemului coincide cu indisponibilitatea AP-ului – datele de conectare sunt corecte dar în momentul în care se încearcă conectarea nu este disponibilă infrastructura, se poate insera o secvență de instrucțiuni, ca în exemplul de mai jos, în secțiunea loop():

if (WiFi.status() != WL_CONNECTED) wifiManager.autoConnect();

Pagina web de configurare poate fi pornită și în mod voit (la apăsarea unui buton de exemplu) prin intermediul instrucțiunii:

wifiManager.startConfigPortal();

O altă facilitate interesantă oferită de bibliotecă este posibilitatea de a adăuga în cadrul paginii de configurare a unor parametrii proprii ce vor fi salvați în memoria nevolatilă a circuitului ESP8266. Instrucțiunile de mai jos definesc o variabilă server ce permite memorarea adresei de rețea a unui server MQTT. Datele de configurat vor apărea în interfața web alături de configurația de acces în rețeaua WiFi.

WiFiManagerParameter custom_mqtt_server(“server”, “mqtt server”, mqtt_server, 40);

wifiManager.addParameter(&custom_mqtt_server);

mqtt_server = custom_mqtt_server.getValue();

6

Arduino Zombification

În ciuda simplității modului de programare oferit de mediul Arduino IDE și de familia de plăci Arduino există implementată o soluție ce permite utilizarea plăcilor de dezvoltare Arduino ca simple periferice USB fără a fi nevoie a înțelege modul de funcționare și programare a acestora. Prin încărcarea unui program gata scris placa Arduino se transformă într-un echipament „zombie” ce execută instrucțiunile primite prin conexiunea USB conform unui protocol standard.

Protocolul de zombificare a unei plăci Arduino se numește Firmata și este integrat ca suport software (bibliotecă + exemple) în Arduino IDE. Pentru instalare și utilizare puteți consulta materialul „Arduino: Installing Standard Firmata”. După încărcarea exemplului StandardFirmata.ino pe orice placă de dezvoltare Arduino, aceasta se va comporta ca un periferic USB pe care îl putem accesa de pe un sistem de calcul (PC sau chiar Raspberry Pi). Accesul intermediat de protocolul Firmata face disponibile toate perifericele hardware ale plăcii de dezvoltare (pini I/O, convertor analog/numeric, magistrale I2C, SPI, pini de comandă PWM) programelor ce rulează pe sistemul de calcul la care este conectată placa. Biblioteca Firmata oferă exemple pentru majoritatea limbajelor de programare: .NET, Java, Perl, Python, PHP, Processing, Flash etc. Firmata reprezintă o soluție extrem de simplă pentru extinderea funcționalităților unei plăci Raspberry Pi prin conectarea la o placă Arduino (a se vedea și proiectul „Access GPIO of Arduino from Raspberry Pi”).

2

Versiunile recente ale bibliotecii Firmata extind posibilitatea de zombificare și a altor plăci precum ChipKIT (exemplul din bibliotecă: StandardFirmataChipKIT.ino) dar și utilizând alte modalități de interconectare între placa de dezvoltare și sistemul de calcul:

  • Utilizând exemplul ino putem utiliza de la distanță o placă Arduino prin intermediul unei conexiuni bluetooth. Exemplul funcționează pe plăci ce integrează modul de comunicație BLE (de exemplu Arduino 101) sau pe orice placă Arduino cu un modul BLE atașat (de exemplu Adafruit Bluefruit nRF8001).
  • Exemplul ino permite, bineînțeles, controlul de la distanță prin intermediul unei conexiuni WiFi. Este posibilă utilizarea mai multor tipuri de plăci precum Arduino MKR1000 sau plăci de dezvoltare bazate pe circuitul ESP8266 (de exemplu Adafruit Feather HUZZAH). Această variantă de zombificare este utilizată de multe limbaje de control la distanță precum Gobot [13] sau Johny-Five.

3

O altă formă de zombificare prin intermediul unei conexiuni WiFi este oferită de placa de dezvoltare Arduino Yun. Există două variante de control la distanță a perifericelor integrate în microcontrolerul ATmega32U4 aflat pe placa de dezvoltare:

  • Prin intermediul serviciilor web de tip API REST adică prin intermediul unor URL-uri ce pot accesa diverse resurse hardware ale microcontrolerului. Acestea pot fi configurate astfel încât accesul să fie protejat de o parolă. Accesând IP-ul plăcii și calea /arduino putem configura, de exemplu, pinii I/O (pe Arduino Yun vom avea încărcat exemplul ino al bibliotecii Bridge):

4

http://myArduinoYun.local/arduino/digital/13 : calls digitalRead(13);

http://myArduinoYun.local/arduino/digital/13/1 : calls digitalWrite(13,1);

http://myArduinoYun.local/arduino/analog/9/123 : analogWrite(9,123);

http://myArduinoYun.local/arduino/analog/2 : analogRead(2);

http://myArduinoYun.local/arduino/mode/13/input : pinMode(13, INPUT);

http://myArduinoYun.local/arduino/mode/13/output : pinMode(13, OUTPUT);

  • Ultimele versiuni de plăci Arduino Yun ce rulează LininoOS permit programarea automată a microcontrolerului ATmega32U4 si utilizarea acestuia ca un periferic sub sistemul de operare. Programarea se face cu ajutorul comenzii:

/usr/bin/lininoio start

5

Utilizarea perifericelor se poate face direct din script bash:

echo 1 > /sys/class/gpio/TXLD/value

sau din alte limbaje de programare, de exemplu Node.JS:

var board = new require(‘ideino-linino-lib’).Board();

var led = 1;

board.connect( function(){

    board.pinMode(“D13”, “OUTPUT”);

    setInterval(function(){

        board.digitalWrite(“D13”, led);

        led = 1 – led;

    },500);

});

O soluție de zombificare pentru plăcile de dezvoltare echipate cu circuitul ESP8266 este ESPEasy. Prin încărcare acestui software pe o placă bazată pe ESP8266 vom putea configura foarte simplu atât partea de conectivitate WiFi (credențialele de acces la Internet) cât și perifericele conectate precum și rolul îndeplinit de sistem (configurare conexiune servicii IoT sau Home Automation) – totul prin intermediul unei interfețe web foarte simple.

6

7

Sistem antifurt pentru cadourile de Crăciun

Securitatea cadourilor de Crăciun este o problemă care ar trebui să preocupe pe toți părinții responsabili. Hoți, persoane răuvoitoare și mai ales personajul malefic Grinch abia așteaptă să distrugă bucuria copiilor din dimineața zilei de Crăciun.

2

Pentru a împiedica acest lucru este absolut necesar ca toate cadourile să fie dotate cu sisteme de siguranță pentru a preveni furtul de sub bradul de Crăciun. În cadrul acestui proiect vă propunem realizarea unui sistem sofisticat care permite declanșarea unei alarme sonore când un cadou este sustras de sub brad.

Sistemul antifurt este bazat pe o placă de dezvoltare Arduino Uno ce are conectate un mini difuzor brick și un senzor magnetic brick. Mini difuzorul este utilizat pentru a genera sunetul de alarmă iar senzorul magnetic pentru a sesiza dacă cadoul a fost mișcat. Pentru a sesiza mișcarea / mutarea cadoului acesta trebuia să aibă integrat un mic magnet. Mișcarea magnetului este sesizată de senzorul magnetic Hall și semnalizată plăcii de dezvoltare ce declanșează alarma sonoră.

3

Mini difuzorul se va conecta la pinul digital 8 al plăcii de dezvoltare și la pinul de GND. Generarea sunetului de alarmă se va face utilizând funcția tone() din mediul Arduino IDE.

Senzorul magnetic brick se conecta la 5V și GND iar ieșirea (OUT) se va conecta la pinul digital 2 al plăcii de dezvoltare. Ieșirea senzorului va fi ”1” (adică 5V) dacă nu detectează un magnet în apropiere sau ”0” (adică 0V) dacă un magnet se află în imediata apropiere.

4

Schema de interconectare între cele trei componente este următoarea:

5

Programul a fost dezvoltat și testat utilizând mediul Arduino IDE 1.8.3.

#define hallPin 2

#define buzzerPin 8

void setup() {

  pinMode(hallPin,INPUT);

  pinMode(buzzerPin, OUTPUT);

}

void loop() {

  boolean alarma;

  alarma = digitalRead(hallPin);

  if (!alarma) tone(buzzerPin,1000);

  else noTone(buzzerPin);

  delay(5000);

}

După încărcarea programului pe placa de dezvoltare și instalarea sistemului antifurt sub cadou, în cazul în care se îndepărtează cadoul de pe sistemul antifurt se va declanșa alarma sonoră ce va zădărnici tentativa de furt.

În cazul în care dorim să micșorăm dimensiunea sistemului antifurt putem înlocui placa de dezvoltare Arduino Uno cu o placă Arduino Pro Mini. În plus putem alimenta sistemul de la o baterie de 9V și pentru a prelungi durata de funcționare vom configura microcontrolerul să funcționeze în regim de consum redus. Noua schemă de interconectare este:

6

Programul a fost realizat și testa utilizând mediul Arduino IDE 1.8.3 și biblioteca LowPower.

#include “LowPower.h”

#define wakeUpPin 2

#define buzzerPin 8

void setup() {

  pinMode(wakeUpPin,INPUT);

  pinMode(buzzerPin, OUTPUT);

}

void wakeUp(){ }

void loop() {

  attachInterrupt(0, wakeUp, HIGH);

  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);

  detachInterrupt(0);

  while (digitalRead(wakeUpPin)==1) {

    tone(buzzerPin,1000);

    delay(1000);

  }

  noTone(buzzerPin);

}

Spre deosebire de programul anterior, sistemul antifurt va funcționa în mod de consum redus. Declanșarea senzorului magnetic (mișcarea cadoului de pe sistemul antifurt) va declanșa o întrerupere ce va trezi microcontrolerul și va porni alarma sonoră. Dacă cadoul este pus la loc alarma va înceta.

Proiect Noise-o-Meter IoT

Zgomotul este un factor de stres la fel de puternic ca și căldura, suprasolicitarea sau evenimentele cu impact emoțional dar de cele mai multe ori este ignorat și încadrat în „normalitatea” urbană cotidiană. Cât de mult ne afectează zgomotul înconjurător? Depinde de nivelul de zgomot la care suntem expuși. Cum putem evalua zgomotul din jurul nostru? Aparatele profesionale de măsurat puterea sunetelor sunt destul de scumpe și nu oferă o evaluare pe termen lung. În cadrul acestei lecții prezentăm implementarea unui sistem de măsură a nivelului de zgomot ambiental care, cu ajutorul serviciilor IoT, va permite evaluarea pe termen lung a acestui factor de stres.

Sistemul va utiliza placa de dezvoltare Arduino Leonardo ETH și un modul breakout cu microfon pentru achiziția nivelului de zgomot. Schema de interconectare este următoarea:

schema_bb

Modulul breakout se va alimenta la 3.3V (pinul VCC al modulului se va conecta la pinul 3.3V al plăcii de dezvoltare, pinul GND la pinul GND) și ieșirea analogică a modulului, pinul AUD, se va conecta la pinul de achiziție analogică A0 al plăcii de dezvoltare.

Pentru mai multe detalii despre utilizarea modulului breakout puteți consulta și materialul „Electret Mic Breakout Board Hookup Guide”. Pentru punerea în funcțiune și utilizarea plăcii de dezvoltare Arduino Leonardo ETH puteți consulta materialul „Start with Arduino Leonardo ETH”.

Placa de dezvoltare va realiza partea de achiziție a nivelului de zgomot și va trimite valorile, prin intermediul rețelei Internet, către serviciul Robofun IoT. Serviciul Robofun IoT este un serviciu gratuit ce permite stocarea datelor și vizualizarea evoluției acestora. Serviciul necesită înregistrare (secțiunea Cont nou):

4

După înregistrare și conectare este necesară definirea unui nou senzor (secțiunea Adaugă senzor):

5

După definirea senzorului este necesar să copiem cheia de autentificare (Token) pentru a o utiliza în program.

3

Programul a fost dezvoltat și testat utilizând Arduino IDE 1.8.1 având instalate extensia Arduino AVR Boards 1.6.19 și biblioteca Ethernet2 1.0.4. Pentru ca sistemul să funcționeze este necesară conectarea plăcii Arduino Leonardo ETH la o rețea locală cu servicii DHCP și conectivitate Internet.

#include <SPI.h>

#include <Ethernet2.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetClient client;

char server[] = “iot.robofun.ro”;

const int pinAdc = A0;

În cazul în care placa nu va putea obține configurația de rețea prin DHCP led-ul conectat pe pinul 13 va începe să clipească și programul se va bloca (bucla infinită while(1)) – se va verifica în acest caz conectarea cablului de rețea și se va reseta placa.

void setup() {

      Serial.begin(9600);

      if (Ethernet.begin(mac) == 0) {

        pinMode(13,OUTPUT);

        while(1) {       

         digitalWrite(13,LOW);

         delay(1000);

         digitalWrite(13,HIGH);

         delay(1000);

        }

      }

}

În cadrul secțiunii loop() este necesară completarea cheii de autentificare specifice senzorului definit în cadrul serviciului Robofun IoT (TOKEN).

void loop() {

    float sound = getSound();

    Serial.println(sound);

   String temp = “GET /api/v1/senzor/TOKEN/input?value=” + String(sound) + ” HTTP/1.1″;

    char param[100];

    temp.toCharArray(param,temp.length()+1);

    if (client.connect(server, 80)) {

      client.println(param);

      client.println(“Host: iot.robofun.ro”);

      client.println(“User-Agent: arduino-ethernet”);

      client.println(“Connection: close”);

      client.println();

    }

    client.stop();

}

Funcția getSound() va analiza semnalul analogic transmis de modul pe o perioadă de timp egală cu sampleWindow. Analiza va determina amplitudinea maximă a semnalului (variabila peakToPeak) și va face transformarea din valoare eșantionată (interval 0 – 1024) în tensiune (interval 0 – 3.3).

float getSound(){

   const int sampleWindow = 5000;

   unsigned int sample;

   unsigned long startMillis= millis();

   unsigned int peakToPeak = 0; 

   unsigned int signalMax = 0;

   unsigned int signalMin = 1024;

   while (millis() – startMillis < sampleWindow)   {

      sample = analogRead(pinAdc);

      if (sample < 1024)     {

         if (sample > signalMax)         {

            signalMax = sample;         }

         else if (sample < signalMin)         {

            signalMin = sample;         }

      }

   }

   peakToPeak = signalMax – signalMin;

   float volts = (peakToPeak * 3.3) / 1024.0; 

   return volts;

 }

Evoluția zgomotului ambiental se poate observa local deschizând Serial Plotter din meniul Tools al mediului Arduino IDE (programul raportează și pe serială valorile măsurate) dar supravegherea pe termen lung se va face prin interfața web a serviciului Robofun IoT:

robofun

Atenție!!! Valorile măsurate nu sunt calibrate, nu au o unitate de măsură asociate – nu reprezintă valori in decibeli. Valorile măsurate reprezintă doar o intensitate a zgomotului pe o scară de la 0 la 3.3 dar pot da o imagine destul de bună a variației zgomotului în mediul ambiental.