Inteligentné oko založené na kruhovej obrazovke DWIN

——Z fóra vývojárov DWIN

Open source projekt vývojárskeho fóra DWIN odporúčaný tentoraz všetkým je veľmi zaujímavou rutinou na simuláciu pohybu ľudských očí.Inžinier použil niekoľko obrazových materiálov ľudského oka na realizáciu funkcií, ako je pohyb očnej gule, žmurkanie, rozpoznávanie tváre a sledovanie.

Úvod do open source riešení:

1. Obrazový materiál používateľského rozhrania

Poznámka editora: Inteligentná obrazovka DWIN je založená na obrázkoch na dokončenie vývoja používateľského rozhrania, ktoré dokáže ľahko realizovať rôzne efekty zobrazenia.

dytrgf (1)

2. Vývoj rozhrania

Vývoj rozhrania pomocou softvéru DGUS je pomerne jednoduchý a sú potrebné iba dva grafické ovládacie prvky.V tejto rutine inžinier zvolil 2,1-palcovú okrúhlu inteligentnú obrazovku.

dytrgf (2)

3. Realizujte animáciu blikania

Nechajte obrázky očných viečok postupne zobrazovať v intervaloch:

//Žmurkajúca animácia

void blink_animat(void)

{

if(bliknutie == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

blink_flag = 1;

}

}

inak

{

blink_cnt–;

if(blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

void blink_run()

{

statický u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

}

}

4. Uvedomte si, že očné buľvy vyzerajú prirodzene doľava a doprava.

Je to podobné ako pri žmurkaní, ale na ovládanie pohybu očí je potrebné porovnať čas kryštálového oscilátora.Po mnohých časoch ladenia inžinier navrhol nasledujúcu sadu kódov.

//Animácia očnej gule

void eyeball_animat(void)

{

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;

}

//Pohyb doľava a doprava

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// flag_flag = 1;

// }

// }

// inak

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// príznak_očnej gule = 0;

// }

// }

if(eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

inak

{

eyeball_pos[0] = 0xFF;

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

}

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

}

void eyeball_run()

{

statický u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Pridajte rozpoznávanie tváre ESP32, aby ste si uvedomili pohyb očí sledujúcich tvár.

Metóda spracovania je taká, že keď je detegovaná tvár, oči sa samy nepohybujú a v slučke while je definovaná premenná na zvýšenie.Keď prírastok dosiahne určitú hodnotu, očné buľvy sa budú pohybovať samy.Keď sériový port prijme dáta, táto premenná sa vymaže a potom už len pohybujte očami podľa polohy tváre.Hlavný kód je nasledovný:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

inak

{

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)

Describe_8283(st);

#elif(Typ_komunikácie==2)

Describe_Modbus(st);

#koniec Ak

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Čas odoslania: 26. júna 2023