Nu ești fan 5G? Treci pe wireless homemade cu Robofun!

Generația 1G ne-a permis să vorbim unii cu alții, cu 2G am putut să trimitem mesaje, 3G ne-a oferit date mobile și internet, iar 4G ne-a oferit șansa să facem totul mult mai rapid. Atunci, ce ar putea să aducă rețeaua 5G în plus? Pentru că suntem convinși că aceasta-i întrebarea, ne-am propus să dezbatem subiectul și să punem cap la cap informațiile despre tot ce înseamnă rețeaua 5G. 

Continue reading

Proiecte cu Raspberry Pi: Cum să construiești propriul tău Google Assistant

Ok google, how’s the weather in the weekend? Cu o simplă comandă vocală îi poți cere “asistentului tău” să-ți redea muzică, știrile sau să-ți spună cum va fi vremea pe următoarele zile. Fără să te folosești de ajutorul mâinilor, de la distanță, poți seta alarme, poți controla dispozitive inteligente cum sunt luminile, temporizatorii sau comutatoarele de la sistemele de automatizare ale electrocasnicelor sau îți poți crea lista de cumpărături doar spunând ceea ce trebuie să cumperi. El notează tot. În loc să apeși de foarte multe ori pe ecranul telefonului, poți solicita din voce să se deschidă o anumită aplicație, să afli ce ședință ai în calendar săptămâna viitoare sau să apeleze persoane din agenda telefonului.

Google Assistant îți oferă răspunsuri personalizate și complexe cu ajutorul comenzilor vocale. Cum s-a ajuns în acest punct al dezvoltării inteligenței artificiale și cum îți poți face chiar tu propriul Google Assistant, fără să fie nevoie să te folosești de telefonul mobil, îți spunem pe larg în rândurile ce urmează.

Ce este Google Assistant?

Google Asistent este așa cum îi spune și numele un asistent virtual, dezvoltat de motorul de căutare Google, care se bazează pe inteligența artificială. În sensul larg al cuvântului, Inteligența Artificială (IA) reprezintă orice tehnologie proiectată să imite modul în care se comportă un om. Învățarea mecanică (machine learning) este o parte importantă a inteligenței artificiale și se bazează pe capacitatea computerelor de a re(acționa) în baza cantității uriașe de date pe care le analizează. Exemplu cel mai bun în acest sens sunt chiar asistenții virtuali care pot înțelege comenzile vocale.

Spre deosebire de asistentul virtual anterior, Google Now care oferea răspunsuri în baza unor solicitări vocale clare, Google Assistant se poate angaja în conversații. După o perioadă de exclusivitate pe smartphone-urile Pixel și Pixel XL, din februarie 2017, Google Assistant a fost implementat și pe dispozitivele Android. Mai mult decât atât, Google Assistant a fost extins pentru a interacționa cu o mare varietate de dispozitive, inclusiv cu electrocasnicele inteligente.

Google Assistant este apelat prin voce umană și în urma comenzii posesorului acesta caută pe internet informațiile solicitate, programează evenimentele în calendarul telefonului, setează alarme sau apelează contactele din telefon.

Cum îți poți construi propriul Google Assistant?

În aprilie 2017, a fost lansat un kit de dezvoltare software (SDK) care permite dezvoltatorilor să-și construiască propriul hardware care să poată rula Google Assistant. Google spune că va funcționa bine pe dispozitivele Raspberry Pi 3 și Linux.

Acest kit a fost integrat în plăcile Raspberry Pi din sistemele de comandă vocală ale mașinilor Audi și Volvo, dar și în anumite aparate inteligente de uz casnic, precum frigiderele, mașinile de spălat sau cuptoarele. Practic, șoferul apelează rapid numeroasele funcții de pe volan pentru a gestiona climatizarea și funcțiile de confort.

Proiectele din domeniul Inteligenței Artificiale cu Raspberry Pi sunt în prezent în plină dezvoltare. De fapt, în afară de Google Assistant mai există și alte platforme IA care concurează pentru ca specialiștii să le instaleze cu Raspberry Pi. Aceste platforme sunt Alexa de la Amazon, IBM Watson, Siri de la Apple și altele mai puțin cunoscute.

Toate companiile de software care dezvoltă asistenți virtuali se sprijină pe comunitatea Raspberry Pi pentru a-și dezvolta programele. Această colaborare face posibil ca și Raspberry Pi să dezvolte prototipuri mai rapide pentru dispozitivele IA (Inteligență Artificială) și IoT (Internet of Things), practic să fie mai accesibile pentru specialiști.

Așadar, să trecem la lucru! Mai jos, am adunat practic tot ce este necesar pentru a construi propriul tău Google Assistant cu Raspberry Pi pentru a avea următoarele funcționalități:

  • Google Assistant (cele mai multe funcții, cu excepția redării media pe Pi)
  • Activare vocală / cuvânt cheie: “Hei Google” sau “Ok Google” și adresezi întrebarea
  • Pornirea unui program/serviciu, deci nu trebuie să deschizi manual programul la fiecare repornire.

Deci, pentru a începe proiectul Google Assistant vei avea nevoie de:

  • Raspberry Pi 3
  • Micro card SD (minimum 8 GB) cu Raspbian instalat
  • Microfon USB
  • Un difuzor

Pasul 1: Înregistrarea dispozitivului

Accesează https://console.actions.google.com pentru a-ți înregistra proiectul în Google Console. Intră pe https://console.cloud.google.com  pentru a-ți activa API-ul Google Assistant.

Asigură-te că selectezi proiectul nou creat în panoul de selecție de lângă sigla Platformei Cloud! Apoi, selectează tabul Api&Services și activează-ți api-ul Google Assistant.

Asigură-te că ai activat toate setările https://myaccount.google.com/activitycontrols pentru ca api-ul să funcționeze corect.

După aceea, revino la https://console.actions.google.com pentru a înregistra dispozitivul Raspberry Pi în colțul din dreapta jos al panoului de aplicații. Downloadează fișierul cu credețialele (datele de autentificare) pentru a le putea folosi mai târziu.

Pasul 2. Setarea audio

Notează-ți numerele cardului / dispozitivului audio folosind:

arecord -l
aplay -l

Folosește aceste informații pentru a edita fișierul asoundrc:

nano /home/pi/.asoundrc
pcm.!default {
  type asym
  capture.pcm "mic"
  playback.pcm "speaker"
}
pcm.mic {
  type plug
  slave {
    pcm "hw:<card number>,<device number>"
  }
}
pcm.speaker {
  type plug
  slave {
    pcm "hw:<card number>,<device number>"
  }
}

Poți testa dispozitivul folosind:

speaker-test -t wav
arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw
aplay --format=S16_LE --rate=16000 out.raw
alsamixer

Pasul 3. Instalează Biblioteca Google Assistant

Configurează directoarele în care vom instala mediul virtual:

mkdir ~/googleassistant
nano ~/googleassistant/credentials.json

Vom folosi un spațiu virtual pentru ca spațiul personal să nu devină prea aglomerat. Instalează venv cu:

sudo apt-get install python3-dev python3-venv

Instalează ultima versiune de pip și activează mediul cu:

python3 -m venv env && env/bin/python -m pip install –upgrade pip setuptools –upgrade && source env/bin/activate

Instalează libraria Google Assistant pentru Python:

python -m pip install –upgrade google-assistant-library google-assistant-sdk[samples]

Pasul 4. Autorizează Pi pentru Google Assistant

Instalează instrumentul de autorizare pentru a putea autoriza cu API-ul Google Assistant pe care tocmai l-am activat pentru aplicație:

python -m pip install –upgrade google-auth-oauthlib[tool]

Vei primi un url de autorizare

google-oauthlib-tool --client-secrets ~/googleassistant/credentials.json \
--scope https://www.googleapis.com/auth/assistant-sdk-prototype \
--scope https://www.googleapis.com/auth/gcm \
--save --headless

Este posibil să primești o eroare de autorizare. Pentru a rezolva acest lucru setează în platforma Google Cloud în zona de autentificare Credentials -> OAuth Consent Screen   Asigură-te că ai selectat aplicația ta (Application name)! În momentul în care vei introduce codul de autorizare vei vedea:

credentials saved: /home/pi/.config/google-oauthlib-tool/credentials.json
(env) pi@raspberrypi :~/googleassistant $

Pasul 5. Erorile portului Audio

Este posibil să întâlnești următoarea eroare:

OSError:  PortAudio library not found
(env) pi@raspberrypi :~/googleassistant $

Instalează:

sudo apt-get install libportaudio2

Pentru a preveni pierderea și întârzierea semnalului audio introdu următorul comentariu: /etc/pulse/default.pa

De asemenea, rulează PulseAudio pentru a evita problemele cu Google Assistant:

sudo nano /etc/systemd/system/pulseaudio.service

Adaugă următoarea linie de cod:

[Unit]                      
Description=PulseAudio Sound Server in system-wide mode [Service] 
Type=forking                      
PIDFile=/var/run/pulse/pid                      
ExecStart=/usr/bin/pulseaudio --system --disallow-exit=1 \                       
 --disable-shm=1 --fail=1 --daemonize
[Install]                      
WantedBy=multi-user.target

Activează serviciul și adaugă userul pi grupului pulse-access:
sudo systemctl --system enable pulseaudio.service
sudo adduser pi pulse-access

Dezactivează modulul următor pentru a evita întârzierile audio:

/etc/pulse/default.pa
#load-module module-suspend-on-idle
sudo nano /etc/systemd/system/assistant.service

Pasul 6. Transformă Google Assitant în propriul serviciu personal

Crează un fișier  ~/start_assistant.sh folosind ID-ul modelului de dispozitiv din platforma Google Action:

#!/bin/bash
source /home/pi/googleassistant/env/bin/activate
googlesamples-assistant-hotword --device-model-id <your_device_model_id> 

Fă scriptul executabil:

chmod +x start_assistant.sh

Crează un fișier service în /etc/systemd/system/assistant.service

[Unit]
Description=Google Assistant
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/bin/bash /home/pi/start_assistant.sh
Restart=on-abort
User=pi
Group=pi
[Install]
WantedBy=multi-user.target

Activează și pornește serviciul:

sudo systemctl enable assistant.service
sudo systemctl start assistant.service

Pasul 7. Ai terminat!

De acum te poți bucura de propriul tău Google Assistant pe Raspberry Pi folosind expresiile “Hey Google” sau “Ok Google“. De asemenea, poți înregistra dispozitivul în aplicația Google Assistant pe iOS sau Android.

RoboNews: Ce ar putea fi mai fun decât o platformă IoT Arduino?

Piața platformelor IoT este în continuă creștere. Probabil ai auzit de IoT pentru că anul trecut s-au dezvoltat peste 450 de platforme de acest gen, estimându-se ca în acest an numărul lor să depășească 1000. Internet of Things (IoT) System este o platfor mă care simplifică administrarea la scară largă a dispozitivelor și obiectelor conectate la rețea. De fapt, aceasta oferă o infrastructură care este proiectată să gestioneze sisteme de mari dimensiuni cu trafic intens generat de diverse dispozitive și platforme.

Platformele IoT sunt software-ul de suport care pun laolaltă totul într-un singur sistem. O platformă IoT facilitează comunicarea, fluxul de date, gestionarea dispozitivelor și funcționalitatea aplicațiilor. Datorită acestor lucruri, platformele IoT sunt de un real ajutor în sprijinul companiilor care vor să depășească provocările tehnice fără a avea nevoie de resurse suplimentare pentru a gestiona echipe de ingineri specializați în diverse domenii.

De exemplu, un business ar putea să fie foarte bun în tehnica de hardware, dar în locul procesului scump și de durată de a angaja dezvoltatori de software pentru a construi totul in house, platforma IoT este o soluție rapidă și mai eficientă din punct de vedere al costurilor.

Facem o trecere în revistă a celor mai noi domenii în care se folosesc cu succes platformele IoT Arduino și cum poate fi folosită o platformă IoT:

EyeScan AT3D Max – senzorul cu scanare 3D cu cea mai rapidă și cea mai înaltă definiție a laserului

Laserul este o tehnologie revoluționară cu o influență extraordinară în multe domenii. Îl găsim în imprimantele de la calculatoare, în CD sau DVD-playere, în spitale pentru operaţiile chirurgicale asistate de laser, în aparatele pentru măsurat distanţe, în tehnologiile pentru comunicaţiile pe fibră optică, în sudură, tăierea sau prelucrarea materialelor ce necesită înaltă precizie. EyeScan AT 3D Max este cel mai rapid și cel mai mare senzor de deplasare a rezoluției de pe piață. Senzorul de poziție poate măsura la viteză foarte mare distanța dintre un obiect și un punct de referință sau modificări în lungime. Senzorul The EyeScan AT 3D Max poate scana 3D chiar si cele mai mici componente ale unei piese ajungand la o rezoluție de măsurare de un micrometru.

Cum se întâmplă acest lucru? Senzorul își proiectează linia laser pe obiectul ce urmează să fie inspectat. Acest obiect se va deplasa prin dreptul senzorului pentru a inspecta toata suprafața acestuia, iar după ce obiectul este scanat în întregime se generează o imagine 3D. Rezoluția imaginii obținute cât și viteza de scanare face acest senzor ideal pentru măsurarea și inspectarea pieselor foarte mici, cum ar fi componentele electronice, chiar dacă acestea au zone întunecate sau strălucitoare.

Acest senzor EyeScan AT 3D Max se poate interconecta la o mare varietate de sisteme folosind interfețele UR Robot și Profinet Stack.

Unitatea utilizează propriul software EyeVision care realizează evaluări 3D utile pentru industria auto sau electronică, precum și evaluări pentru industria alimentară și a băuturilor. (Sursa)

Accesul la comunicațiile cloud simplifică dezvoltarea aplicațiilor IoT

Pasionat de Arduino? Atunci suntem siguri că ești în căutarea unei soluții care să-ți permită dezvoltarea și gestionarea aplicațiilor IoT într-o manieră cât mai accesibilă. Versiune publică beta a cloudului Arduino IoT, cu generarea automată a dashboard-ului, suport pentru webhooks unde se poate modifica comportamentul unei aplicații web dar și a protocolului securizat TLS (Transport Layer Security) reprezintă un avantaj major pentru utilizatorii de arduino. Arduino Cloud IoT permite, de asemenea, și alte metode de interacțiune, inclusiv API-ul HTTP REST, MQTT, tool-uri linie de comandă, JavaScript și WebSocket-uri.

Ușurința și flexibilitatea de a programa în Arduino au fost considerate concepte cheie pentru cloudul Arduino IoT fără a mai obliga utilizatorii să le programeze prin Arduino Sketch.

Pentru a sublinia modul în care Arduino IoT Cloud ar lucra în tandem cu familia MKR într-o soluție reală, Massicot Banzi – expert in tehnologia Arduino,  oferă un exemplu pentru domeniul agriculturii, în care opțiunile de alimentare optimă cu energie a componentelor și alternative de conectivitate sunt esențiale: “Să presupunem că dorim să construim o seră IoT, obiectivul fiind acela de a controla această seră de la distanță, adică să pornim și să oprim luminile, să pornim sistemul de irigații și să citim și să reglăm temperatura din seră, fără intervenția umană. Sistemul complet poate fi automatizat și controlat utilizând o placă Arduino MKR WIFI 1010 împreună cu cloudul Arduino IoT. Trebuie doar să atașați senzorii relevanți (de exemplu, senzorii de temperatură, lumină și umiditate), dispozitivele de acționare (de exemplu, pompa de irigare) și comutatoarele (luminile și ventilatoarele) pe placă. Încărcați software-ul (Arduino Sketch) și va fi gata în câteva minute pentru a controla automat proprietățile elementelor actionate (de exemplu, activați ventilatoarele de ventilație atunci când există prea multă umiditate în seră) printr-o interfață web simplă.” (Sursa)

Viața plantelor, monitorizată cu ajutorul unui dispozitiv Raspberry Pi

