Smart Eye põhineb DWIN ringikujulisel ekraanil

——DWINi arendajafoorumist

Seekord kõigile soovitatud DWIN arendajafoorumi avatud lähtekoodiga projekt on väga huvitav rutiin inimese silmade liikumise simuleerimiseks.Insener kasutas mitmeid inimsilma pildimaterjale, et realiseerida selliseid funktsioone nagu silmamuna liikumine, pilgutamine, näotuvastus ja jälgimine.

Sissejuhatus avatud lähtekoodiga lahendustesse:

1. UI pildimaterjal

Toimetaja märkus: DWIN-i nutiekraan põhineb kasutajaliidese arendamise lõpuleviimiseks piltidel, mis võivad hõlpsasti realiseerida erinevaid kuvaefekte.

dytrgf (1)

2. Liidese arendamine

Liidese arendamine DGUS-i tarkvara kaudu on suhteliselt lihtne ja vaja on ainult kahte graafilist juhtelementi.Selle rutiini käigus valis insener 2,1-tollise ümara nutiekraani.

dytrgf (2)

3. Teostage vilkumise animatsioon

Laske silmalaugude pilte kuvada järjest intervallidega:

//Pilgutuse animatsioon

void blink_animat(void)

{

if(blink_lipp == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

vilkumise_lipp = 1;

}

}

muidu

{

blink_cnt–;

if(blink_cnt <= 0)

{

vilkumise_lipp = 0;

}

}

write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);

}

void blink_run()

{

staatiline u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Viivitus_ms(30);

blink_animat();

Viivitus_ms(30);

blink_animat();

Viivitus_ms(30);

blink_animat();

Viivitus_ms(30);

blink_animat();

Viivitus_ms(30);

blink_animat();

Viivitus_ms(30);

blink_animat();

Viivitus_ms(30);

blink_animat();

Viivitus_ms(30);

}

}

4. Mõistke, et silmamunad näevad loomulikult vasakule ja paremale.

See sarnaneb vilkumisega, kuid silmade liikumise kontrollimiseks tuleb võrrelda kristallostsillaatori aega.Pärast mitmekordset silumist kujundas insener järgmise koodikomplekti.

//Silmamuna animatsioon

tühi silmamuna_animat(tühine)

{

eyeball_timer_cnt++;

if(eyeball_timer_cnt < 50)

{

silmamuna_cnt = 20;

}

else if(eyeball_timer_cnt < 51)

{

silmamuna_cnt = 50;

}

else if(eyeball_timer_cnt < 52)

{

silmamuna_cnt = 80;

}

else if(eyeball_timer_cnt < 53)

{

silmamuna_cnt = 94;

}

else if(eyeball_timer_cnt < 103)

{

silmamuna_cnt = 94;

}

else if(eyeball_timer_cnt < 104)

{

silmamuna_cnt = 80;

}

else if(eyeball_timer_cnt < 105)

{

silmamuna_cnt = 50;

}

else if(eyeball_timer_cnt < 106)

{

silmamuna_cnt = 20;

}

else if(eyeball_timer_cnt < 107)

{

silmamuna_cnt = -10;

}

else if(eyeball_timer_cnt < 108)

{

silmamuna_cnt = -40;

}

else if(eyeball_timer_cnt < 158)

{

silmamuna_cnt = -54;

}

else if(eyeball_timer_cnt < 159)

{

silmamuna_cnt = -40;

}

else if(eyeball_timer_cnt < 160)

{

silmamuna_cnt = -10;

}

else if(eyeball_timer_cnt < 161)

{

silmamuna_cnt = 20;

eyeball_timer_cnt = 0;

}

//Liikuge vasakule ja paremale

// if(silmamuna_lipp == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// silmamuna_lipp = 1;

// }

// }

// muidu

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// silmamuna_lipp = 0;

// }

// }

if(eyeball_cnt >= 0)

{

eyeball_pos [0] = 0 × 00;

silmamuna_pos[1] = silmamuna_cnt;

}

muidu

{

silmamuna_pos[0] = 0xFF;

silmamuna_pos[1] = (silmamuna_cnt & 0xFF);

}

write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);

}

void eyeball_run()

{

staatiline u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Lisage ESP32 näotuvastus, et tajuda nägu järgivate silmade liikumist.

Töötlemismeetod seisneb siin selles, et näo tuvastamisel silmad ise ei liigu ja tsüklis on defineeritud muutuja, mis suurendab while-tsüklit.Kui juurdekasv jõuab teatud väärtuseni, hakkavad silmamunad ise liikuma.Kui jadaport saab andmeid, kustutatakse see muutuja ja seejärel liigutatakse silmi ainult vastavalt näo asendile.Peamine kood on järgmine:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

muidu

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

void Communication_CMD(u8 st)

{

if((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if(Type_Communication==1)

Kirjelda_8283(st);

#elif(Type_Communication==2)

Kirjelda_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Postitusaeg: 26. juuni 2023