Smart Eye perustuu DWIN Circular -näyttöön

——DWIN-kehittäjäfoorumista

Tällä kertaa kaikille suositeltava DWIN-kehittäjäfoorumin avoimen lähdekoodin projekti on erittäin mielenkiintoinen rutiini ihmisen silmien liikkeen simulointiin.Insinööri käytti useita ihmissilmäkuvamateriaaleja toteuttaakseen toimintoja, kuten silmämunan liikettä, räpytystä, kasvojentunnistusta ja seuraamista.

Johdatus avoimen lähdekoodin ratkaisuihin:

1. Käyttöliittymän kuvamateriaali

Toimittajan huomautus: DWIN-älynäyttö perustuu kuviin käyttöliittymäkehityksen loppuunsaattamiseksi, mikä voi helposti toteuttaa erilaisia ​​näyttötehosteita.

dytrgf (1)

2. Käyttöliittymän kehittäminen

Käyttöliittymän kehittäminen DGUS-ohjelmistolla on suhteellisen yksinkertaista, ja tarvitaan vain kaksi graafista ohjausta.Tässä rutiinissa insinööri valitsi 2,1 tuuman pyöreän älynäytön.

dytrgf (2)

3. Toteuta vilkkumisen animaatio

Anna silmäluomien kuvat näkyä vuorotellen tietyin väliajoin:

//Räpytyksen animaatio

void blink_animat(void)

{

jos(vilkku_lippu == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

vilkku_lippu = 1;

}

}

muu

{

blink_cnt–;

if(blink_cnt <= 0)

{

vilkku_lippu = 0;

}

}

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

}

void blink_run()

{

staattinen u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Viive_ms(30);

blink_animat();

Viive_ms(30);

blink_animat();

Viive_ms(30);

blink_animat();

Viive_ms(30);

blink_animat();

Viive_ms(30);

blink_animat();

Viive_ms(30);

blink_animat();

Viive_ms(30);

blink_animat();

Viive_ms(30);

}

}

4. Ymmärrä, että silmämunat näyttävät luonnollisesti vasemmalle ja oikealle.

Tämä on samanlainen kuin räpyttely, mutta sen on verrattava kideoskillaattorin aikaa silmän liikkeen hallitsemiseksi.Useiden virheenkorjauskertojen jälkeen insinööri suunnitteli seuraavan koodisarjan.

//Silmämunan animaatio

void eyeball_animat(tyhjä)

{

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;

}

//Siirry vasemmalle ja oikealle

// jos(silmämunan_lippu == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// silmämunan_lippu = 1;

//}

// }

// muuten

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// silmämunan_lippu = 0;

//}

// }

if(eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

muu

{

eyeball_pos[0] = 0xFF;

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

}

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

}

void eyeball_run()

{

staattinen u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Lisää ESP32-kasvontunnistus havaitaksesi kasvojen liikkeet.

Prosessointimenetelmä tässä on se, että kun kasvot tunnistetaan, silmät eivät liiku itsestään, vaan muuttuja on määritetty kasvamaan while-silmukassa.Kun lisäys saavuttaa tietyn arvon, silmämunat liikkuvat itsestään.Kun sarjaportti vastaanottaa dataa, tämä muuttuja tyhjennetään ja sitten vain liikutetaan silmiä kasvojen asennon mukaan.Pääkoodi on seuraava:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

muu

{

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)

Kuvaile_8283(st);

#elif(Type_Communication==2)

Kuvaile_Modbus(st);

#loppu Jos

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Postitusaika: 26.6.2023