Pasionată de viața plantelor și de procesul de creștere al acestora, de la stadiul de germinarea până la stadiul de plantă adultă, Nicole He, artist și programator, a studiat timp de 2 ani un ficus din propria ei casă. Nicole a programat interfața Raspberry pentru a posta zilnic pe Twitter câte o fotografie cu propria ei plantă. Ea a folosit un aparat de fotografiat alimentat de o placă Raspberry Pi, pentru a se documenta cu privire la creșterea lentă a plantei Ficus Lyrata. De asemenea, a folosit un Logitech HD WebCam C310, pe care l-a conectat prin USB la o placă Raspberry Pi, un monitor extern, o tastatură și o conexiune Wi-Fi pentru a putea trimite zilnic poza pe Internet.

Astfel, timp de doi ani, acumulând zi de zi poze cu stadiul de creștere lentă a plantei, Nicole He a compilat toate pozele într-un mic filmuleț intitulat  “meditație asupra naturii și tehnologiei”. (Sursa)

Industria producătoare de semiconductori, îmbunătățiri majore datorită aplicațiilor care utilizează tehnologia cloud

APEC (Asia-Pacific Economic Cooperation) anunță dezvoltarea platformei Strata Developer Studio care oferă o modalitate utilizată de ingineri de a lucra plăcile de evaluare și dezvoltare, oferind cea mai recentă documentație, informații despre produse, note de proiectare precum și fișiere de referință direct pe calculator. Toate plăcile noi de evaluare a semiconductorilor vor fi în viitor “Strata-Ready”, ceea ce înseamnă că vor fi automat recunoscute de platforma Strata Developer Studio când sunt conectate la computer. Această platformă oferă echipei de proiectare o interfață intuitivă pentru un control direct al parametrilor de configurare și feedback-ul vizual al funcționalității placii de evaluare. În același timp, Strata va descărca toate informațiile de proiectare necesare unui inginer pentru a începe evaluarea sau proiectarea. Strata Developer Studio este furnizat ca o aplicație recunoscuta de Microsoft care se conectează la platforma SaaS a companiei. Dispune de autentificare securizată, de transfer de date și de izolare completă a informațiilor, utilizând baze de date criptate ce respectă Regulamentul UE privind protecția generală a datelor (GDPR). Toate informațiile și securitatea respectă regulamentul Institutului Național de Standardizare și Tehnologie (NIST). (Sursa)

Soluțiile IoT devin inevitabil mai complexe și mai dinamice cu trecerea timpului. Acestea implică ecosisteme mai mari de dispozitive și se dezvoltă mult mai repede decât software-ul tradițional de aplicații pentru întreprinderi. Odată cu dezvoltarea tuturor tipurilor de interacțiuni de la distanță între dispozitive și oameni, soluțiile IoT reprezintă o nouă paradigmă pentru experiența digitală orientată spre client. Complexitatea lor poate părea intimidantă la început, dar, de fapt, avantajele platformelor IoT sunt fezabile, fără a reinventa roata. În acest scop, o platformă IoT este noua roată.

Senzor IoT temperatura cu transmisie GSM

Construieste-ti sezorul tau de temperatura IoT cu stocare de date in CLOUD. In acest proiect folosim senzorul 1 Wire 18B20 de la Dallas/Maxim si shieldul GSM dual SIM  a-gsmII sau shieldul GSM GNSS dual SIM b-gsmgnss  de la itbrainpower.net. Serviciul CLOUD este oferit gratuit de Robofun.

Necesar timp: 30-45 minute – pregatire hardware si aproximativ 30-60 minutes partea de software si setarile contului cloud.

Nivel de dificultate: intermediar.

Materiale necesare hardware IOT

Despre shieldurile GSM folosite
In acest proiect am folosit, pentru exemplificare, shieldul a-gsmII v2.105, dar exact aceleasi setari hardware se aplica pentru b-gsmgnss v2.105 (interfetele si jumperii sunt plasati in aceleasi pozitii). Mai multe informatii:
documentatie a-gsmII
documentatie b-gsmgnss

Detaliere senzor 18DS20
Lipiti rezistorul de 8.2Kb intre terminalele Vdd (pin3) si DQ (pin2) ale 18B20 ca in imaginea de mai jos. Vezi referinta DALLAS/MAXIM 18B20.

Conectare hardware (toate componentele conectate in poza de mai jos)
Pasi de urmat:

  • lipiti headere (pini) ARDUINO la shieldul GSM a-gsmII
  • plug-in (conectati) sieldul a-gsmII in Arduino UNO
  • plasati jumperul a-gsmII “Power selector” in pozitia “Vin” (referinta)
  • inserati the SIM cardul in SIM socketul primar (slotul SIM aflat in proximitatea PCB). SIM-ul trebuie sa aiba dezactivata procedura de verificare a codului PIN (vezi cum se dezactiveaza verificarea PIN, aici).
  • Lipiti rezistorul de 8.2Kb intre terminalele Vdd (pin3) si DQ (pin2) ale 18B20. Lipiti firele la terminalele senzorului 18B20.
  • Conectati firele 18B20 dupa cum urmeaza: 18B20 Vdd (pin3) la Arduino 5V, 18B20 DQ (pin2) la Arduino D8  si 18B20 GND (pin1) la Arduino GND.
  • conecteaza portul USB al Arduino UNO  la PCul tau

Alimentarea senzorului IOT va fi efectuata centralizat, prin intermediul conectorului de alimentare Arduino UNO.

SOFTWARE
a. Downloadeaza itbpGSMclass library [beta]: “a-gsmII series software IoT REST support for ARDUINO” de la a-gsmII download section, sau “b-gsmgnss series software IoT REST support for ARDUINO” de la b-gsmgnss download section. Pentru a efectua download-ul clasei va trebui sa introduci IMEI-ul (se afla marcat pe modem, sau poate fi citit folosind comanda “AT+CGSN”) si adresa ta de email.

