Ovládanie aplikácie cez gesture senzor Si1143: Rozdiel medzi revíziami
Zo stránky SensorWiki
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 | *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.
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.
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.
Č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.