RI Lucrare7

5
Lucrarea 7 Aplicaţii utilizand senzorul de sunet

description

RILucrare

Transcript of RI Lucrare7

Page 1: RI Lucrare7

Lucrarea 7

Aplicaţii utilizand senzorul de sunet

Page 2: RI Lucrare7

Fisier NXC necesar pentru trasarea caracteristicii senzorului:#define NUME_FISIER "RaspSnzSunet.txt" // numele fisierul in care sunt salvate datele#define DIM_VECTOR 2000 // nr de puncte ale caracteristicii senzorului// Variabile:byte File_handle;unsigned short bytesWritten;

task main(){

short ValSnz[DIM_VECTOR]; // vector in care sunt stocate dateleshort val_senzor;short k;short temp;string temp_string;

SetSensorSound(IN_2); // setare senzor de sunet conectat la portul de intrare identificat prin constanta IN_2for (k=0;k<DIM_VECTOR;k++){

ValSnz[k] = Sensor(IN_2);Wait(5); // pt citire la 5 ms

}TextOut(0,LCD_LINE4,"GATA");Wait(500);

//-------------------------------------------------------// Salveaza datele in fisierul NUME_FISIER//-------------------------------------------------------DeleteFile(NUME_FISIER);CreateFile(NUME_FISIER, 8192, File_handle); // creeaza fisierul cu date de iesire, alocandu-i 4kBfor (k = 0; k < DIM_VECTOR; k++){

temp = ValSnz[k];temp_string = NumToStr(temp);WriteLnString(File_handle,temp_string, bytesWritten);

}CloseFile(File_handle);

}

Trasarea caracteristicii senzorului de sunet pentrubătut din palme şi comandă verbală.

Page 3: RI Lucrare7

Descarca de pe robot pe PC, prin USB, fisierul text cu numele"RaspSnzSunet.txt“. Fisierul contine datele citite de la senzorul de sunetsalvate pe robot la rularea programului anterior.

Programe si fisiereexistente pe robot

Fisiere existentepe PC

Page 4: RI Lucrare7

/* Robotul mobil este pus in miscare sau oprit la citirea unei batai din palme de la senzorul de sunet. Doua batai din palme vor semnifica viraj catre o stanga sau dreapta */// intervalul maxim intre doua batai consecutive pt care se considera o bataie dubla#define INTERVAL_ASTEPTARE_A_DOUA_BATAIE 800 // [ms]// interval introdus dupa detectarea unei batai, pt a lasa timp sa scada nivelul de sunet la nivelul de zgomot de fond// Intervalul trebuie sa fie mai mare decat durata unei batai din palme#define INTERVAL_ASTEPTARE_CITIRE_URMATOARE 400 // [ms]int val_senzor;int val_prag_superior = 60;int pwr = 50;bool pornit; // indicator al starii de miscare a robotului (pornit / oprit)byte comanda; // variabila pentru interpretarea batailor din palmebyte numar_batai; // contor pt numarul de batai consecutiveunsigned long interval; // interval timp intre doua batai consecutiveunsigned long tick_anterior; // valoarea ceasului de sistem la citirea anterioaratask main(){

SetSensorSound(S3);pornit = false;numar_batai = 0;comanda = 0;tick_anterior = CurrentTick();while(true){

val_senzor = Sensor(S3); // Citire senzor de sunetinterval = CurrentTick() - tick_anterior;// Testeaza daca s-a auzit bataieif (val_senzor > val_prag_superior){

numar_batai++;if (numar_batai == 2){

comanda = 2;numar_batai = 0;

}tick_anterior = CurrentTick();Wait(INTERVAL_ASTEPTARE_CITIRE_URMATOARE);

}else

// testeaza daca a expirat timpul intre momentul bataii anterioare si momentul curentif ((numar_batai == 1) && (interval > INTERVAL_ASTEPTARE_A_DOUA_BATAIE)){

comanda = 1;numar_batai = 0;

}else

comanda = 0;

Aplicatie demonstrativa

Page 5: RI Lucrare7

//continuare

// Executie comenzi pe baza interpretariiif (comanda == 1){

if(pornit == true){// se va completa prin oprirea celor doua motare prin franare electrica

//………………………………………………………………………………………………………………………………………………………………………………………Wait(50); // Asteapta un timp pt franareFloat(OUT_BC); // Opreste alimentarea pt a nu tine motoarele blocate in repauspornit = false;

}else{

OnFwd(OUT_BC,pwr);pornit = true;

}}

else if (comanda == 2){

// se va completa prin viraj spre stanga sau dreapta// opreste un motor prin franare electrica

//………………………………………………………………………………………………………………………………………………………………………………………Wait(50); // Asteapta un timp pt franareFloat(OUT_C); // Opreste alimentarea pt a nu tine motorul blocat in repausOnFwd(OUT_B,pwr);Wait(5);pornit = true;

}}

}