b. Expandati archiva si instalati clasa. Pe scurt, copiati folderul “itbpGSMclass” in “Arduino local user folder” [la mine se afla in: “C:\Users\dragos\Documents\Arduino\libraries”], dupa care restartati mediul Arduino. Mai multe detalii despre intalarea manala de librarii Arduino: Arduino library manual installation.

c. Creaza un folder numit “agsmII_temperature_Robofun_cloud_logger”.

d. Salveaza codul din linkul de mai jos sub denumirea de “agsmII_temperature_Robofun_cloud_logger.ino” in folderul creat mai devreme: Temperature GSM IOT main Arduino code

e. Setari variabile in “agsmII_temperature_Robofun_cloud_logger.ino”:
– tempToken [linia 19] – inlocuieste cu tokenul senzorului tau generat in cloud Robofun
– samplingPeriod [line 29]

f. Setari variabile in “itbpGSMclass library”:
– seteaza SERVER_ADDRESS si SERVER_PORT in itbpGPRSIPdefinition.h pentru ROBOFUN CLOUD, ca mai jos
#define SERVER_ADDRESS “iot.robofun.ro”
#define SERVER_PORT “80”
– seteaza APN, USERNAME si PASSWORD, corespunzator SIM-ului tau, in itbpGPRSIPdefinition.h (pentru ORANGE RO, de exemplu, APN este “INTERNET” sau “NET”, USERNAME este “” si PASSWORD este “”)
– alege modemul itbrainpower folosit in itbpGSMdefinition.h, in acest caz:
#define __itbpModem__ agsmII
– nu uita sa salvezi setarile! 😉

g. alte setari utile >> itbpGSMClassDebug, atDebug on / off si MAX_BUFFER_SIZE… in itbpGSMdefinition.h

CLOUD ROBOFUN. CONT NOU, SENZORI si SETARI
CLOUDul Robofun este un serviciu extrem de simplu de utilizat si este disponibil in mod gratuit. Acesta este disponibil la adresa: https://iot.robofun.ro. Nu intru in detalii – creaza un cont nou si defineste un senzor nou. In interfata senzor, fa scroll down pana la paragraful “TOKEN”.

Copiaza acest cod si  foloseste-l pentru tempToken [linia 19 din “agsmII_…._logger.ino”]. Salveaza. Compileaza.

GATA!

Acest tutorial se bazeaza pe articolul “IoT temperature CLOUD logger with GSM and 1wire sensor howto” care a fost publicat original pe site-ul https://itbrainpower.net

 

Proiect Termometru Simfonic

În cadrul proiectului de față vom prezenta o soluție de achiziție (ca exemplificare vom face achiziția temperaturii și umidității mediul ambiant) cu raportare IoT prin GPRS (rețea de telefonie mobilă). Soluția propusă este una simplă și vine în întâmpinarea unei probleme extrem de actuală: supravegherea de la distanță a unor parametrii de mediu în locații izolate unde nu dispunem de infrastructură de rețea Internet – în loc de temperatură și umiditate putem face achiziția unor parametrii ai solului (aplicații pentru agricultură inteligentă) sau achiziția unor parametrii de proximitate și integritate (aplicații de securitate).

Soluția propusă se bazează pe placa de dezvoltare Adafruit Feather 32U4 FONA, placă ce combină un microcontroler ATmega32U4 la 8MHz / 3.3V și un controler GSM SIM800 quad-band (850/900/1800/1900MHz). Placa necesită alimentarea de la un acumulator LiPo extern de minim 500mAh (se pot utiliza (*), (*), (*)) și o antenă GSM uFL.

2

Pentru achiziția parametrilor temperatură și umiditate vom utiliza un senzor digital I2C Si7021 ce are o precizie mare de măsurare și se poate interfața foarte ușor cu placa de dezvoltare utilizată.

3

Funcționarea sistemului necesită o cartelă GSM 2G cu capabilități de transfer de date. Pentru acest lucru vă propunem utilizarea unui SIM Simfony Mobile M2M – cartelă GSM ce oferă exclusiv servicii mobile de date.

4

Cartela este disponibilă gratuit prin comandă pe site-ul companiei Simfony Mobile SRL  sau împreună cu un produs din gama GSM pe site-ul Robofun. Cartela necesită înregistrarea și introducerea codului promoțional pentru activare și oferă gratuit 10MB de date mobile valabile 3 luni. Ulterior costurile de funcționare sunt de 0.25EURO, 0.5EURO, 1EURO pentru 1MB, 5MB respectiv 10MB trafic de date. Chiar dacă traficul inclus are valori modice pentru un sistem de raportare IoT este suficient iar costurile sunt rezonabile. O caracteristică importantă a cartelei SIM Simfony este indepența de un operator de telefonie anume, dispozitivul GSM ce utilizează cartela Simfony poate utiliza orice operator de telefonie mobilă în funcție de zona în care se află chiar și afara României.

 

Interconectarea componentelor

Interconectarea dintre senzorul Si7021 și placa Feather 32U4 FONA este reprezentată în diagrama următoare:

5

Pentru mai multe detalii despre operarea plăcii Adafruit Feather 32U4 FONA se recomandă parcurgerea materialului ”Adafruit Feather 32u4 FONA – Take your Feather anywhere in the world”.

 

Programarea sistemului

