Arduino Uno + TM1638 + TSOP31238 + IR pultelis

27 06 2012

Jau nuo seno stalčiuje guli TSOP31238 komponentas, skirtas IR bangomis siunčiamo signalo priėmimui 38MHz dažniu. Testini projektuką įgyvendinsiu naudojat TM1638 modulį bei seną
distancinio valdymo pultelį nuo nežinia kur pradingusio TV tunerio.

Pajungimas

10208983

Kaip matome pajungti TSOP31238 yra labai lengvą, pakanka jam paduoti +5 ir GND, o likusi koja mums gražins skaitmeninį signalą. Aš savo schemoje bei programoje naudojau 11 įėjimą, tačiau
galima naudoti bet kurį.

Programavimas

IR signalui priimti ir apdoroti naudojuosi labai gera biblioteka IRremote kurią galite parsisiųsti iš čia. Ten pat rasite neblogą pavyzdį kaip naudotis ją.
Savo programoje kaip ir pavyzdyje nuskaitymą vykdau sekančiai:

if (irrecv.decode(&results))
{
long search = results.value;
}

Vėliau turimą “search” kintamajį galime naudoti taip, kaip mes norime. Aš pirmiausiai nusiskaičiau visų mygtukų kodus ir juos apsirašiau programos viršuje:

#define POWER 0x61D67887
#define TVFM 0x61D6C03F
#define SOURCE 0x61D6E01F
#define SCAN 0x61D638C7
#define MUTE 0x61D618E7
//#define FMSCANPOZ 0x61D6F807 //toks pats kaip VOLPOZ
//#define FMSCANNEG 0x61D6E817 //toks pats kaip VOLNEG
#define FMFRAQPOZ 0x61D620DF
#define FMFRAQNEG 0x61D630CF
#define BACKWORD 0x61D620DF
#define FORWARD 0x61D630CF
//#define FUNCTION 0x61D6708F ////toks pats kaip MINIMAZE
#define RESET 0x61D6B847
#define NUM1 0x61D6807F
#define NUM2 0x61D6D02F
#define NUM3 0x61D6D827
#define NUM4 0x61D6A05F
#define NUM5 0x61D6906F
#define NUM6 0x61D6A857
#define NUM7 0x61D6609F
#define NUM8 0x61D650AF
#define NUM9 0x61D648B7
#define NUM0 0x61D640BF
#define NUMINC 0x61D608F7
#define RECAL 0x61D6C837
#define PLAY 0x61D68877
#define STOP 0x61D610EF
#define RECORD 0x61D600FF
#define MINIMAZE 0x61D6F00F
#define SNAPSHOT 0x61D658A7
#define ZOOM 0x61D69867
#define MTS 0x61D6B04F
#define CHPOZ 0x61D6F807
#define CHNEG 0x61D6E817
#define VOLPOZ 0x61D66897
#define VOLNEG 0x61D628D7
#define PRESSING 0xFFFFFFFF

Deja toks jau įdomus tas pultelis, kad kai kurių mygtukų kodai sutapo. Apsirašius mygtukus galime pradėti programuoti reagavimą į juos:

if (search==NUM1){
maker(1);
}

Dabar atėjo laikas aptarti mano koncepciją, kurią beje vykdo katik paminėta funkcija “maker”. Įdėja yra sukurti labai paprasta skaičiuotuvą, kuris turės 3 rėžimus: sudėti, dalybą ir daugybą. Atimties operaciją visai buvau užmiršęs, tad jos ir nebebus.

Naudodamas SOUCE mygtuką atliekamas funkcijos keitimas:

if (search==SOURCE){
if (func==3) func = 1;
else func++;

O paspaudus vieną iš skaitmenų, funkcija “maker” atlieka operaciją naujo skaičiaus su senuoju priklausomai nuo dabar esančios funkcijos:

void maker(int i)
{
if (func==1)
suma=suma+i;
else if ((func ==2)&(suma!=0))
suma=suma/i;
else if ((func ==3))
suma=suma*i;
}
RESET mygtukas nunulina skaičių:
if (search==RESET){
suma=0;
}

Kanalų perjungimo mygtukai didina atlieka teigiamą ar neigiamą operaciją:

if (search==CHPOZ){
maker(1);
}
else if (search==CHNEG){
maker(-1);
}

Po kiekvienos operacijos atliekamas ekrano atnaujinimas naudojant praeitame aprašyme aptartą messageConstr() funkciją. Ekrano atnaujinimas vyksta priklausomai nuo pasirinkto rėžimo:

if (func==1)
messageConstr(1,”SUM”,suma,””,0);
else if (func==2)
messageConstr(1,”DIV”,suma,””,0);
else if (func==3)
messageConstr(1,”MUL”,suma,””,0);
module.setDisplayToString(re);

Papildomos ne skaičiuotuvui būdingos funcijos:

1) PLAY mygtukas vykdo Count Down procedūrą, kurios metu ekrane esantis skaičius yra mažinamas iki kol jis pasieks 0:

if (search==PLAY){
down();
}
void down()
{
int ma = suma;
while (suma!=0)
{
suma–;
messageConstr(1,””,suma,””,0);
module.setDisplayToString(re);
int p = map(suma, 0, ma, 0, 7);
module.setLEDs((0×0<<8)|(0xFF<<(7-p)));
delay(10);
}
}

2) ZOOM ir MINIMAZE mygtukai reguliuoja LED ekrano ryškumą:

if (search==ZOOM){
if (bright!=7)
bright++;
module.setupDisplay(1, bright);
}
else if (search==MINIMAZE){
if (bright!=0)
bright–;
module.setupDisplay(1, bright);
}

3) Garso didinimo/mažinimo valdo LED’us:

if (search==VOLPOZ){
if (vol!=7)
vol++;
}
else if (search==VOLNEG){
if (vol!=-1)
vol—;
}
module.setLEDs(((0xFF<<(7-vol)) << | (0×0));

Šį produktą galima lengvai panaudoti kaip bombos laikmatį, tad gal kas pritaikys Asmeniškai man šio projekto patirtis pravers sekantiems darbams, o idėjų tikrai atsirado. Pagrindinė jų: Fotoaparato paleidėjas su distanciniu pulteliu.

Video

Resursai

Programos kodas: http://www.files.com/shared/4feabeb563070/IRReCulator.zip


Veiksmai

Information

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: