Sunteți pe pagina 1din 10

Textul și imaginile din acest document sunt licențiate

Attribution-NonCommercial-NoDerivs
CC BY-NC-ND

Codul sursă din acest document este licențiat


Public-Domain

Ești liber să distribui acest document prin orice mijloace consideri (email, publicare pe website /
blog, tipărire, sau orice alt mijloc), atât timp cât nu aduci nici un fel de modificări acestuia. Codul
sursă din acest document poate fi utilizat în orice fel de scop, de natură comercială sau nu, fără nici
un fel de limitări dar autorii nu își asumă nici o răspundere pentru pagubele pricinuite de
implementările realizate de utilizatori. Schemele și codul sursă au un rol educativ și nu sunt gândite
pentru a fi utilizate în mediu de producție (industrial, casnic sau comercial).
Solar Power GPRS Test
Întrebarea la care vom încerca să
răspundem în cadrul acestei lecții este:
putem construi un sistem IoT cu
comunicație GPRS total independent de
alimentarea de la rețeaua de energie?
Sistemul propus pentru testare este un
sistem ce se bazează exclusiv pe
alimentare solară. Un astfel de sistem
poate fi folosit pentru locații izolate în care
nu există disponibile alimentare cu energie
electrică și Internet.

Ca soluție de alimentare solară vom utiliza o componentă


MPPT [1]: Sunny Buddy - MPPT Solar Charger [2].
Această componentă permite conectarea unei celule
solare cu ieșirea între 6V și 20V și încărcarea unui
acumulator LiIon sau LiPo cu o singură celulă (3.7V).
Curentul maxim de încărcare este de 450mA deci este
necesară utilizarea unui acumulator de capacitate minimă
450mAh. În testul nostru vom utiliza o celulă solară de 2.5W / 9V [3] și un acumulator
LiPo de 800mAh [4]. Pentru mai multe detalii despre funcționarea componentei MPTT
puteți consulta materialul „Sunny Buddy Solar Charger V13 Hookup Guide” [5].
Pentru partea de achiziție și raportare IoT vom utiliza
placa de dezvoltare Adafruit Feather 32u4 FONA [6]
echipată cu un microcontroler ATmega32U4 (la fel ca
și placa de dezvoltare Arduino Leonardo) și un
controler GSM/2G SIM800 quad-band
(850/900/1800/1900MHz). Placa va supraveghea
nivelul de încărcare a acumulatorului și va raporta prin
Internet (prin intermediul conexiunii GPRS) valorile
către serviciul cloud iot.robofun.ro [7]. Placa de
dezvoltare se va alimenta de la acumulatorul LiPo
conectat la componenta MPPT și va servi ca element
de descărcare pentru acesta. Pentru mai multe detalii despre funcționarea și utilizarea
plăcii de dezvoltare Adafruit Feather 32U4 FONA puteți consulta materialul
„Overview | Adafruit Feather 32u4 FONA | Adafruit Learning System” [8].

https://www.robofun.ro/forum/
Diagrama de interconectare între componentele sistemului de test este următoarea:

Funcționarea plăcii de dezvoltare necesită o antenă GSM uFL [9]. Pentru a minimiza
consumul și pentru a putea controla inițializarea sistemului (mai ales în cazul în care
acumulatorul sistemului nu este încărcat suficient) pinul KEY al modulului GSM se va
deconecta de la masă (necesită tăierea jumperului KEY de pe spatele plăcii) și se va
conecta la pinul 0 al plăcii de dezvoltare (firul galben din schema de interconectare).
În acest fel modulul GSM de pe placă nu va mai fi activ continuu ci doar în cazul în
care îl vom activa din software. ATENȚIE!!! Această operație conduce la pierderea
garanției oferite de producător.

Programul sistemului a fost dezvoltat și testat utilizând Arduino IDE 1.8.5 având
instalate extensia Adafruit AVR Boards 1.4.11 și bibliotecile Adafruit FONA Library
1.3.3 și Sleep_n0m1 1.1.1.

#include "Adafruit_FONA.h"
#include <Wire.h>

#define FONA_RX 9
#define FONA_TX 8
#define FONA_RST 4
#define FONA_RI 7
#define FONA_KEY 1
#define FONA_ALARM 13
https://www.robofun.ro/forum/
Definirea constantelor apn, apnusername și apnpassword sunt specifice rețelei de
telefonie mobile al SIM-ului GSM utilizat. ATENȚIE!!! Placa de dezvoltare necesită
un SIM GSM ce suportă standardul 2G, comunicația GSM nu va funcționa în cazul
unui SIM GSM exclusiv 3G/4G.

#define apn "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);

#include <Sleep_n0m1.h>
Sleep sleep;

În cadrul secțiunii setup() se vor inițializa pinii de control utilizați pentru controlul
modulului GSM (FONA_KEY este utilizat pentru activarea modulului GSM,
FONA_ALARM este conectat la LED-ul de semnalizare al plăcii de dezvoltare și va fi
utilizat pentru avertizarea imposibilității inițializării corecte a modulului GSM).

void setup() {
pinMode(FONA_KEY,OUTPUT);
digitalWrite(FONA_KEY,HIGH);
pinMode(FONA_ALARM,OUTPUT);
digitalWrite(FONA_ALARM,LOW);
}

https://www.robofun.ro/forum/
Secțiunea loop() conține algortimul complet de inițializare și comandă pentru modulul
GSM, achiziția nivelului de încărcare a bateriei și transmiterea prin Internet a valorilor
către serviciul IoT. Primul pas în execuția algoritmului este intrarea în starea de consum
redus pentru o oră – stare obligatorie pentru revenirea sistemului dintr-o stare de oprire
completă generată de consumarea completă a acumulatorului (acumulatorul este
încărcat suficient pentru inițializarea microcontrolerului ATmega32U4 dar nu și pentru
inițializarea modulului GSM).

void loop() {
sleep.pwrDownMode();
sleep.sleepDelay(3600000);

Pornirea modulului GSM necesită un impuls de 2 secunde pe pinul FONA_KEY.


Sistemul va încerca de 10 ori inițializarea modulului GSM după care va relua perioada
de o oră de consum redus.

digitalWrite(FONA_KEY,LOW);
digitalWrite(FONA_ALARM,HIGH);
delay(2000);
digitalWrite(FONA_KEY,HIGH);
digitalWrite(FONA_ALARM,LOW);
delay(2000);
fonaSerial->begin(4800);
byte i = 0;
while (!fona.begin(*fonaSerial)) {
i++;
if (i==10) break;
digitalWrite(FONA_KEY,LOW);
digitalWrite(FONA_ALARM,HIGH);
delay(2000);
digitalWrite(FONA_KEY,HIGH);
digitalWrite(FONA_ALARM,LOW);
delay(2000);
}

https://www.robofun.ro/forum/
În cazul în care modulul GSM s-a inițializat corect se va încerca deblocarea cartelei
SIM pe baza codului PIN (trebuie modificat în program în funcție de codul cartelei
folosite). Dacă deblocarea cartelei SIM nu se poate face se va relua perioada de o oră
de consum redus – este posibil ca acumulatorul să scadă sub pragul de alimentare
corectă a modulului GSM între inițializare și deblocarea cartelei SIM.

if (i!=10) {
if (! fona.unlockSIM("0000") ) {
digitalWrite(FONA_ALARM,HIGH);
delay(1000); i=10; }
else {

Programul va aștepta înregistrarea în rețeaua GSM a cartelei SIM a sistemului pentru


o perioadă de 100 de secunde.

uint8_t n = fona.getNetworkStatus();
i=0;
while (n!=1) {
i++;
if (i==10) break;
digitalWrite(FONA_ALARM,HIGH);
delay(5000);
digitalWrite(FONA_ALARM,LOW);
delay(5000);
n = fona.getNetworkStatus();
}
}

Postarea valorii de încărcare a acumulatorului se va face doar dacă se va inițializa cu


succes partea de comunicații de date (fona.enableGPRS). Măsurarea se va face chiar
de modulul GSM. În cadrul programului trebuie personalizate cheile de autentificare
(SENSOR_TOKEN1 și SENSOR_TOKEN2) obținute prin înregistrarea gratuită în
cadrul serviciului iot.robofun.ro [7].

https://www.robofun.ro/forum/
if(i!=10) {
fona.setGPRSNetworkSettings(F(apn),
F(apnusername),F(apnpassword));
if (fona.enableGPRS(true)) {
uint16_t vbat;
uint16_t pbat;
fona.getBattVoltage(&vbat);
fona.getBattPercent(&pbat);
delay(1000);
uint16_t statuscode;
int16_t length;
String SENSOR_TOKEN1="…";
String SENSOR_TOKEN2="…";
String data =
String("http://iot.robofun.ro/api/v1/senzor/") +
SENSOR_TOKEN1 + "/input?value=" +
String(vbat, DEC);
char url[100];
data.toCharArray(url,data.length()+1);
fona.HTTP_GET_start(url, &statuscode,
(uint16_t *)&length);
while (length > 0) {
while (fona.available()) {
char c = fona.read();
length--;
if (! length) break;
}
break;
}
fona.HTTP_GET_end();
delay(100);
data =

https://www.robofun.ro/forum/
String("http://iot.robofun.ro/api/v1/senzor/") +
SENSOR_TOKEN2 + "/input?value=" +
String(pbat, DEC);
data.toCharArray(url,data.length()+1);
fona.HTTP_GET_start(url, &statuscode,
(uint16_t *)&length);
while (length > 0) {
while (fona.available()) {
char c = fona.read();
length--;
if (! length) break;
}
break;
}
fona.HTTP_GET_end();
delay(100);
}

La final, înainte de reintrarea în modul de consum pentru o oră, se va opri modulul


GSM printr-un puls de 2 secunde pe pinul FONA_KEY.

digitalWrite(FONA_KEY,LOW);
delay(2000);
digitalWrite(FONA_KEY,HIGH);
}
}
}

