SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
http://www.robofun.ro Curs Gratuit Arduino si Robotica
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 /
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.
http://www.robofun.ro/forum
http://www.robofun.ro Curs Gratuit Arduino si Robotica
Arduino Leonardo, accelerometru MMA8452Q si Excel
Arduino 3.3 V MMA8452Q 3.3V
Arduino GND MMA8452Q GND
Arduino SDA MMA8452Q SDA
Arduino SCL MMA8452Q SCL
MMA8452Q este un accelerometru relativ ieftin, suficient de capabil pentru pretul lui. Suporta
trei game de acceleratie (2g, 4g, 8g). Conectarea la Arduino se face folosind patru fire, ca in figura de
mai sus. Putem utiliza un accelerometru de acest tip impreuna cu un Arduino Leonardo pentru a
construi o aplicatie ce detecteaza vibratiile cum ar fi cele produse de un cutremur. Datele vor fi salvate
intr-un fisier excel pentru a fi stocate in caz ca vrei sa le utilizezi la ceva anume. Sau se pot construi mai
multe module de acest gen si interconectate intr-o retea iar daca sunt gestionate de catre un server pot fi
transformate intr-o adevarata retea de detectie a cutremurelor.
http://www.robofun.ro/forum
http://www.robofun.ro Curs Gratuit Arduino si Robotica
Cum functioneaza?
Accelerometrul se alimenteaza direct de la platforma Arduino si comunica cu microcontroller-ul
prin doua fire: SDA si SCL. Orice vibratie mica, orice fel de miscare aplicata accelerometrului provoaca
o schimbare la cele trei variabile de iesire. Variabilele de iesire sunt raportate la cele trei axe de
coordonate: X, Y, Z.
Astfel daca accelerometrul va sta cu axa Z perpendiculara pe planul orizontal, la iesire vei
observa trei valori. Primele doua valori, X si Y vor oscila in jurul valorii lui 0, pentru ca nu actioneaza
nici o forta asupra lor dar oscileaza pentru ca e posibil ca accelerometrul sa aibe o usoara inclinatie. Dar
asupra lui Z actioneaza forta gravitationala. Imaginea luata din Excel arata mai bine aceasta
situatie(coloanele sunt in ordinea: X, Y si Z, cel din urma fiind in jurul valorii de 250, aproximativ 1g).
Cum incarci datele in Excel ? In primul rand, vrem ca datele referitoare la vibratii sa se incarce
in Excel doar atunci cand se detecteaza vibratii si nu incontinuu. Apoi datele vor fi grupate in cate 10
esantioane si se va face o medie. Va exista si un threshold sau valoare limita, depinde cum vrei sa o
numesti.
Daca media celor 10 esantioane depaseste valoarea thresholdului atunci Arduino va incarca
datele in Excel si va realiza acest lucru pentru 10 secunde. Apoi va realiza din nou o mediere asupra
altor 10 esantioane si din nou va testa daca s-a depasit thresholdul iar daca nu, el va ramane in
standby(nu va transmite nimic in Excel).
Cum transmite Arduino Leonardo setul de date in Excel ? Arduino Leonardo se va comporta ca
o tastatura sau keyboard emulator. Exista niste functii interesante care realizeaza acest lucru si vom
vedea in continuare.
http://www.robofun.ro/forum
http://www.robofun.ro Curs Gratuit Arduino si Robotica
Codul sursa.
Avem doua directive ce reprezinta defapt librariile: I2C pentru protocol si libraria
accelerometrului. Se initializeaza si obiectul accel. Librariile se vor copia in directorul libraries din
directorul arduino.
arduino-1.0.1-windows/arduino-1.0.1/libraries/I2C/I2C.cpp
arduino-1.0.1-windows/arduino-1.0.1/libraries/I2C/I2C.h
arduino-1.0.1-windows/arduino-
1.0.1/libraries/MMA8453_n0m1/MMA8453_n0m1.cpp
arduino-1.0.1-windows/arduino-
1.0.1/libraries/MMA8453_n0m1/MMA8453_n0m1.h
#include <I2C.h>
#include <MMA8453_n0m1.h>
MMA8453_n0m1 accel;
Se declara variabilele de tip int:
int contor;
int X[10];
int Y[10];
int Z[10];
int mediaX, mediaY, mediaZ;
int thresX, thresY, thresZ;
Functia setup initializeaza variabilele declarate mai sus, adresa accelerometrului, modul de lucru
al senzorului si emularea tastaturii. Aici am stabilit si valorile de threshold si le poti modifica daca vrei sa
modifici sensibilitatea senzorului la vibratii.
void setup()
{
mediaX=0;
mediaY=0;
mediaZ=0;
thresX=10;
thresY=10;
thresZ=300;
accel.setI2CAddr(0x1D); //change your device address if necessary, default
is 0x1C
accel.dataMode(true, 2); //enable highRes 10bit, 2g range [2g,4g,8g]
Keyboard.begin();
}
Loop() este compusa din mai multe bucle for. Prima bucla se ocupa de esantionul de date, zece
la numar. Citirile de la accelerometru sunt salvate in trei vectori: X, Y, Z.
for (contor=0; contor <= 9; contor++) {
accel.update();
X[contor]=accel.x();
http://www.robofun.ro/forum
http://www.robofun.ro Curs Gratuit Arduino si Robotica
Y[contor]=accel.y();
Z[contor]=accel.z();
}
Se executa o alta bucla for care aduna toate elementele vectorilor. Adunarea se imparte la 10,
adica se realizeaza media aritmetica. Media este utila daca apare o vibratie generata de o alta sursa, care
nu ne intereseaza si vrem sa o eliminam.
for (contor=0; contor <= 9; contor++) {
mediaX=mediaX+X[contor];
mediaY=mediaY+Y[contor];
mediaZ=mediaZ+Z[contor];
}
mediaX=mediaX/10;
mediaY=mediaY/10;
mediaZ=mediaZ/10;
Se compara cele trei medii cu 3 valori de threshold iar daca una dintre cele 3 medii(am folosit
functia OR) depaseste valoarea de threshold, se incarca datele in Excel. Echivalent, daca apare o vibratie
anormala si este importanta, aceasta este salvata in Excel prin apelarea functiei tipareste(). Am introdus
si o intarziere pentru ca a emula o tastatura la o viteza foarte mare, inseamna sa soliciti procesorul putin
mai mult. Am folosit intarzierea si ca etalon pentru a crea o perioada de aproximativ 10 secunde in care
datele sunt incarcate in Excel.
if (mediaX > thresX || mediaY > thresY || mediaZ > thresZ) {
for (contor=0; contor < 50; contor++){
accel.update();
tipareste();
delay(100);
}
Functia tipareste are urmatoarea forma. Se printeaza valorile x, y si z prin functia
keyboard.print(). Dar pentru o ordonare frumoasa in Excel se transmite Enter, sageata dreapta si sageata
sus. Pentru asta se apeleaza functiile keyboard.write(). In Excel se intampla cum ai vazut in imaginea
capturata mai sus. Datele sunt ordonate de sus in jos.
void tipareste(){
Keyboard.print(accel.x());
Keyboard.write(KEY_RETURN);
Keyboard.write(KEY_RIGHT_ARROW);
Keyboard.write(KEY_UP_ARROW);
Keyboard.print(accel.y());
Keyboard.write(KEY_RETURN);
Keyboard.write(KEY_RIGHT_ARROW);
Keyboard.write(KEY_UP_ARROW);
http://www.robofun.ro/forum
http://www.robofun.ro Curs Gratuit Arduino si Robotica
Keyboard.print(accel.z());
Keyboard.write(KEY_RETURN);
Keyboard.write(KEY_RIGHT_ARROW);
Keyboard.write(KEY_UP_ARROW);
Keyboard.write(KEY_DOWN_ARROW);
Keyboard.write(KEY_LEFT_ARROW);
Keyboard.write(KEY_LEFT_ARROW);
Keyboard.write(KEY_LEFT_ARROW);
Keyboard.write(KEY_LEFT_ARROW);
}
Vedere din ansamblu:
Concluzie.
Am optat sa montez accelerometrul cu un surub direct pe Arduino, din cauza ca este simplu.
Aplicatia nu detecteaza vibratiile foarte mici. Personal am dat volumul tare pe o melodie rock dar
vibratiile produse nu au fost detectate de senzor. Aici intra in calcul si valoarea de threshold dar si
sensibilitatea accelerometrului pe gama de lucru(2, 4 sau 8g).
In schimb aplicatia da rezultate foarte bune la vibratiile banale. In cazul unui cutremur, stim ca
miscarea se poate propaga pe orizontala sau pe verticala, adica pe una dintre cele 3 axe.
Va urez succes in constructie.
http://www.robofun.ro/forum
http://www.robofun.ro Curs Gratuit Arduino si Robotica
Aceasta a fost lectia 15. In final, as vrea sa te rog sa ne oferi feedback asupra acestei
lectii, pentru a ne permite sa le facem mai bune pe urmatoarele.
Este vorba despre un sondaj cu 4 intrebari (oricare este optionala), pe care il poti
accesa dand click aici. Sondajul este complet anonim.
Sau ne poti contacta direct prin email la contact@robofun.ro .
Iti multumim,
Echipa Robofun.RO
http://www.robofun.ro/forum

Contenu connexe

Similaire à Curs gratuitarduino lectia15-seismografcuexcel

Aplicatia Calculator
Aplicatia CalculatorAplicatia Calculator
Aplicatia Calculatorkabaitimea
 
Cursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdfCursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdfChristinaArgesanu
 
Arduino comparatorul intern
Arduino comparatorul internArduino comparatorul intern
Arduino comparatorul internIulius Bors
 
Arduino comunicatie i2c
Arduino comunicatie i2cArduino comunicatie i2c
Arduino comunicatie i2cIulius Bors
 
Arduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretArduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretIulius Bors
 
Prelegere1Concepte generale ale graficii pe calculator
Prelegere1Concepte generale ale graficii pe calculatorPrelegere1Concepte generale ale graficii pe calculator
Prelegere1Concepte generale ale graficii pe calculatorSuletea Angela
 
Conector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcConector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcIulius Bors
 
Proiect tic a_2b_vaicar_sergiu
Proiect tic a_2b_vaicar_sergiuProiect tic a_2b_vaicar_sergiu
Proiect tic a_2b_vaicar_sergiuvsergiu
 
Arduino matriceled8x8
Arduino matriceled8x8Arduino matriceled8x8
Arduino matriceled8x8Iulius Bors
 
utilizarea functiilor in Excel
utilizarea functiilor in Excelutilizarea functiilor in Excel
utilizarea functiilor in Excelmirela.jipa
 
functii in Excel
functii in Excelfunctii in Excel
functii in Excelmirela.jipa
 

Similaire à Curs gratuitarduino lectia15-seismografcuexcel (20)

Aplicatia Calculator
Aplicatia CalculatorAplicatia Calculator
Aplicatia Calculator
 
Aiesec University 2012-arduino
Aiesec University 2012-arduinoAiesec University 2012-arduino
Aiesec University 2012-arduino
 
Lucr2
Lucr2Lucr2
Lucr2
 
Cap01
Cap01Cap01
Cap01
 
Cursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdfCursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdf
 
Arduino comparatorul intern
Arduino comparatorul internArduino comparatorul intern
Arduino comparatorul intern
 
Desenarea 3 d
Desenarea 3 dDesenarea 3 d
Desenarea 3 d
 
Arduino comunicatie i2c
Arduino comunicatie i2cArduino comunicatie i2c
Arduino comunicatie i2c
 
Arduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretArduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecret
 
Arduino sht11
Arduino sht11Arduino sht11
Arduino sht11
 
Arduino rtc
Arduino rtcArduino rtc
Arduino rtc
 
Prelegere1Concepte generale ale graficii pe calculator
Prelegere1Concepte generale ale graficii pe calculatorPrelegere1Concepte generale ale graficii pe calculator
Prelegere1Concepte generale ale graficii pe calculator
 
Conector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcConector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pc
 
Proiect tic a_2b_vaicar_sergiu
Proiect tic a_2b_vaicar_sergiuProiect tic a_2b_vaicar_sergiu
Proiect tic a_2b_vaicar_sergiu
 
Arduino matriceled8x8
Arduino matriceled8x8Arduino matriceled8x8
Arduino matriceled8x8
 
Tema2final
Tema2finalTema2final
Tema2final
 
utilizarea functiilor in Excel
utilizarea functiilor in Excelutilizarea functiilor in Excel
utilizarea functiilor in Excel
 
Vectori
VectoriVectori
Vectori
 
functii in Excel
functii in Excelfunctii in Excel
functii in Excel
 
Circ electr-de-tip-digital
Circ electr-de-tip-digitalCirc electr-de-tip-digital
Circ electr-de-tip-digital
 

Plus de Iulius Bors

Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduinoIulius Bors
 
Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspotIulius Bors
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803Iulius Bors
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapseIulius Bors
 
Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Iulius Bors
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionIulius Bors
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduinoIulius Bors
 
Programare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaProgramare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaIulius Bors
 
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Iulius Bors
 
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsCurs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsIulius Bors
 
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoCurs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoIulius Bors
 
Curs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriCurs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriIulius Bors
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaIulius Bors
 
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaCurs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaIulius Bors
 
Curs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareCurs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareIulius Bors
 
Cum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypiCum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypiIulius Bors
 
Asamblare statie meteo
Asamblare statie meteoAsamblare statie meteo
Asamblare statie meteoIulius Bors
 
Arduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linuxArduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linuxIulius Bors
 
Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Iulius Bors
 
Arduino uno rfidid-12
Arduino uno rfidid-12Arduino uno rfidid-12
Arduino uno rfidid-12Iulius Bors
 

Plus de Iulius Bors (20)

Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduino
 
Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspot
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapse
 
Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueedition
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduino
 
Programare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaProgramare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificiala
 
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
 
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsCurs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocs
 
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoCurs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduino
 
Curs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriCurs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uri
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistanta
 
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaCurs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzoriforta
 
Curs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareCurs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicare
 
Cum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypiCum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypi
 
Asamblare statie meteo
Asamblare statie meteoAsamblare statie meteo
Asamblare statie meteo
 
Arduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linuxArduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linux
 
Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298
 
Arduino uno rfidid-12
Arduino uno rfidid-12Arduino uno rfidid-12
Arduino uno rfidid-12
 

Curs gratuitarduino lectia15-seismografcuexcel

  • 1.
  • 2. http://www.robofun.ro Curs Gratuit Arduino si Robotica 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 / 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. http://www.robofun.ro/forum
  • 3. http://www.robofun.ro Curs Gratuit Arduino si Robotica Arduino Leonardo, accelerometru MMA8452Q si Excel Arduino 3.3 V MMA8452Q 3.3V Arduino GND MMA8452Q GND Arduino SDA MMA8452Q SDA Arduino SCL MMA8452Q SCL MMA8452Q este un accelerometru relativ ieftin, suficient de capabil pentru pretul lui. Suporta trei game de acceleratie (2g, 4g, 8g). Conectarea la Arduino se face folosind patru fire, ca in figura de mai sus. Putem utiliza un accelerometru de acest tip impreuna cu un Arduino Leonardo pentru a construi o aplicatie ce detecteaza vibratiile cum ar fi cele produse de un cutremur. Datele vor fi salvate intr-un fisier excel pentru a fi stocate in caz ca vrei sa le utilizezi la ceva anume. Sau se pot construi mai multe module de acest gen si interconectate intr-o retea iar daca sunt gestionate de catre un server pot fi transformate intr-o adevarata retea de detectie a cutremurelor. http://www.robofun.ro/forum
  • 4. http://www.robofun.ro Curs Gratuit Arduino si Robotica Cum functioneaza? Accelerometrul se alimenteaza direct de la platforma Arduino si comunica cu microcontroller-ul prin doua fire: SDA si SCL. Orice vibratie mica, orice fel de miscare aplicata accelerometrului provoaca o schimbare la cele trei variabile de iesire. Variabilele de iesire sunt raportate la cele trei axe de coordonate: X, Y, Z. Astfel daca accelerometrul va sta cu axa Z perpendiculara pe planul orizontal, la iesire vei observa trei valori. Primele doua valori, X si Y vor oscila in jurul valorii lui 0, pentru ca nu actioneaza nici o forta asupra lor dar oscileaza pentru ca e posibil ca accelerometrul sa aibe o usoara inclinatie. Dar asupra lui Z actioneaza forta gravitationala. Imaginea luata din Excel arata mai bine aceasta situatie(coloanele sunt in ordinea: X, Y si Z, cel din urma fiind in jurul valorii de 250, aproximativ 1g). Cum incarci datele in Excel ? In primul rand, vrem ca datele referitoare la vibratii sa se incarce in Excel doar atunci cand se detecteaza vibratii si nu incontinuu. Apoi datele vor fi grupate in cate 10 esantioane si se va face o medie. Va exista si un threshold sau valoare limita, depinde cum vrei sa o numesti. Daca media celor 10 esantioane depaseste valoarea thresholdului atunci Arduino va incarca datele in Excel si va realiza acest lucru pentru 10 secunde. Apoi va realiza din nou o mediere asupra altor 10 esantioane si din nou va testa daca s-a depasit thresholdul iar daca nu, el va ramane in standby(nu va transmite nimic in Excel). Cum transmite Arduino Leonardo setul de date in Excel ? Arduino Leonardo se va comporta ca o tastatura sau keyboard emulator. Exista niste functii interesante care realizeaza acest lucru si vom vedea in continuare. http://www.robofun.ro/forum
  • 5. http://www.robofun.ro Curs Gratuit Arduino si Robotica Codul sursa. Avem doua directive ce reprezinta defapt librariile: I2C pentru protocol si libraria accelerometrului. Se initializeaza si obiectul accel. Librariile se vor copia in directorul libraries din directorul arduino. arduino-1.0.1-windows/arduino-1.0.1/libraries/I2C/I2C.cpp arduino-1.0.1-windows/arduino-1.0.1/libraries/I2C/I2C.h arduino-1.0.1-windows/arduino- 1.0.1/libraries/MMA8453_n0m1/MMA8453_n0m1.cpp arduino-1.0.1-windows/arduino- 1.0.1/libraries/MMA8453_n0m1/MMA8453_n0m1.h #include <I2C.h> #include <MMA8453_n0m1.h> MMA8453_n0m1 accel; Se declara variabilele de tip int: int contor; int X[10]; int Y[10]; int Z[10]; int mediaX, mediaY, mediaZ; int thresX, thresY, thresZ; Functia setup initializeaza variabilele declarate mai sus, adresa accelerometrului, modul de lucru al senzorului si emularea tastaturii. Aici am stabilit si valorile de threshold si le poti modifica daca vrei sa modifici sensibilitatea senzorului la vibratii. void setup() { mediaX=0; mediaY=0; mediaZ=0; thresX=10; thresY=10; thresZ=300; accel.setI2CAddr(0x1D); //change your device address if necessary, default is 0x1C accel.dataMode(true, 2); //enable highRes 10bit, 2g range [2g,4g,8g] Keyboard.begin(); } Loop() este compusa din mai multe bucle for. Prima bucla se ocupa de esantionul de date, zece la numar. Citirile de la accelerometru sunt salvate in trei vectori: X, Y, Z. for (contor=0; contor <= 9; contor++) { accel.update(); X[contor]=accel.x(); http://www.robofun.ro/forum
  • 6. http://www.robofun.ro Curs Gratuit Arduino si Robotica Y[contor]=accel.y(); Z[contor]=accel.z(); } Se executa o alta bucla for care aduna toate elementele vectorilor. Adunarea se imparte la 10, adica se realizeaza media aritmetica. Media este utila daca apare o vibratie generata de o alta sursa, care nu ne intereseaza si vrem sa o eliminam. for (contor=0; contor <= 9; contor++) { mediaX=mediaX+X[contor]; mediaY=mediaY+Y[contor]; mediaZ=mediaZ+Z[contor]; } mediaX=mediaX/10; mediaY=mediaY/10; mediaZ=mediaZ/10; Se compara cele trei medii cu 3 valori de threshold iar daca una dintre cele 3 medii(am folosit functia OR) depaseste valoarea de threshold, se incarca datele in Excel. Echivalent, daca apare o vibratie anormala si este importanta, aceasta este salvata in Excel prin apelarea functiei tipareste(). Am introdus si o intarziere pentru ca a emula o tastatura la o viteza foarte mare, inseamna sa soliciti procesorul putin mai mult. Am folosit intarzierea si ca etalon pentru a crea o perioada de aproximativ 10 secunde in care datele sunt incarcate in Excel. if (mediaX > thresX || mediaY > thresY || mediaZ > thresZ) { for (contor=0; contor < 50; contor++){ accel.update(); tipareste(); delay(100); } Functia tipareste are urmatoarea forma. Se printeaza valorile x, y si z prin functia keyboard.print(). Dar pentru o ordonare frumoasa in Excel se transmite Enter, sageata dreapta si sageata sus. Pentru asta se apeleaza functiile keyboard.write(). In Excel se intampla cum ai vazut in imaginea capturata mai sus. Datele sunt ordonate de sus in jos. void tipareste(){ Keyboard.print(accel.x()); Keyboard.write(KEY_RETURN); Keyboard.write(KEY_RIGHT_ARROW); Keyboard.write(KEY_UP_ARROW); Keyboard.print(accel.y()); Keyboard.write(KEY_RETURN); Keyboard.write(KEY_RIGHT_ARROW); Keyboard.write(KEY_UP_ARROW); http://www.robofun.ro/forum
  • 7. http://www.robofun.ro Curs Gratuit Arduino si Robotica Keyboard.print(accel.z()); Keyboard.write(KEY_RETURN); Keyboard.write(KEY_RIGHT_ARROW); Keyboard.write(KEY_UP_ARROW); Keyboard.write(KEY_DOWN_ARROW); Keyboard.write(KEY_LEFT_ARROW); Keyboard.write(KEY_LEFT_ARROW); Keyboard.write(KEY_LEFT_ARROW); Keyboard.write(KEY_LEFT_ARROW); } Vedere din ansamblu: Concluzie. Am optat sa montez accelerometrul cu un surub direct pe Arduino, din cauza ca este simplu. Aplicatia nu detecteaza vibratiile foarte mici. Personal am dat volumul tare pe o melodie rock dar vibratiile produse nu au fost detectate de senzor. Aici intra in calcul si valoarea de threshold dar si sensibilitatea accelerometrului pe gama de lucru(2, 4 sau 8g). In schimb aplicatia da rezultate foarte bune la vibratiile banale. In cazul unui cutremur, stim ca miscarea se poate propaga pe orizontala sau pe verticala, adica pe una dintre cele 3 axe. Va urez succes in constructie. http://www.robofun.ro/forum
  • 8. http://www.robofun.ro Curs Gratuit Arduino si Robotica Aceasta a fost lectia 15. In final, as vrea sa te rog sa ne oferi feedback asupra acestei lectii, pentru a ne permite sa le facem mai bune pe urmatoarele. Este vorba despre un sondaj cu 4 intrebari (oricare este optionala), pe care il poti accesa dand click aici. Sondajul este complet anonim. Sau ne poti contacta direct prin email la contact@robofun.ro . Iti multumim, Echipa Robofun.RO http://www.robofun.ro/forum