Smart Eye อิงจากหน้าจอแบบวงกลม DWIN

——จากฟอรัมนักพัฒนา DWIN

โครงการโอเพ่นซอร์สฟอรัมนักพัฒนา DWIN ที่แนะนำสำหรับทุกคนในครั้งนี้เป็นกิจวัตรที่น่าสนใจมากในการจำลองการเคลื่อนไหวของดวงตามนุษย์ วิศวกรใช้วัสดุสร้างภาพดวงตาของมนุษย์หลายอย่างเพื่อสร้างฟังก์ชั่นต่างๆ เช่น การเคลื่อนไหวของลูกตา การกระพริบตา การจดจำใบหน้า และการติดตาม

ข้อมูลเบื้องต้นเกี่ยวกับโซลูชันโอเพ่นซอร์ส:

1. วัสดุรูปภาพ UI

หมายเหตุบรรณาธิการ: หน้าจออัจฉริยะ DWIN ใช้รูปภาพเพื่อพัฒนา UI ให้สมบูรณ์ ซึ่งสามารถรับรู้เอฟเฟกต์การแสดงผลต่างๆ ได้อย่างง่ายดาย

ดีทีอาร์จีเอฟ (1)

2. การพัฒนาส่วนต่อประสาน

การพัฒนาอินเทอร์เฟซผ่านซอฟต์แวร์ DGUS นั้นค่อนข้างง่าย และจำเป็นต้องมีการควบคุมกราฟิกเพียงสองตัวเท่านั้น ในกิจวัตรนี้ วิศวกรเลือกหน้าจออัจฉริยะทรงกลมขนาด 2.1 นิ้ว

ไดทีอาร์จีเอฟ (2)

3. ตระหนักถึงภาพเคลื่อนไหวแบบกะพริบ

ให้แสดงภาพเปลือกตาตามลำดับ:

//ภาพเคลื่อนไหวแบบกะพริบตา

เป็นโมฆะ Blink_animat (เป็นโมฆะ)

-

ถ้า (blink_flag == 0)

-

Blink_cnt++;

ถ้า(blink_cnt >= 4)

-

flash_flag = 1;

-

-

อื่น

-

Blink_cnt–;

ถ้า (blink_cnt

-

กะพริบตา_ธง = 0;

-

-

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

-

เป็นโมฆะblink_run()

-

คงที่ u32 run_timer_cnt = 0;

run_timer_cnt++;

ถ้า (run_timer_cnt >= 2000000)

-

run_timer_cnt = 0;

Blink_animated();

ดีเลย์_ms(30);

Blink_animated();

ดีเลย์_ms(30);

Blink_animated();

ดีเลย์_ms(30);

Blink_animated();

ดีเลย์_ms(30);

Blink_animated();

ดีเลย์_ms(30);

Blink_animated();

ดีเลย์_ms(30);

Blink_animated();

ดีเลย์_ms(30);

Blink_animated();

ดีเลย์_ms(30);

-

-

4. ตระหนักว่าลูกตามองไปทางซ้ายและขวาอย่างเป็นธรรมชาติ

ซึ่งคล้ายกับการกะพริบ แต่ต้องเปรียบเทียบเวลาของคริสตัลออสซิลเลเตอร์เพื่อควบคุมการเคลื่อนไหวของดวงตา หลังจากการดีบักหลายครั้ง วิศวกรได้ออกแบบชุดโค้ดต่อไปนี้

//แอนิเมชั่นลูกตา

เป็นโมฆะ eyeball_animat (เป็นโมฆะ)

-

eyeball_timer_cnt++;

ถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 20;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 50;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 80;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 94;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 94;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 80;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 50;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 20;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = -10;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = -40;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = -54;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = -40;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = -10;

-

อย่างอื่นถ้า (eyeball_timer_cnt

-

ลูกตา_cnt = 20;

eyeball_timer_cnt = 0;

-

//เลื่อนไปทางซ้ายและขวา

// ถ้า (eyeball_flag == 0)

-

// eyeball_cnt++;

// ถ้า (eyeball_cnt >= 94)

-

// eyeball_flag = 1;

-

-

// อื่น

-

// eyeball_cnt–;

// ถ้า (eyeball_cnt

-

// eyeball_flag = 0;

-

-

ถ้า (eyeball_cnt >= 0)

-

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

-

อื่น

-

eyeball_pos[0] = 0xFF;

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

-

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

-

เป็นโมฆะ eyeball_run()

-

คงที่ u32 run_timer_cnt = 0;

run_timer_cnt++;

ถ้า (run_timer_cnt >= 20,000)

-

run_timer_cnt = 0;

Animated_ลูกตา();

-

-

5. เพิ่มการจดจำใบหน้า ESP32 เพื่อรับรู้การเคลื่อนไหวของดวงตาตามใบหน้า

วิธีการประมวลผลที่นี่คือเมื่อตรวจพบใบหน้า ดวงตาจะไม่ขยับด้วยตัวเอง และมีการกำหนดตัวแปรให้เพิ่มขึ้นในลูป while เมื่อเพิ่มขึ้นถึงค่าที่กำหนด ลูกตาจะเคลื่อนไปเอง เมื่อพอร์ตอนุกรมได้รับข้อมูล ตัวแปรนี้จะถูกล้าง จากนั้นจึงขยับดวงตาตามตำแหน่งของใบหน้าเท่านั้น รหัสหลักมีดังนี้:

ถ้า (rec_data_timer_cnt

-

rec_data_timer_cnt++;

-

อื่น

-

ลูกตา_run();

-

ภายนอก u32 rec_data_timer_cnt;

ภายนอก u16 eyeball_timer_cnt;

โมฆะ Communication_CMD (u8 st)

-

ถ้า((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))

-

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if(Type_Communication==1)

Description_8283(st);

#elif(Type_Communication==2)

Description_Modbus(st);

#เอ็นดิฟ

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

-

-


เวลาโพสต์: 26 มิ.ย.-2023