Sunteți pe pagina 1din 10

Textul si imaginile din acest document sunt licentiate

Attribution-NonCommercial-NoDerivs
CC BY-NC-ND
Codul sursa din acest document este licentiat
Public-Domain
Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website /
blo, printare, sau orice alt mijloc!, atat timp cat nu aduci nici un "el de modi"icari acestuia# Codul
sursa din acest document poate "i utili$at in orice "el de scop, de natura comerciala sau nu, "ara
nici un "el de limitari#
Arduino GSM/GPRS Shield
Shield-ul Arduino GSM/GPRS permite placii Arduino sa se conecteze la reteaua de Internet, sa
trimita sau sa primeasca mesaje SMS si sa realizeze apeluri de voce. Shield-ul este compatibil cu placa
Arduino UNO, fara nici un fel de modificare. Pentru placile Arduino Mega si Arduino Leonardo sunt
necesare cateva modificari minore. Momentan, placa Due nu este compatibila cu shield-ul.
In acest tutorial vei descoperi cum se realizeaza o conexiune la reteaua de Internet si cum se
poate programa o aplicatie care citeste temperatura si o incarca la fiecare 5 secunde, intr-un serviciu de
stocare al datelor online. Shield-ul GSM/GPRS arata ca in imaginea de mai jos (fara modificarea
necesara)
Pentru acest tutorial, vei avea nevoie de urmatoarele componente:
O placa Arduino UNO - http://www.robofun.ro/arduino/arduino_uno_v3
SAU
O placa Arduino Mega - http://www.robofun.ro/arduino_mega2560
Un shield Arduino GSM/GPRS - http://www.robofun.ro/arduino_gsm_gprs_shield
Cablu USB.
Fire de conexiune tata-tata
http://www.robofun.ro/fire_conexiune_tata_tata-140mm
http://www.robofun.ro/forum
Un alimentator extern pentru Arduino (9V @ 1A)
http://www.robofun.ro/alimentator-extern-arduino
Un senzor de temperatura brick.
http://www.robofun.ro/senzor-temperatura-brick?keyword=temperatura&category_id=0
Modificarea necesara pentru placa Arduino Mega
Daca folosesti placa Arduino UNO, sari peste aceasta sectiune. Daca folosesti Arduino Mega
sau Arduino Leonardo, fa pasii care urmeaza :
pinul 2 al shield-ului se indoaie deoarece nu trebuie sa fie conectat cu placa Arduino.
pinul 2 al shield-ului se conecteaza printr-un fir cu capete tata-tata la pinul 10.
Pentru celelalte placi, respectiv pentru placa Arduino UNO, nu este necesara nici o modificare.
Nu trebuie decat sa conectezi shield-ul si atat. Pentru placa Leonardo, urmeaza aceeasi pasi ca mai sus
cu diferenta ca pinul 2 se conecteaza la pinul 8.
Conexiunea la Internet
Conexiunea la Internet se realizeaza printr-o cartela SIM. Cartela necesita configurarea in
prealabil cu optiunea de Internet pe mobil. Acest pas il poti realiza citind instructiunile providerului de
la care detii cartela (vei gasi instructiunile online sau pe pagina lor de internet). Iti sunt necesare si
urmatoarele date de conectare (pe care le vei gasi online sau dupa ce ai configurat cartela cu serviciul de
Internet):
GPRS APN
GPRS Login
GPRS Password
Datele de conectare le vei folosi mai tarziu in sketch, dar pentru moment asigura-te ca ai realizat
pasul precedent.
Stocarea temperaturii online
In continuare vei folosi o conexiune Internet peste reteaua de telefonie 3G pentru a stoca
temperatura citita de Arduino de la un senzor pe serviciul online Xively.com. Pagina de web iti pune la
dispozitie nu doar inregistrarea temperaturii dar si evolutia in timp, prin grafice.
Pentru aceasta, ai nevoie de un cont pe care il inregistrezi la adresa: https://xively.com/ iar aici
iti vei adauga primul dispozitiv pe care il vei numi dupa preferinta ta (numele il vei utiliza mai tarziu in
sketch).
http://www.robofun.ro/forum
Dupa ce ai creat primul dispozitiv, asigura-te ca ai urmatoarele informatii, deoarece iti vor fi
necesare in sketch-ul de mai jos:
API KEY
FEED ID
Numele proiectului (ales anterior)
Conectarea shield-ului si a senzorului de temperatura.
Conecteaza componentele in urmatoarea ordine:
Shield-ul GSM/GPRS (cu modificarea pentru Arduino Mega, daca ai utilizat Arduino Mega).
Acesta se infige, foarte usor, in placa Arduino.
Cartela SIM se introduce in slotul shield-ului.
Senzorul de temperatura brick se conecteaza dupa urmatorul tabel:
Arduino PIN GND Senzor brick PIN GND
Arduino PIN VCC Senzor brick PIN VCC
Arduino PIN A0 Senzor brick PIN OUT
Conectea$a sursa de alimentare de %& si cablul '(B# Atentie ) Nu se
recomanda alimentarea s*ield-ului direct din '(B, "ara alimentator#
http://www.robofun.ro/forum
+odemul de pe placa s*ield-ului consuma mult mai mult decat poate sa
enere$e portul '(B# Acest lucru poate duce la o "unctionare incorecta
sau, in cel mai rau ca$, la o de"ectiune#
Codul sursa.
Copiaza cu copy/paste codul sursa de mai jos. Cauta in cod liniile urmatoare si modifica-le cu
datele personale:
#define APIKEY "API KEY"
#define EEDID 0000000000
#define USE!AGENT "Pro"ec# N$%e"
#define GP!S&APN "'i(e)(od$fone)co%"
#define GP!S&*OGIN "'i(e"
#define GP!S&PASS+O!D "(od$fone"