Pentru realizarea și testarea sistemului s-a utilizat Arduino IDE 1.8.1 cu extensia Adafruit AVR Boards 1.4.9 instalată precum și bibliotecile Adafruit FONA 1.3.2, Adafruit Si7021, Sleep_n0m1 1.1.1.

 

#include “Adafruit_FONA.h”

#define FONA_RX  9

#define FONA_TX  8

#define FONA_RST 4

#define FONA_RI  7

#define FONA_DTR 5

#define apn “internet.simfony.net”

#define apnusername “” 

#define apnpassword “” 

char replybuffer[255];

#include <SoftwareSerial.h>

SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);

SoftwareSerial *fonaSerial = &fonaSS;

Adafruit_FONA fona = Adafruit_FONA(FONA_RST);

uint8_t type;

#include <Sleep_n0m1.h>

Sleep sleep;

#include <Adafruit_Si7021.h>

Adafruit_Si7021 sensor = Adafruit_Si7021();

 

Dacă se dorește supravegherea funcționării sistemului pe serială se va adăuga următoarea linie, în funcționarea propriu-zisă nu este necesară:

 

#define debug

 

În cadrul secțiunii setup() se va realiza inițializarea modulului GSM și a senzorului Si7021:

 

void setup() {

  #ifdef debug

    while (!Serial);

    Serial.begin(115200);

    Serial.println(“Initializing…”);

  #endif

  digitalWrite(FONA_DTR,LOW);

  fonaSerial->begin(4800);

  if (! fona.begin(*fonaSerial)) {

    #ifdef debug

      Serial.println(F(“Couldn’t find FONA”));

    #endif

    delay(1);

    while (1);

  }

  #ifdef debug

    type = fona.type();

    Serial.println(F(“FONA is OK”));

    Serial.print(F(“Found “));

    switch (type) {

      case FONA800L:

        Serial.println(F(“FONA 800L”)); break;

      case FONA800H:

        Serial.println(F(“FONA 800H”)); break;

      case FONA808_V1:

        Serial.println(F(“FONA 808 (v1)”)); break;

      case FONA808_V2:

        Serial.println(F(“FONA 808 (v2)”)); break;

      case FONA3G_A:

        Serial.println(F(“FONA 3G (American)”)); break;

      case FONA3G_E:

        Serial.println(F(“FONA 3G (European)”)); break;

      default:

        Serial.println(F(“???”)); break;

    }

   #endif

  #ifdef debug

    char imei[15] = {0};

    uint8_t imeiLen = fona.getIMEI(imei);

    if (imeiLen > 0) {

      Serial.print(“Module IMEI: “); Serial.println(imei);

    }

  #endif

  fona.getSIMCCID(replybuffer); 

  #ifdef debug

    Serial.print(F(“SIM CCID = “));

Serial.println(replybuffer);

  #endif

  if (!fona.enableNetworkTimeSync(true)) {

     #ifdef debug

      Serial.println(F(“Failed to enable NTS”));

     #else

      ;

     #endif

  }

  delay(5000);

  fona.setGPRSNetworkSettings(F(apn),F(apnusername),F(apnpassword));

  uint8_t n=0;

  #ifdef debug

    Serial.print(“Connecting to network.”);

  #endif

  while (n!=5) {

    n = fona.getNetworkStatus();

    #ifdef debug

      Serial.print(“.”);

    #endif

    delay(1000);

  }

  #ifdef debug

    Serial.println(“OK”);

  #endif

  #ifdef debug

    n = fona.getRSSI();

    int8_t r;

    if (n == 0) r = -115;

    if (n == 1) r = -111;

    if (n == 31) r = -52;

    if ((n >= 2) && (n <= 30)) { r = map(n, 2, 30, -110, -54); }

    Serial.print(r); Serial.println(F(“dBm”));

  #endif

  sensor.begin();

  delay(5000);

}

 

Sistemul va raporta către serviciul IoT ThingSpeak valorile achiziționate (temperatură și umiditate) precum și voltajul și procentul de încărcare a acumulatorului ce alimentează sistemul. Secțiunea loop() implementează atât partea de achiziție cât și partea de transmisie de rețea prin intermediul comunicației mobile. În cadrul codului trebuie personalizată valoarea parametrului key ce se obține în urma înregistrării gratuite pe site-ul ThingSpeak. Achiziția și raportarea se realizează la un interval de o oră (3600000ms), în intervalul de inactivitate atât modulul GSM cât și microcontrolerul 32u4 se află în mod de consum redus.

 

