SlideShare a Scribd company logo
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.
Arduino UNO si senzorul de vibratii brick
Senzorul de vibratii brick este o componenta care sesizeaza vibratiile mecanice (este capabil sa
detecteze vibratiile de genul unei batai in usa). In acest tutorial, vei conecta senzorul de vibratii brick
direct la placa Arduino si vei utiliza 3 led-uri brick (portocaliu, rosu, verde) pentru a evidentia
comportamentul senzorului.
Al doilea exemplu pe care il vom discuta va fi cel al unei yale electronice care deschide usa
atunci cand bati in usa conform unui anumit cod. Mai exact, daca bati in usa conform cu un anumit
tipar, senzorul va detecta vibratiile iar Arduino le va compara cu un model deja existent in memoria lui.
Daca tiparele se potrivesc, se va aprinde led-ul portocaliu, echivalentul deblocarii usii.
Proiectul complet il vei gasi la adresa de mai jos:
http://www.instructables.com/id/Secret-Knock-Detecting-Door-Lock/?ALLSTEPS
http://www.robofun.ro/forum
Nu trebuie decat sa bati in usa dupa modelul explicat in link-ul de mai sus (in pagina, il vei gasi
cu numele: "Shave and a Hair Cut, two bits.") iar led-ul portocaliu se va aprinde.
In imagine este prezent si un buton. Este necesar doar atunci cand incarci sketch-ul de la adresa
anterioara. In cazul tau, poti conecta foarte usor un buton brick.
Vei avea nevoie de urmatoarele componente:
• Arduino UNO.
• Senzor de vibratii brick.
• 3 led-uri brick.
• Fire pentru conexiuni.
• Breadboard.
Tabelul de conexiuni este mai jos.
Senzor vibratii pin IN Arduino analog A0
Senzor vibratii pin Gnd Arduino Gnd
Led brick portocaliu pin IN Arduino digital 3
Led brick rosu pin IN Arduino digital 4
Led brick verde pin IN Arduino digital 5
Led brick portocaliu pin Gnd Arduino Gnd
Led brick rosu pin Gnd Arduino Gnd
Led brick verde pin Gnd Arduino Gnd
Ce incarc in Arduino ?
Mai jos este listat sketch-ul (varianta simplista). Il copiezi (copy/paste) direct in mediul de
programare Arduino si il incarci in placa Arduino UNO.
Incearca sa bati in apropierea senzorului ca si cum ai bate intr-o usa. Daca ai batut dupa
modelul "Shave and a Hair Cut, two bits." (explicat in link-ul de mai sus - Instructables), led-ul verde se
aprinde urmarind fiecare bataie. La sfarsit, daca modelul de batai este recunoscut cu cel din memoria
interna, se aprinde led-ul portocaliu. In caz contrar, se aprinde led-ul rosu intr-o scurta secventa.
Daca vrei sa te asiguri ca bataile sunt detectate corect, deschide monitorul serial si vei obtine
ceva ca in imaginea de mai jos.
http://www.robofun.ro/forum
Codul sursa.
Codul sursa de mai jos este o varianta mult simplificata a celui prezentat in Instructables (spre
exemplu, nu poti inregistra un nou tipar).
const int senzorVibratii = 0;
const int ledPortocaliu = 3;
const int ledRosu = 4;
const int ledVerde = 5;
const int pragDetectie = 3;
const int gradRespingere = 25;
const int gradMediuRespingere = 15;
const int perioadaOFF = 150;
const int perioadaON = 650;
const int bataiMax = 20;
const int perioadaTotala = 1200;
int modelBatai[bataiMax] = {50, 25, 25, 50, 100, 50, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0};
int bufferCitiri[bataiMax];
int nivelSenzor = 0;
http://www.robofun.ro/forum
void setup() {
pinMode(ledPortocaliu, OUTPUT);
pinMode(ledRosu, OUTPUT);
pinMode(ledVerde, OUTPUT);
Serial.begin(9600);
Serial.println("Start program.");
digitalWrite(ledVerde, HIGH);
}
void loop() {
nivelSenzor = analogRead(senzorVibratii);
if (nivelSenzor >=pragDetectie){
capturaTipar();
}
}
void capturaTipar(){
Serial.println("S-a detectat o bataie");
int i = 0;
for (i=0;i<bataiMax;i++){
bufferCitiri[i]=0;
}
int indexBatai=0;
int perioadaStart=millis();
int perioadaCurenta=millis();
digitalWrite(ledVerde, LOW);
delay(perioadaOFF);
digitalWrite(ledVerde, HIGH);
do {
nivelSenzor = analogRead(senzorVibratii);
if (nivelSenzor >=pragDetectie){
Serial.println("cioc.");
perioadaCurenta=millis();
bufferCitiri[indexBatai] = perioadaCurenta-perioadaStart;
indexBatai ++;
perioadaStart=perioadaCurenta;
digitalWrite(ledVerde, LOW);
delay(perioadaOFF);
digitalWrite(ledVerde, HIGH);
}
perioadaCurenta=millis();
http://www.robofun.ro/forum
} while ((perioadaCurenta-perioadaStart < perioadaTotala) &&
(indexBatai < bataiMax));
if (modelValid() == true){
activeazaLED();
} else {
Serial.println("Tipar de batai incorect.");
digitalWrite(ledVerde, LOW);
for (i=0;i<4;i++){
digitalWrite(ledRosu, HIGH);
delay(100);
digitalWrite(ledRosu, LOW);
delay(100);
}
digitalWrite(ledVerde, HIGH);
}
}
void activeazaLED(){
Serial.println("Tipar de batai corect. Usa deblocata.");
int i=0;
digitalWrite(ledPortocaliu, HIGH);
digitalWrite(ledVerde, HIGH);
delay (perioadaON);
digitalWrite(ledPortocaliu, LOW);
digitalWrite(ledVerde, LOW);
}
boolean modelValid(){
int i=0;
int indexBataieCurenta = 0;
int indexBataieModel = 0;
int intervalMaximBatai = 0;
for (i=0;i<bataiMax;i++){
if (bufferCitiri[i] > 0){
indexBataieCurenta++;
}
if (modelBatai[i] > 0){
indexBataieModel++;
}
if (bufferCitiri[i] > intervalMaximBatai){
intervalMaximBatai = bufferCitiri[i];
}
}
if (indexBataieCurenta != indexBataieModel){
http://www.robofun.ro/forum
return false;
}
int diferentaTotala=0;
int diferentaTimp=0;
for (i=0;i<bataiMax;i++){
bufferCitiri[i]= map(bufferCitiri[i],0, intervalMaximBatai, 0,
100);
diferentaTimp = abs(bufferCitiri[i]-modelBatai[i]);
if (diferentaTimp > gradRespingere){
return false;
}
diferentaTotala += diferentaTimp;
}
if (diferentaTotala/indexBataieModel>gradMediuRespingere){
return false;
}
return true;
}
http://www.robofun.ro/forum