Incarca codul in placa Arduino si deschide Serial Monitor. Asteapta cateva momente si vei
obtine urmatoarea imagine.
http://www.robofun.ro/forum
Deschide pagina unde ti-ai creat contul si ar trebui sa obtii, dupa o perioada mai indelungata de
timp, evolutia in timp a temperaturii sub forma de grafic.
http://www.robofun.ro/forum
#inc'ude ,GS-)./
00 P$c.ube C'ien# d$#$
#define APIKEY "API KEY" 00 re1'$ce 2our 1$c.ube $1i ke2
.ere
#define EEDID 0000000000 00 re1'$ce
2our feed ID
#define USE!AGENT "Pro"ec# N$%e" 00 u3er $4en# i3
#.e 1ro"ec# n$%e
00 PIN Nu%ber
#define PINNU-5E! ""
00 APN d$#$
#define GP!S&APN "'i(e)(od$fone)co%" 00 re1'$ce 2our GP!S
APN
#define GP!S&*OGIN "'i(e" 00 re1'$ce 6i#. 2our GP!S 'o4in
#define GP!S&PASS+O!D "(od$fone" 00 re1'$ce 6i#. 2our GP!S
1$336ord
00 ini#i$'ize #.e 'ibr$r2 in3#$nce7
GS-C'ien# c'ien#8
GP!S 41r38
GS- 43%Acce338
c.$r 3er(er9: ; "$1i)1$c.ube)co%"8 00 n$%e $ddre33 for 1$c.ube
API
un3i4ned 'on4 '$3#Connec#ionTi%e ; 08 00 '$3# #i%e 2ou
connec#ed #o #.e 3er(er< in %i''i3econd3
boo'e$n '$3#Connec#ed ; f$'3e8 00 3#$#e of #.e
connec#ion '$3# #i%e #.rou4. #.e %$in 'oo1
con3# un3i4ned 'on4 1o3#in4In#er($' ; =0>=0008 00de'$2 be#6een
u1d$#e3 #o P$c.ube)co%
(oid 3e#u1?@
A
Seri$')be4in?BC00@8
6.i'e ?DSeri$'@ A
8
E
boo'e$n no#Connec#ed ; #rue8
6.i'e?no#Connec#ed@
A
if??43%Acce33)be4in?PINNU-5E!@;;GS-&!EADY@ F
?41r3)$##$c.GP!S?GP!S&APN< GP!S&*OGIN<
GP!S&PASS+O!D@;;GP!S&!EADY@@
no#Connec#ed ; f$'3e8
e'3e
A
Seri$')1rin#'n?"No# connec#ed"@8
de'$2?=000@8
http://www.robofun.ro/forum
E
E
E
(oid 'oo1?@
A
in# 3en3or!e$din4 ; re$dTe%1InCe'3iu3?=0<0@8

if ?c'ien#)$($i'$b'e?@@
A
c.$r c ; c'ien#)re$d?@8
Seri$')1rin#?c@8
E
if ?Dc'ien#)connec#ed?@ FF '$3#Connec#ed@
A
c'ien#)3#o1?@8
E

if?Dc'ien#)connec#ed?@ FF ??%i''i3?@ G '$3#Connec#ionTi%e@ /
1o3#in4In#er($'@@
A
3endD$#$?3en3or!e$din4@8
E

'$3#Connec#ed ; c'ien#)connec#ed?@8
E
0>
ConeHiune$ ITTP cu 3er(erGu')
>0
(oid 3endD$#$?in# #.i3D$#$@
A
if ?c'ien#)connec#?3er(er< J0@@
A
Seri$')1rin#'n?"connec#in4)))"@8

00 3end #.e ITTP PUT reKue3#7
c'ien#)1rin#?"PUT 0(L0feed30"@8
c'ien#)1rin#?EEDID@8
c'ien#)1rin#'n?")c3( ITTP0=)="@8
c'ien#)1rin#'n?"Io3#7 $1i)1$c.ube)co%"@8
c'ien#)1rin#?"MGA1iKe27 "@8
c'ien#)1rin#'n?APIKEY@8
c'ien#)1rin#?"U3erGA4en#7 "@8
c'ien#)1rin#'n?USE!AGENT@8
c'ien#)1rin#?"Con#en#G*en4#.7 "@8
http://www.robofun.ro/forum
00 c$'cu'$#e #.e 'en4#. of #.e 3en3or re$din4 in b2#e37
00 J b2#e3 for "3en3or=<" N nu%ber of di4i#3 of #.e d$#$7
in# #.i3*en4#. ; J N 4e#*en4#.?#.i3D$#$@8
c'ien#)1rin#'n?#.i3*en4#.@8
00 '$3# 1iece3 of #.e ITTP PUT reKue3#7
c'ien#)1rin#'n?"Con#en#GT21e7 #eH#0c3("@8
c'ien#)1rin#'n?"Connec#ion7 c'o3e"@8
c'ien#)1rin#'n?@8

00 .ereO3 #.e $c#u$' con#en# of #.e PUT reKue3#7
c'ien#)1rin#?"3en3or=<"@8
c'ien#)1rin#'n?#.i3D$#$@8
E
e'3e
A
00 if 2ou cou'dnO# %$ke $ connec#ion7
Seri$')1rin#'n?"connec#ion f$i'ed"@8
Seri$')1rin#'n?@8
Seri$')1rin#'n?"di3connec#in4)"@8
c'ien#)3#o1?@8
E
00 no#e #.e #i%e #.$# #.e connec#ion 6$3 %$de or $##e%1#ed
'$3#Connec#ionTi%e ; %i''i3?@8
E
0>
T.i3 %e#.od c$'cu'$#e3 #.e nu%ber of di4i#3 in #.e
3en3or re$din4) Since e$c. di4i# of #.e ASCII deci%$'
re1re3en#$#ion i3 $ b2#e< #.e nu%ber of di4i#3 eKu$'3
#.e nu%ber of b2#e3)
>0
in# 4e#*en4#.?in# 3o%eV$'ue@
A
00 #.ereO3 $# 'e$3# one b2#e7
in# di4i#3 ; =8

00 con#inu$''2 di(ide #.e ($'ue b2 #en<
00 $ddin4 one #o #.e di4i# coun# for e$c.
00 #i%e 2ou di(ide< un#i' 2ouOre $# 07
in# di(idend ; 3o%eV$'ue 0=08
6.i'e ?di(idend / 0@
A
di(idend ; di(idend 0=08
di4i#3NN8
E

http://www.robofun.ro/forum
00 re#urn #.e nu%ber of di4i#37
re#urn di4i#38
E
f'o$# re$dTe%1InCe'3iu3?in# coun#< in# 1in@ A
f'o$# #e%1er$#ur$-edi$#$ ; 08
f'o$# 3u%$Te%1er$#ur$8
for ?in# i ;08 i,coun#8 iNN@ A
in# re$din4 ; $n$'o4!e$d?1in@8
f'o$# (o'#$4e ; re$din4 > P)08
(o'#$4e 0; =0LQ)08
f'o$# #e%1er$#ureCe'3iu3 ; ?(o'#$4e G 0)P@ > =00 8
3u%$Te%1er$#ur$ ; 3u%$Te%1er$#ur$ N #e%1er$#ureCe'3iu38
E
re#urn 3u%$Te%1er$#ur$ 0 ?f'o$#@coun#8
E
http://www.robofun.ro/forum