void loop() {

while (!fona.enableGPRS(true)) {

#ifdef debug

Serial.println(F(“Failed to turn on GPRS”));

#endif

delay(5000);

}

uint16_t vbat;

uint16_t pbat;

#ifdef debug

if (fona.getBattVoltage(&vbat)) { Serial.print(F(“VBat = “)); Serial.print(vbat);

Serial.println(F(” mV”)); }

if (fona.getBattPercent(&pbat)) { Serial.print(F(“VPct = “)); Serial.print(pbat);

Serial.println(F(“%”));   }

Serial.println(“——————————————————“);

#else

fona.getBattVoltage(&vbat);

fona.getBattPercent(&pbat);

#endif

float temperature, humidity;

temperature = sensor.readTemperature();

humidity = sensor.readHumidity();

#ifdef debug

Serial.print(“Humidity:    “);

Serial.print(humidity, 2);

Serial.print(“\tTemperature: “);

Serial.println(temperature, 2);

#endif

String temp = “api.thingspeak.com/update?key=…&field1=” + String(vbat/1000.0F,2) + “&field2=” + String(pbat) + “&field3=” + String(temperature,2) + “&field4=” + String(humidity,2);

uint16_t statuscode;

int16_t length;

char url[100];

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

#ifdef debug

Serial.println(url);

if (!fona.HTTP_GET_start(url, &statuscode, (uint16_t *)&length)) Serial.println(“Failed

read HTTP!”);

#else

fona.HTTP_GET_start(url, &statuscode, (uint16_t *)&length);

#endif

while (length > 0) {

while (fona.available()) {

char c = fona.read();

#ifdef debug

Serial.write(c);

#endif

length–;

if (! length) break;

}

#ifdef debug

Serial.println();

#endif

break;

}

fona.HTTP_GET_end();

delay(100);

#ifdef debug

Serial.println(“——————————————————“);

if (!fona.enableGPRS(false)) Serial.println(F(“Failed to turn off GPRS”));

#else

fona.enableGPRS(false);

#endif

delay(100);

digitalWrite(FONA_DTR,HIGH);

#ifdef debug

delay(3600000);

#else

sleep.pwrDownMode();

sleep.sleepDelay(3600000);

#endif

digitalWrite(FONA_DTR,LOW);

delay(100);

}

 

Configurarea sistemului de raportare IoT

Sistemul nostru este un sistem tipic IoT ce utilizează platforma on-line ThingSpeak. Utilizarea platformei necesită înregistrare dar aceasta este gratuită.

6

Platforma ThingSpeak este una dintre cele mai cunoscute platforme IoT ce oferă servicii de stocare, prelucrare și vizualizare a datelor. Unul dintre avantajele majore ale platformei este posibilitatea de execuție de programe scrise în limbajul Matlab.

După înregistrare se va defini un nou canal înregistrare a datelor (My Channels / New Channel). Definirea canalului va genera și cheia (Write API Key) ce trebuie utilizată în program.

7

În cadrul acestui canal vom defini patru câmpuri Vbat, Vperc, Temperature și Humidity ce vor stoca efectiv datele trimise de dispozitivul nostru.

8

După punerea în funcțiune a sistemului se vor putea vedea și datele trimise de dispozitiv (secțiunea PrivateView).

9

Norul udă ghivecele cu flori

Chiar dacă un sistem automat de menținere a umidității pentru ghivecelor cu flori rezolvă problema ”am uitat să ud florile” nu rezolvă și problema monitorizării exacte a umidității (necesare pentru diverse tipuri de plante mai pretențioase). Adăugarea unui sistem de jurnalizare a umidității permite vizualizarea și determinarea punctului de umiditate optimă pentru diverse astfel de tipuri de plante. În cadrul proiectului de față ne propunem să completăm sistemul prezentat în proiectul precedent (Arduino udă ghivecele cu flori) cu un sistem de monitorizare și comandă online. Pentru acest lucru vom utiliza serviciul online (de tip ”nor”) Adafruit IO. Serviciul Adafruit IO este un serviciu specializat IoT, gratuit, ce pune la dispoziția utilizatorilor atât posibilitatea jurnalizării valorilor preluate de la diverși senzori dar și transmiterea de comenzi către dispozitivele IoT și chiar legătura automată între partea de achiziție și comandă (reguli de conducere automată).

Pentru implementarea sistemului prezentat în această lecție este necesară crearea unui cont pe platforma Adafruit IO. După conectare trebuie să navigăm în meniul Settings și să ne notăm AIO Keys (cheia de autentificare) care va fi folosită, împreună cu denumirea contului creat, în programul sistemului.

Din punct de vedere hardware sistemul va avea în plus un modul Adafruit HUZZAH ESP8266 ce va asigura conectivitatea de rețea necesară accesării serviciului cloud.

2Astfel componentele necesare implementării sistemului sunt: Arduino Uno, shield drivere de motoare L298, senzor umiditate sol, pompă de apă micro, ecran LCD grafic Nokia (opțional) și modul Adafruit HUZZAH ESP8266. Alimentarea sistemului se va face de la un alimentator de rețea de 9V conectat la placa de dezvoltare Arduino Uno. Alimentatorul va alimenta atât componentele de comandă (placă de dezvoltare, modul WiFi, ecran LCD, senzor de umiditate sol) cât și pompa de apă (prin intermediul shield-ului L298 ce trebuie să aibă jumperul de alimentare comună conectat).

Conexiunile între componentele sistemului sunt următoarele:

  • Pompa de apă se conectează la shield-ul L298 pe canalul MOTOR2:

3

  • Senzorul de umiditate sol va utiliza pinul A0 pentru a transmite valoarea achiziționată către placa de dezvoltare, pinul A2 pentru alimentare și un pin de GND.

4

  • Ecranul LCD va utiliza următorii pini pentru conectare: LED – 5V (prin intermediul unei rezistențe de 220ohm), SCLK – D13, D/C – D8, RST – D7, SCE – A3 (nu mai putem folosi pinul D4 ca în cazul lecției precedente deoarece acest pin va fi utilizat de modul WiFi), GND – GND, Vcc – 3.3V.
  • Modulul WiFi Adafruit HUZZAH ESP8266 se va monta în soclul shield-ului L298 (soclu gândit pentru modul bluetooth dar compatibil și cu modulul WiFi utilizat de noi) – ATENȚIE la polaritate – conectați pinul de GND al modului la pinul de GND al soclului.

5