More Related Content

PDF
Curs gratuitarduino lectia4-modalitati decomunicare
PDF
Curs gratuitarduino lectia8-comunicareethernet
PDF
Curs gratuitarduino lectia10-lcd-uri
PDF
Curs gratuitarduino lectia5-accelerometre
PDF
Curs gratuitarduino lectia3-proiectesimple-1
PDF
Curs gratuitarduino lectia2-senzorianalogici
PDF
Curs gratuitarduino lectia6-senzoriforta
PDF
Curs gratuitarduino lectia1-arduinoblink
Curs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia5-accelerometre
Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia2-senzorianalogici
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia1-arduinoblink

What's hot (12)

PDF
Curs gratuitarduino lectia9-senzoriatmosferici
PDF
Curs gratuitarduino lectia11-muzicacuarduino
PDF
Curs gratuitarduino lectia12-conexiunewifi-googledocs
PDF
Curs gratuitarduino lectia7-senzoridistanta
PDF
Motoare pascupasarduinoeasydriver
PDF
Arduino comparatorul intern
PPT
Aiesec University 2012-arduino
PDF
Arduino uno rfidid-12
PDF
Conector bluetoothmatesilver arduino-pc
PDF
Curs gratuitarduino lectia13-mousesitastatura
PDF
Arduino comunicatie i2c
PDF
Arduino matriceled8x8
Curs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia7-senzoridistanta
Motoare pascupasarduinoeasydriver
Arduino comparatorul intern
Aiesec University 2012-arduino
Arduino uno rfidid-12
Conector bluetoothmatesilver arduino-pc
Curs gratuitarduino lectia13-mousesitastatura
Arduino comunicatie i2c
Arduino matriceled8x8
Ad

Viewers also liked (17)

PDF
Arduino yun arduino-wifi-ethernet-linux
PDF
Arduino releemodio2
PDF
Raspberry pi firmata - arduino
PDF
Arduino wifi shield-drivermotoarel298
PDF
Curs gratuitarduino lectia15-seismografcuexcel
PDF
Cum instaleziapachesimysql peraspberrypi
PDF
Arduino flexsensorbrickbionicfinger
PDF
Arduino pid
PDF
Programare in prolog_pentru_inteligenta_artificiala
PDF
Arduino indicatoare cp-usiram
PDF
Set prizecomandatedinarduino
PDF
Raspberry pi bmp085blueedition
PDF
Asamblare statie meteo
PDF
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
PDF
Raspberry piuln2803
PDF
Arduino toraspberrypi firmata
PDF
Arduino multiplexarea le-durilor
Arduino yun arduino-wifi-ethernet-linux
Arduino releemodio2
Raspberry pi firmata - arduino
Arduino wifi shield-drivermotoarel298
Curs gratuitarduino lectia15-seismografcuexcel
Cum instaleziapachesimysql peraspberrypi
Arduino flexsensorbrickbionicfinger
Arduino pid
Programare in prolog_pentru_inteligenta_artificiala
Arduino indicatoare cp-usiram
Set prizecomandatedinarduino
Raspberry pi bmp085blueedition
Asamblare statie meteo
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Raspberry piuln2803
Arduino toraspberrypi firmata
Arduino multiplexarea le-durilor
Ad

Similar to Arduino yala electronicabazatapecodsecret (9)

PDF
Arduino sht11
PDF
Arduino alcoolmetru
PDF
Arduino rtc
PDF
Adxl345 raspberry pi
PDF
Arduino gsm gprs shield
PDF
Arduino gsmgprs-shield-partea-a-2-a
PDF
Arduino protocolul 1 wire
PDF
Arduino tv out
PDF
Arduino mod-gps
Arduino sht11
Arduino alcoolmetru
Arduino rtc
Adxl345 raspberry pi
Arduino gsm gprs shield
Arduino gsmgprs-shield-partea-a-2-a
Arduino protocolul 1 wire
Arduino tv out
Arduino mod-gps

