Smart Eye, pamatojoties uz DWIN apļveida ekrānu

——No DWIN izstrādātāju foruma

Šoreiz ikvienam ieteiktais DWIN izstrādātāju foruma atvērtā pirmkoda projekts ir ļoti interesanta rutīna cilvēka acu kustības simulēšanai.Inženieris izmantoja vairākus cilvēka acu attēlu materiālus, lai realizētu tādas funkcijas kā acs ābola kustība, mirkšķināšana, sejas atpazīšana un sekošana.

Ievads atvērtā pirmkoda risinājumos:

1. UI attēla materiāls

Redaktora piezīme: DWIN viedais ekrāns ir balstīts uz attēliem, lai pabeigtu lietotāja interfeisa izstrādi, kas var viegli realizēt dažādus displeja efektus.

dytrgf (1)

2. Interfeisa izstrāde

Ir salīdzinoši vienkārši izveidot saskarni, izmantojot DGUS programmatūru, un ir nepieciešamas tikai divas grafiskās vadīklas.Šajā rutīnā inženieris izvēlējās 2,1 collas apaļu viedo ekrānu.

dytrgf (2)

3. Īstenojiet mirkšķināšanas animāciju

Ļaujiet plakstiņu attēliem parādīties pēc kārtas:

//Mirkšķināšanas animācija

spēkā neesošs blink_animat(tukšums)

{

if(mirkšķināšanas_karogs == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

mirgošanas_karogs = 1;

}

}

cits

{

blink_cnt–;

if(blink_cnt <= 0)

{

mirgošanas_karogs = 0;

}

}

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

}

nevar blink_run()

{

statisks u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Aizkave_ms(30);

blink_animat();

Aizkave_ms(30);

blink_animat();

Aizkave_ms(30);

blink_animat();

Aizkave_ms(30);

blink_animat();

Aizkave_ms(30);

blink_animat();

Aizkave_ms(30);

blink_animat();

Aizkave_ms(30);

blink_animat();

Aizkave_ms(30);

}

}

4. Saprotiet, ka acs āboli dabiski izskatās pa kreisi un pa labi.

Tas ir līdzīgi mirkšķināšanai, taču tam ir jāsalīdzina kristāla oscilatora laiks, lai kontrolētu acu kustību.Pēc daudzām atkļūdošanas reizēm inženieris izstrādāja šādu kodu kopu.

//Acs ābola animācija

tukšs eyeball_animat(tukšums)

{

eyeball_timer_cnt++;

if(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

else if(eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

else if(eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

else if(eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

else if(eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

else if(eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//Pāriet pa kreisi un pa labi

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// cits

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

if(eyeball_cnt >= 0)

{

eyeball_pos [0] = 0 × 00;

eyeball_pos[1] = eyeball_cnt;

}

cits

{

eyeball_pos[0] = 0xFF;

eyeball_pos[1] = (eyeball_cnt & 0xFF);

}

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

}

void eyeball_run()

{

statisks u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Pievienojiet ESP32 sejas atpazīšanu, lai realizētu acu kustību, kas seko sejai.

Apstrādes metode šeit ir tāda, ka, atklājot seju, acis nekustas pašas un tiek definēts mainīgais, lai palielinātu while cilpu.Kad pieaugums sasniedz noteiktu vērtību, acs āboli kustēsies paši.Kad seriālais ports saņem datus, šis mainīgais tiks notīrīts, un pēc tam pārvietos acis tikai atbilstoši sejas stāvoklim.Galvenais kods ir šāds:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

cits

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

anulēt komunikācijas_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)

Aprakstiet_8283(st);

#elif(Saziņas_tips==2)

Aprakstiet_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Izlikšanas laiks: 26.06.2023