Înainte de asamblarea sistemului modulul WiFi trebuie programat separat de programarea plăcii Arduino Uno. Pentru programare este necesară utilizarea unui cablu USB to TTL sau a unui conector FTDI. Pentru programarea și utilizarea modulului Adafruit HUZZAH este recomandată parcurgerea materialului următor: Adafruit HUZZAH ESP8266 breakout .

Programul pentru modulul WiFi are rolul de a transforma comunicația serială (de la placa Arduino Uno) în mesaje MQTT pentru platforma Adafruit IO. Programul a fost dezvoltat și testat cu Arduino IDE 1.8.1 având instalată extensia ESP8266 Community 2.3.0 și utilizează biblioteca Adafruit MQTT 0.17.0. În program trebuie personalizate datele de conectare la rețeaua WiFi locală (WLAN_SSID și WLAN_PASS) precum și datele de conectare la serviciul cloud Adafruit IO (AIO_USERNAME și AIO_KEY).

#include <ESP8266WiFi.h>

#include “Adafruit_MQTT.h”

#include “Adafruit_MQTT_Client.h”

#define WLAN_SSID       “

#define WLAN_PASS       “

#define AIO_SERVER      “io.adafruit.com”

#define AIO_SERVERPORT  1883

#define AIO_USERNAME    “

#define AIO_KEY         “

WiFiClient client;

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_USERNAME, AIO_KEY);

Adafruit_MQTT_Publish soilhumidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME “/feeds/soilhumidity”);

Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME “/feeds/onoff”);

void onoffcallback(char *data, uint16_t len) {

  String onoff_state = String(data);

  if (onoff_state==”ON”) Serial.println(“1”);

  else if (onoff_state==”OFF”) Serial.println(“0”);

}

void setup() {

  Serial.begin(115200);

  delay(10);

  Serial.println(F(“Adafruit MQTT NOR”));

  WiFi.begin(WLAN_SSID, WLAN_PASS);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);  }

  onoffbutton.setCallback(onoffcallback);

  mqtt.subscribe(&onoffbutton);

}

uint32_t x;

void loop() {

  MQTT_connect();

  mqtt.processPackets(100);

  if(Serial.available()){

    x=Serial.parseInt();

    soilhumidity.publish(x);

    }

  if(! mqtt.ping()) {

    mqtt.disconnect();

  }

}

void MQTT_connect() {

  int8_t ret;

  if (mqtt.connected()) {

    return;

  }

  uint8_t retries = 3;

  while ((ret = mqtt.connect()) != 0) {

        mqtt.disconnect();

       delay(10000);

       retries–;

       if (retries == 0) { while (1); }

  }

}

Programul pentru placa de dezvoltare Arduino Uno nu diferă foarte mult de varianta prezentată în proiectul precedent. Este necesară modificarea declarării obiectului LCD:

Adafruit_PCD8544 display = Adafruit_PCD8544(8, A3, 7);

declararea și configurarea comunicației seriale cu modulul WiFi:

#include “SoftwareSerial.h”

SoftwareSerial mySerial(2,4);

void setup()

{

  mySerial.begin(115200);

și de câteva completări în secțiunea loop():

void loop()

  int command = 0;

  int soilhumidity;

  digitalWrite(SOIL_VCC,LOW);

  mySerial.println(soilhumidity);

  display.println(millis()/1000);

  if(mySerial.available()){

    command = mySerial.parseInt();

  }

  if ((soilhumidity<500)||(command==1)) {

Programul ce rulează pe placa Arduino raportează serial către modulul WiFi valoarea umidității solului iar acesta raportează mai departe către serviciul cloud prin intermediul canalului soilhumidity. După prima execuție acest canal va apărea automat în interfața Adafruit IO.

6

În plus, sistemul va permite și comanda de la distanță a procesului de udare. Pentru acest lucru este nevoie să creăm manul în interfața Adafruit IO un canal denumit onoff. Acest canal va transmite către modulul WiFi comenzi de tipul ON / OFF, acestea vor fi retransmise către placa Arduino Uno ca și comenzi seriale de tip 1 / 0 și vor permite pornirea procesului de udare independent de valoarea umidității solului.

Pentru a putea transmite comenzile din interfața Adafruit IO putem crea o nouă consolă de comandă în secțiunea Dashboards. În această consolă de comandă putem plasa graficul de evoluție (Line Chart) a parametrului măsurat (umiditate sol) și un buton (Toggle) pentru comanda de udare.

7

În acest moment avem un sistem complet de urmărire și control la distanță a sistemului de udare – interfața web a serviciului Adafruit IO se poate accesa de oriunde de pe Internet.

Bineînțeles, sistemul propus poate fi îmbunătățit prin adăugarea mai multor parametrii de supravegheat (putem adăuga senzori de temperatură și umiditate a aerului, senzori de intensitate a luminii solare) completând astfel procesul de urmărire și control. Mai mult decât atât, serviciul Adafruit IO permite definirea de alarme de urmărire (avertizarea prin email când un parametru urmărit atinge un anume prag) sau chiar definirea de acțiuni asupra elementelor de comandă (putem implementa pragul de declanșare a procesului de udare la nivel de serviciu cloud).

Pentru mai multe detalii legate de funcționarea serviciului Adafruit IO puteți vedea și următoarele proiecte:

Monitor temperature & humidity from anywhere!

ESP8266 Power Meter Measure the DC power consumption of your devices!

Remote Control with the Huzzah + Adafruit.io

Log Light Levels to Adafruit IO

Track Your Treats: Halloween Candy GPS Tracker