Arduino yala electronicabazatapecodsecret

  • 1. 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.
  • 2. Arduino UNO si senzorul de vibratii brick Senzorul de vibratii brick este o componenta care sesizeaza vibratiile mecanice (este capabil sa detecteze vibratiile de genul unei batai in usa). In acest tutorial, vei conecta senzorul de vibratii brick direct la placa Arduino si vei utiliza 3 led-uri brick (portocaliu, rosu, verde) pentru a evidentia comportamentul senzorului. Al doilea exemplu pe care il vom discuta va fi cel al unei yale electronice care deschide usa atunci cand bati in usa conform unui anumit cod. Mai exact, daca bati in usa conform cu un anumit tipar, senzorul va detecta vibratiile iar Arduino le va compara cu un model deja existent in memoria lui. Daca tiparele se potrivesc, se va aprinde led-ul portocaliu, echivalentul deblocarii usii. Proiectul complet il vei gasi la adresa de mai jos: http://www.instructables.com/id/Secret-Knock-Detecting-Door-Lock/?ALLSTEPS http://www.robofun.ro/forum
  • 3. Nu trebuie decat sa bati in usa dupa modelul explicat in link-ul de mai sus (in pagina, il vei gasi cu numele: "Shave and a Hair Cut, two bits.") iar led-ul portocaliu se va aprinde. In imagine este prezent si un buton. Este necesar doar atunci cand incarci sketch-ul de la adresa anterioara. In cazul tau, poti conecta foarte usor un buton brick. Vei avea nevoie de urmatoarele componente: • Arduino UNO. • Senzor de vibratii brick. • 3 led-uri brick. • Fire pentru conexiuni. • Breadboard. Tabelul de conexiuni este mai jos. Senzor vibratii pin IN Arduino analog A0 Senzor vibratii pin Gnd Arduino Gnd Led brick portocaliu pin IN Arduino digital 3 Led brick rosu pin IN Arduino digital 4 Led brick verde pin IN Arduino digital 5 Led brick portocaliu pin Gnd Arduino Gnd Led brick rosu pin Gnd Arduino Gnd Led brick verde pin Gnd Arduino Gnd Ce incarc in Arduino ? Mai jos este listat sketch-ul (varianta simplista). Il copiezi (copy/paste) direct in mediul de programare Arduino si il incarci in placa Arduino UNO. Incearca sa bati in apropierea senzorului ca si cum ai bate intr-o usa. Daca ai batut dupa modelul "Shave and a Hair Cut, two bits." (explicat in link-ul de mai sus - Instructables), led-ul verde se aprinde urmarind fiecare bataie. La sfarsit, daca modelul de batai este recunoscut cu cel din memoria interna, se aprinde led-ul portocaliu. In caz contrar, se aprinde led-ul rosu intr-o scurta secventa. Daca vrei sa te asiguri ca bataile sunt detectate corect, deschide monitorul serial si vei obtine ceva ca in imaginea de mai jos. http://www.robofun.ro/forum
  • 4. Codul sursa. Codul sursa de mai jos este o varianta mult simplificata a celui prezentat in Instructables (spre exemplu, nu poti inregistra un nou tipar). const int senzorVibratii = 0; const int ledPortocaliu = 3; const int ledRosu = 4; const int ledVerde = 5; const int pragDetectie = 3; const int gradRespingere = 25; const int gradMediuRespingere = 15; const int perioadaOFF = 150; const int perioadaON = 650; const int bataiMax = 20; const int perioadaTotala = 1200; int modelBatai[bataiMax] = {50, 25, 25, 50, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int bufferCitiri[bataiMax]; int nivelSenzor = 0; http://www.robofun.ro/forum
  • 5. void setup() { pinMode(ledPortocaliu, OUTPUT); pinMode(ledRosu, OUTPUT); pinMode(ledVerde, OUTPUT); Serial.begin(9600); Serial.println("Start program."); digitalWrite(ledVerde, HIGH); } void loop() { nivelSenzor = analogRead(senzorVibratii); if (nivelSenzor >=pragDetectie){ capturaTipar(); } } void capturaTipar(){ Serial.println("S-a detectat o bataie"); int i = 0; for (i=0;i<bataiMax;i++){ bufferCitiri[i]=0; } int indexBatai=0; int perioadaStart=millis(); int perioadaCurenta=millis(); digitalWrite(ledVerde, LOW); delay(perioadaOFF); digitalWrite(ledVerde, HIGH); do { nivelSenzor = analogRead(senzorVibratii); if (nivelSenzor >=pragDetectie){ Serial.println("cioc."); perioadaCurenta=millis(); bufferCitiri[indexBatai] = perioadaCurenta-perioadaStart; indexBatai ++; perioadaStart=perioadaCurenta; digitalWrite(ledVerde, LOW); delay(perioadaOFF); digitalWrite(ledVerde, HIGH); } perioadaCurenta=millis(); http://www.robofun.ro/forum
  • 6. } while ((perioadaCurenta-perioadaStart < perioadaTotala) && (indexBatai < bataiMax)); if (modelValid() == true){ activeazaLED(); } else { Serial.println("Tipar de batai incorect."); digitalWrite(ledVerde, LOW); for (i=0;i<4;i++){ digitalWrite(ledRosu, HIGH); delay(100); digitalWrite(ledRosu, LOW); delay(100); } digitalWrite(ledVerde, HIGH); } } void activeazaLED(){ Serial.println("Tipar de batai corect. Usa deblocata."); int i=0; digitalWrite(ledPortocaliu, HIGH); digitalWrite(ledVerde, HIGH); delay (perioadaON); digitalWrite(ledPortocaliu, LOW); digitalWrite(ledVerde, LOW); } boolean modelValid(){ int i=0; int indexBataieCurenta = 0; int indexBataieModel = 0; int intervalMaximBatai = 0; for (i=0;i<bataiMax;i++){ if (bufferCitiri[i] > 0){ indexBataieCurenta++; } if (modelBatai[i] > 0){ indexBataieModel++; } if (bufferCitiri[i] > intervalMaximBatai){ intervalMaximBatai = bufferCitiri[i]; } } if (indexBataieCurenta != indexBataieModel){ http://www.robofun.ro/forum
  • 7. return false; } int diferentaTotala=0; int diferentaTimp=0; for (i=0;i<bataiMax;i++){ bufferCitiri[i]= map(bufferCitiri[i],0, intervalMaximBatai, 0, 100); diferentaTimp = abs(bufferCitiri[i]-modelBatai[i]); if (diferentaTimp > gradRespingere){ return false; } diferentaTotala += diferentaTimp; } if (diferentaTotala/indexBataieModel>gradMediuRespingere){ return false; } return true; } http://www.robofun.ro/forum