Testul a fost efectuat pornind cu acumulatorul sistemului complet consumat (tensiune


sub 3.3V). După o zi cu soare, când tensiunea acumulatorului a ajuns la 3.7V, sistemul
s-a inițializat complet cu succes și a început să posteze pe serviciul IoT. Acest lucru
înseamnă că sistemul își poate reveni dintr-o stare de oprire completă generată de
descărcarea acumulatorului (mai multe zile fără lumină solară) fără intervenție umană.

https://www.robofun.ro/forum/
În timpul unei zile cu soare acumulatorul câștigă aproximativ 30% din nivelul de
încărcare iar procentul de descărcare într-o zi înorată este de circa 15%. Asta înseamnă
că o zi cu soare poate fi urmată de două zile înorate fără ca sistemul să descarce
acumulatorul. Dacă acumulatorul sistemului este complet încărcat, sistemul poate
funcționa fără lumină solară pentru un interval de 6-7 zile

Testul efectuat dovește că se poate construi un sistem de raportare IoT


GSM/GPRS care să funcționeze în mod autonom pe baza energiei solare fără să
fie nevoie de intervanția umană în cazuri speciale de descărcare a acumulatorului.

https://www.robofun.ro/forum/
Referințe on-line

[1] Maximum power point tracking


https://en.wikipedia.org/wiki/Maximum_power_point_tracking

[2] Sunny Buddy - MPPT Solar Charger


https://www.robofun.ro/sunny-buddy-mppt-incarcator solar?utm_source=newsletter&utm_medium=email&utm_content=productLink&utm_campaign=CURS_EMAIL

[3] Solar Cell Large - 2.5W


https://www.sparkfun.com/products/7840

[4] Acumulator LiPo - 3.7v 800mAh


https://www.robofun.ro/Acumulator-LiPo-3.7v-800mAh?utm_source=newsletter&utm_medium=email&utm_content=productLink&utm_campaign=CURS_EMAIL

[5] Sunny Buddy Solar Charger V13 Hookup Guide


https://learn.sparkfun.com/tutorials/sunny-buddy-solar-charger-v13-hookup-guide-

[6] Feather 32u4 FONA


https://www.robofun.ro/feather-32u4-fona?utm_source=newsletter&utm_medium=email&utm_content=productLink&utm_campaign=CURS_EMAIL

[7] Robofun IoT


https://iot.robofun.ro/

[8] Overview | Adafruit Feather 32u4 FONA | Adafruit Learning System


https://learn.adafruit.com/adafruit-feather-32u4-fona

[9] Antena GSM Quad-Band - 3dBi uFL


https://www.robofun.ro/slim-sticker-type-gsm-cellular-quad-band-antenna-3dbi-ufl?utm_source=newsletter&utm_medium=email&utm_content=productLink&utm_campaign=CURS_EMAIL

https://www.robofun.ro/forum/