Operácie

Ovládanie aplikácie cez gesture senzor Si1143: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentDVPS (diskusia | príspevky)
StudentDVPS (diskusia | príspevky)
Riadok 45: Riadok 45:
*Komunikačná zbernica:      '''I2C'''
*Komunikačná zbernica:      '''I2C'''
*Rozmer: '''5.08 x 5.79 x 0.48 cm'''
*Rozmer: '''5.08 x 5.79 x 0.48 cm'''
*Operačná teplota: '''-40 to 85 °C'''
*Operačná teplota: '''-40 do 85 °C'''
* Vzorkovacia perióda: '''100 snímkov/sekundu'''


'''Popis práce snímaća:''
*Snímač je vybavený foto diódami na zachytávanie viditeľného a odrazeného svetla. Snímač obsahuje 3 takéto diódy ktoré sa zapínajú postupne nie naraz, čo umožnuje zistiť pre každú diódu koľko svetla zachytila. Hlavné výhody tohto snímača sú:
*1 - nízka spotreba
'
'''Popis vyvodov''':
'''Popis vyvodov''':


[[Súbor:Si1143vyvody.png]]
[[Súbor:Si1143vyvody.png]]
{|
|'''C'''
|'''Pin'''
|'''Typ'''
|'''Funkcia'''
|----
|1
|GND
|Napájanie
|Zem
|----
|2
|VIN
|Napájanie
|Napájacie napätie
|----
|3
|INT
|Výstup
|Prerušenie(nepripojené)
|----
|4
|SCL
|Vstup
|I2C hodinová linka
|----
|5
|SDA
|Vstup/Výstup
|I2C dátová linka
|----
|}
+++V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje,  
+++V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje,  
+++ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:
+++ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:


+++* popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
+++* popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
+++* obrázok zapojenia vývodov použitej súčiastky
+++* obrázok zapojenia vývodov použitej súčiastky done


+++* priebehy dôležitých signálov
+++* priebehy dôležitých signálov

Verzia z 07:57, 24. máj 2016

Autori: Matúš Rus, Matej Cehula
Študijný odbor: Aplikovaná mechatronika a elektromobilita
Ročník: 1. Ing. (2015/2016)



Zadanie

Navrhnite ovládanie vybranej aplikácie cez gesture sensor Si1143 (Parallax).

Treba popísať ako senzor funguje, čo všetko sa ním dá merať, pripojiť ho k procesoru a vymyslieť ukážkovú aplikáciu.

  • Na základe predošlých vedomostí navrhnite spôsob pripojenia k riadiacej jednotke
  • Napíšte základný demonštračný program využívajúci vaše funkcie
  • Vymyslite a demonštrujte vhodnú aplikáciu
  • Dokumentáciu odovzdajte prostredníctvom tejto wiki stránky.
Obr. 1. Senzor Si1143 (Parallax)



Literatúra:

Analýza

V našom projekte sme si vybrali proximitny snímač Parallax Si1143.

Popis snímača:

  • Napájacie napätie: <3-5.5>
  • Maximalny prúd: 4mA
  • Komunikačná zbernica: I2C
  • Rozmer: 5.08 x 5.79 x 0.48 cm
  • Operačná teplota: -40 do 85 °C
  • Vzorkovacia perióda: 100 snímkov/sekundu

'Popis práce snímaća:

  • Snímač je vybavený foto diódami na zachytávanie viditeľného a odrazeného svetla. Snímač obsahuje 3 takéto diódy ktoré sa zapínajú postupne nie naraz, čo umožnuje zistiť pre každú diódu koľko svetla zachytila. Hlavné výhody tohto snímača sú:
  • 1 - nízka spotreba

' Popis vyvodov:

C Pin Typ Funkcia
1 GND Napájanie Zem
2 VIN Napájanie Napájacie napätie
3 INT Výstup Prerušenie(nepripojené)
4 SCL Vstup I2C hodinová linka
5 SDA Vstup/Výstup I2C dátová linka


+++V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje, +++ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:

+++* popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.) +++* obrázok zapojenia vývodov použitej súčiastky done

+++* priebehy dôležitých signálov +++* este jedna polozka

Popis riešenia

Najprv sme si naštudovali základne funkcie senzora Si1143. Ako senzor funguje, ako ho treba zapojiť a pod. Začali sme písať zdrojový kód. Po napísaní základného kódu sme si overili či sme senzor dobre zapojili a či funguje správne. Zistili sme senzor nie je taký presný ako sme čakali. Prvý nápad bol aby senzor kopíroval náš prst a podľa jeho pohybu vykresľoval čiaru. Senzor zvláda len základne gestá napr. prejdenie rukov hore, dole, doprava a pod. Po zvážení sme si vymysleli novú hru VYBER LED. V programe sme si odfiltrovali údaje a tak zistili kde sa prst nachádza. Program je taktiež náchylný na vzdialenosť a musíme si dávať pozor aby sme inými časťami tela nezakrývali LEDky.


Obr. 2. Schéma zapojenia snímača


Obr. 3. Náhľad do hry


Algoritmus a program

Náš software sme navrhli vo vývojovom prostredí Arduino, kde sme využili znalosti z programovaného jazyka C/C++. V našom algoritme sme využili dva stupne filtrácie vstupného signálu, na presnejšie určenie vybratej LED. Vizuálnu časť nášho zadania sme takisto riešili v tomto vývojovom prostredí a síce iba jednoduchým výpisom do programovacieho okna, nakoľko naša zručnosť s vizualizácia je nízka.


Obr. 4. Vývojový diagram programu

Časť 1. Zadefinovanie premenných

/* Si1143 Example */


#define sleep  100
#include <Wire.h>
#include "Si1143.h";

int bias1,bias2,bias3;
unsigned int PS1,PS2,PS3;
int blinktime,counter,counter1,counter2,Ledposition;
unsigned int Light_Reading;
byte LowB,HighB;
bool selected;
unsigned long time;

Časť 2.Funkcia setup

void setup()
{
  Serial.begin(9600);
  delay(25);
  Wire.begin(); // join i2c bus (address optional for master)
  delay(25);
 
  write_reg(HW_KEY, 0x17); // Setting up LED Power to full
  write_reg(PS_LED21,0xFF);
  write_reg(PS_LED3, 0x0F);
  param_set(CHLIST,0b00010111);
 
  char parameter = read_reg(PARAM_RD,1);
  delay(1000);
 
  bias();
 
  counter = 0;
  counter1 = 0;
  counter2 = 0;
  selected = 0;
  StartGame();
}


Časť 3. Funkcia vykonávajúca filtráciu signálu a vyhodnocovanie hry

void do_magic(){
  
  
 
  diff1 = PS1-PS1_old;
  diff2 = PS2-PS2_old;
  diff3 = PS3-PS3_old;
  diff1=abs(diff1);
  diff2=abs(diff2);
  diff3=abs(diff3);
  
  PS1_old=PS1;
  PS2_old=PS2;
  PS3_old=PS3;
 
  
  
  if(diff1>diff2 && diff1 >diff3){
     if(sum2>0 || sum3 >0){
      sum2=0; sum3=0;
    }
    sum1=sum1+1;   
    
  }else if(diff2> diff1 && diff2 >diff3){
     if(sum1>0 || sum2 >0){
      sum1=0; sum3=0;
    }
    sum2=sum2+1;
    
  }else if(diff3>diff1 && diff3>diff2){    
    if(sum1>0 || sum2 >0){
      sum1=0; sum2=0;
    }
    sum3=sum3+1;
  }
if(sum1>0 || sum2>0 || sum3 > 0){
  if(sum1>4 && rand1==1){
    Serial.println("vybrata je LED1");
    sum1=0;
    succes=true;
    Serial.println("Vyhra");
  }
   if(sum2>4 && rand1==2){
    Serial.println("vybrata je LED2");
    sum2=0;
    succes=true;
    Serial.println("Vyhra");
  }
   if(sum3>4 && rand1==3){
      Serial.println("vybrata je LED3");
      sum3=0;
      succes=true;
      Serial.println("Vyhra");
  }
   if(succes){
  rand1=random(1,4);
  
  if(rand1>=1 && rand1<2){
    rand1=1;
  }else if(rand1>=2 && rand1<3){
    rand1 =2;
  }else{
    rand1=3;
  }
  
  time = millis();
  aktual=time-timing;
  timing=time;
  switch(rand1){
  case 1:
    Serial.println("Priloz prst k LED cislo 1");
   break;
   case 2:
    Serial.println("Priloz prst k LED cislo 2");
  break;  
   case 3:
    Serial.println("Priloz prst k LED cislo 3");
  break;
  
  }
   Serial.print("Time: ");
   Serial.println(aktual);
   succes=false;
  }
}
delay(10);
}

Časť 5. Vypis úvodneho zobrazenia programu

void StartGame(){
Serial.println("                            HRA: VYBER LED                ");
Serial.println("CIEL: Priloz prst co najrychlejsie k spravnej LEDke senzora podla  zobrazenia na monitore");
Serial.println("INSTRUKCIE: Rozlozenie LEDiek na snimaci:");
Serial.println("        LED2");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("         - ");
Serial.println("        LED1 -------------------- LED3 ");
Serial.println(" ");
Serial.println("Hra zacne prilozenim prstu k  LED3 na senzore ");

}


Zdrojový kód: Si1143.h, Si1143.c, main.c

Záver

Naša hra sa volá jednoducho a výstižne "VYBER LED". Ciel tejto hry je priložiť prst k správnej LEDke senzora podľa zobrazenia na monitore. Led sa nachádza na každom rohu našého senzora v tvare L vid obrázok vyššie. Hra začne keď priložíte prst k LED3. Takto program počká aby ste si naštudovali návod a pochopili hru. Ak ste pripravený priložíte prst a čas vám beží. Program náhodne generuje LED1, LED2 alebo LED3. Po priložení Vám vypíše čas v milisekundách za aký ste to stihli.