8/10/2019 ADXL345-RaspberryPI
1/15
Textul si imaginile din acest document sunt licentiate
Attribution-NonCommercial-NoDerivsCC 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 / blog, printare,sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul sursa din acest document
poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici un fel de limitari.
8/10/2019 ADXL345-RaspberryPI
2/15
RaspberryPI si ADXL345
ADXL345 este un accelerometru de dimensiuni mici, are un consum redus de energie iarmasuratorile efectuate pe cele 3 axe au o rezolutie mare (13 iti!" #oate masura pana la 1$g, iardatele sunt reprezentate in format digital, la alegere, prin interfata %#& sau &'C"
ADXL345 este foarte potri it pentru masuratori ale acceleratiei statice a gra itatiei inaplicatii care sesizeaza ascularea, dar si acceleratia dinamica rezultata din miscare sau socuri"Accelerometrul are o rezolutie mare (4 mg)L%*! si permite masurarea sc+im arilor de inclinatie
mai mici de 1, -".ai multe functii de sesizare speciale sunt furnizate" %esizarea acti itatii si inacti itatii
depisteaza prezenta sau lipsa miscarii si daca acceleratia pe oricare axa excede un ni el setat decatre utilizator" %esizarea atailor usoare depisteaza ataile simple sau du le" %esizarea caderiili ere depisteaza daca senzorul se afla se afla in cadere" Aceste functii pot fi mapate pe unul din doi
pini de iesire de intrerupere" /n uffer first in, first out (0&0 ! cu 3' de ni ele integra poate fifolosit pentru a stoca datele pentru a minimiza inter entia procesorului cu care comunica senzorul"
%enzorul poate functiona si in moduri cu consum redus de energie"
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
3/15
&n acest tutorial ei programa placa asp err #& sa afiseze pe un s+ield LCD ' x4acceleratiile corespunzatoare celor 3 axe"
6ei a ea ne oie de urmatoarele componente2
placa asp err #&"
/n s+ield LCD ' x4 pentru asp err #&"
/n senzor ADXL345"
0ire pentru conexiuni"
*read oard"
sursa de alimentare pentru asp err #& (56!
Cum conectez shield-ul LCD si senzorul ADXL345
1" Conecteaza s+ield7ul la portul 8#& al placii asp err #&" %+ield7ul poate fi infiptdirect in portul 8#& sau il poti conecta prin intermediul panglicii de tip co ler"
'" Asigura7te ca areta mama 'x13 este lipita pe s+ield, altfel nu poti conecta senzorulADXL345" La ac+izitionarea s+ield7ului poti opta pentru s+ield cu areta lipita"
3" Conecteaza accelerometrul la placa asp err #& conform ta elului urmator2
Raspberry PI 3.3V ADXL345 VCC
Raspberry PI 3.3V ADXL345 CS
Raspberry PI GND ADXL345 GND
Raspberry PI GND ADXL345 SDO
Raspberry PI SDA ADXL345 SDA
Raspberry PI SCL ADXL345 SCL
4" 0oloseste, ca referinta, sc+ema portului 8#& si sc+ema electronica de mai 9os2
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
4/15
Dupa realizarea conexiunilor, ei o tine urmatoarea imagine"
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
5/15
Cum pro!ramez placuta Raspberry PI
.ai 9os sunt listate ' programe, dintre care, primul se executa cu # t+on si se ocupa cuinitializarea afisa9ului LCD si afisarea acceleratiilor pe fiecare rand iar cel de7al doilea program estescris in lim a9ul C si se ocupa cu initializarea interfetei &'C a senzorului si citirea acceleratiilor dinel" &n mod normal ei executa doar programul scris in C, deoarece acesta realizeaza apel automatcatre programul # t+on"
Codul sursa este listat mai 9os si il poti copia cu cop )paste, dar inainte de asta sunt necesarecate a configurari2
1" Desc+ide urmatorul fisier si asigurate ca ai cele ' linii2
sudo nano /et /!odu"es
Liniile2
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
6/15
#$ %b !$&'(
#$ %de)
'" :xecuta o restartare cu2
sudo reboot
3" Dupa restartare, executa cele ' comenzi2
sudo apt%*et #nsta"" pyt+on%s!bus
sudo apt%*et #nsta"" #$ %too"s
4" Desc+ide fisierul cu urmatoarea comanda si asigura7te ca este prezent cate un ; pefiecare linie2
sudo nano /et /!odprobe.d/rasp#%b"a ,"#st. on-
5" 6erifica daca senzorul este detectat corect prin comanda2
sudo #$ dete t %y
Comanda returneaza toate adresele detectate" Daca senzorul este detectat corect, atunci el a
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
7/15
raporta adresa x53"
$" Descarca si instaleaza pac+etul p t+on #i"8#& "4"1a" #rogramul # t+on depinde
de acest pac+et"
sudo *et+ttps0//pyp#.pyt+on.or*/pa ,a*es/sour e/R/RP#.GPIO/RP#.GPIO%'.4. a.tar.*1
8/10/2019 ADXL345-RaspberryPI
8/15
5" #orneste programul care citeste si afiseaza senzorul prin comanda2
./read ad2"
6ei o tine urmatoarele imagini2
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
9/15
Pro!ramul Python"
-ro! datet#!e #!port datet#!e#!port RP#.GPIO as GPIO#!port t#!e
#!port os#!port subpro ess#!port sys
LCD RS $5LCD $4LCD D4 $3LCD D5 &LCD D6 (LCD D& $$L D ON 5
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
10/15
LCD 7ID89 $'LCD C9R 8rueLCD C:D ;a"se
LCD LIN '2('LCD LIN $ '2C'LCD LIN 3 '2 '.''''5
de- !a#n?@0
te2tL#ne8 o ACC L X0 B str?#nt?-"oat?sys.ar*) @@@
te2tL#ne8+ree ACC L >0 B str?#nt?-"oat?sys.ar*) $ @@@ te2tL#ne;our ACC L E0 B str?#nt?-"oat?sys.ar*) 3 @@@
" d #n#t?@ " d byte?LCD LIN F LCD C:D@ " d str#n*? Rp# and ADXL345 F$@ " d byte?LCD LIN $F LCD C:D@ " d str#n*?te2tL#ne8 oF @ " d byte?LCD LIN 3F LCD C:D@ " d str#n*?te2tL#ne8+reeF @ " d byte?LCD LIN 4F LCD C:D@ " d str#n*?te2tL#ne;ourF @
de- " d #n#t?@0 GPIO.set arn#n*s?;a"se@ GPIO.set!ode?GPIO. C:@ GPIO.setup?LCD F GPIO.O=8@ GPIO.setup?LCD RSF GPIO.O=8@ GPIO.setup?LCD D4F GPIO.O=8@ GPIO.setup?LCD D5F GPIO.O=8@ GPIO.setup?LCD D6F GPIO.O=8@ GPIO.setup?LCD D&F GPIO.O=8@
" d byte?'233FLCD C:D@ " d byte?'23$FLCD C:D@ " d byte?'2$(FLCD C:D@ " d byte?'2'CFLCD C:D@
" d byte?'2'6FLCD C:D@ " d byte?'2' FLCD C:D@
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
11/15
de- " d str#n*?!essa*eFsty"e@0 H sty"e Le-t ust#-#ed H sty"e $ Centred H sty"e 3 R#*+t ust#-#ed
#- sty"e 0 !essa*e !essa*e." ust?LCD 7ID89F @
e"#- sty"e $0 !essa*e !essa*e. enter?LCD 7ID89F @ e"#- sty"e 30 !essa*e !essa*e.r ust?LCD 7ID89F @
-or # #n ran*e?LCD 7ID89@0 " d byte?ord?!essa*e # @FLCD C9R@
de- " d byte?b#tsF !ode@0 H Send byte to data p#ns H b#ts data H !ode 8rue -or +ara ter H ;a"se -or o!!and
GPIO.output?LCD RSF !ode@ H RS
H 9#*+ b#ts GPIO.output?LCD D4F ;a"se@ GPIO.output?LCD D5F ;a"se@ GPIO.output?LCD D6F ;a"se@ GPIO.output?LCD D&F ;a"se@ #- b#tsJ'2 ' '2 '0 GPIO.output?LCD D4F 8rue@ #- b#tsJ'2$' '2$'0 GPIO.output?LCD D5F 8rue@ #- b#tsJ'24' '24'0 GPIO.output?LCD D6F 8rue@ #- b#tsJ'2(' '2('0 GPIO.output?LCD D&F 8rue@
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
12/15
H 8o**"e K nab"eK p#n t#!e.s"eep? D LA>@
GPIO.output?LCD F 8rue@t#!e.s"eep? P=LS @
GPIO.output?LCD F ;a"se@t#!e.s"eep? D LA>@
H Lo b#ts GPIO.output?LCD D4F ;a"se@ GPIO.output?LCD D5F ;a"se@ GPIO.output?LCD D6F ;a"se@ GPIO.output?LCD D&F ;a"se@ #- b#tsJ'2' '2' 0 GPIO.output?LCD D4F 8rue@ #- b#tsJ'2'$ '2'$0 GPIO.output?LCD D5F 8rue@ #- b#tsJ'2'4 '2'40 GPIO.output?LCD D6F 8rue@ #- b#tsJ'2'( '2'(0 GPIO.output?LCD D&F 8rue@
H 8o**"e K nab"eK p#n t#!e.s"eep? D LA>@
GPIO.output?LCD F 8rue@t#!e.s"eep? P=LS @
GPIO.output?LCD F ;a"se@t#!e.s"eep? D LA>@
#- na!e K !a#n K0 !a#n?@
Pro!ramul C"
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
13/15
// * %o read ad2" read#n*ADXL345.
H#n "ude std#o.+M H#n "ude std"#b.+M
H#n "ude - nt".+M H#n "ude un#std.+M H#n "ude str#n*.+M H#n "ude sys/#o t".+M H#n "ude sys/types.+M H#n "ude sys/stat.+M H#n "ude "#nu2/#$ %de).+M
Hde-#ne ADXL345 I$C ADDR '253
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
14/15
)o#d se"e tDe)# e?#nt -dF #nt addrF +ar na!e@
#- ?#o t"?-dF I$C SLAV F addr@ '@
-pr#nt-?stderrF s not presentQn F na!e@ //e2#t? @
)o#d r#te8oDe)# e?#nt -dF #nt re*F #nt )a"@
+ar bu- $ bu- ' re* bu- )a" #- ? r#te?-dF bu-F $@ T $@ -pr#nt-?stderrF CanKt r#te to ADXL345Qn @ //e2#t? @
#nt !a#n?#nt ar* F +ar ar*)@
uns#*ned #nt ran*e #nt ountF b s+ort 2F yF 1 -"oat 2aF yaF 1a #nt -d uns#*ned +ar bu- 6 +ar str (' +ar syste! str $56
#- ??-d open? /de)/#$ % F O RD7R@@ '@ // Open port -or read#n* and r#t#n* -pr#nt-?stderrF ;a#"ed to open #$ busQn @ e2#t? @
/ #n#t#a"#se ADXL345 /
se"e tDe)# e?-dF ADXL345 I$C ADDRF ADXL345 @
r#te8oDe)# e?-dF '2$dF '@ r#te8oDe)# e?-dF '2$dF 6@ r#te8oDe)# e?-dF '2$dF (@ r#te8oDe)# e?-dF '23 F '@ r#te8oDe)# e?-dF '23 F @
+#"e ? @
+ttp2)) "ro ofun"ro)forum
http://www.robofun.ro/forumhttp://www.robofun.ro/forum8/10/2019 ADXL345-RaspberryPI
15/15
/ se"e t ADXL345 /
se"e tDe)# e?-dF ADXL345 I$C ADDRF ADXL345 @
bu- ' '23$ #- ?? r#te?-dF bu-F @@ T @ // Send t+e re*#ster to read -ro! -pr#nt-?stderrF rror r#t#n* to #$ s"a)eQn @ //e2#t? @ #- ?read?-dF bu-F 6@ T 6@ // XF >F E a e"erat#ons
-pr#nt-?stderrF =nab"e to read -ro! ADXL345Qn @ //e2#t? @ e"se 2 bu- (U bu- ' y bu- 3 (U bu- $ 1 bu- 5 (U bu- 4 2a ?