DWIN সার্কুলার স্ক্রিনের উপর ভিত্তি করে স্মার্ট আই

—— DWIN ডেভেলপার ফোরাম থেকে

DWIN ডেভেলপার ফোরামের ওপেন সোর্স প্রকল্পটি এই সময়ে সবার জন্য প্রস্তাবিত মানুষের চোখের নড়াচড়ার অনুকরণের জন্য একটি খুব আকর্ষণীয় রুটিন।প্রকৌশলী চোখের বলের নড়াচড়া, পিটপিট করা, মুখ শনাক্তকরণ এবং অনুসরণের মতো ফাংশনগুলি উপলব্ধি করার জন্য বেশ কয়েকটি মানুষের চোখের ছবির উপকরণ ব্যবহার করেছিলেন।

ওপেন সোর্স সমাধানের ভূমিকা:

1. UI ইমেজ উপাদান

সম্পাদকের দ্রষ্টব্য: DWIN স্মার্ট স্ক্রিনটি UI ডেভেলপমেন্ট সম্পূর্ণ করার জন্য ছবির উপর ভিত্তি করে তৈরি করা হয়েছে, যা সহজেই বিভিন্ন ডিসপ্লে প্রভাব উপলব্ধি করতে পারে।

dytrgf (1)

2. ইন্টারফেস উন্নয়ন

DGUS সফ্টওয়্যারের মাধ্যমে ইন্টারফেসটি বিকাশ করা তুলনামূলকভাবে সহজ, এবং শুধুমাত্র দুটি গ্রাফিক নিয়ন্ত্রণ প্রয়োজন।এই রুটিনে, ইঞ্জিনিয়ার একটি 2.1-ইঞ্চি গোলাকার স্মার্ট স্ক্রিন বেছে নিয়েছিলেন।

dytrgf (2)

3. ব্লিঙ্ক অ্যানিমেশন উপলব্ধি করুন

চোখের পাতার ছবিগুলি বিরতিতে পালাক্রমে প্রদর্শিত হতে দিন:

// ব্লিঙ্ক অ্যানিমেশন

void blink_animat(অকার্যকর)

{

যদি (ব্লিঙ্ক_পতাকা == 0)

{

blink_cnt++;

যদি (blink_cnt >= 4)

{

blink_flag = 1;

}

}

অন্য

{

blink_cnt–;

যদি (blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

অকার্যকর blink_run()

{

স্ট্যাটিক u32 run_timer_cnt = 0;

run_timer_cnt++;

যদি (রান_টাইমার_সিএনটি >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

বিলম্ব_এমএস(30);

blink_animat();

বিলম্ব_এমএস(30);

blink_animat();

বিলম্ব_এমএস(30);

blink_animat();

বিলম্ব_এমএস(30);

blink_animat();

বিলম্ব_এমএস(30);

blink_animat();

বিলম্ব_এমএস(30);

blink_animat();

বিলম্ব_এমএস(30);

blink_animat();

বিলম্ব_এমএস(30);

}

}

4. উপলব্ধি করুন চোখের গোলাগুলি স্বাভাবিকভাবে বাম এবং ডানদিকে দেখায়।

এটি চোখের পলকের মতোই, তবে চোখের চলাচল নিয়ন্ত্রণ করতে ক্রিস্টাল অসিলেটরের সময় তুলনা করতে হবে।অনেক বার ডিবাগ করার পরে, ইঞ্জিনিয়ার নিম্নলিখিত কোডগুলির সেট ডিজাইন করেছেন।

//আইবল অ্যানিমেশন

void eyeball_animat(অকার্যকর)

{

eyeball_timer_cnt++;

যদি (চোখের_টাইমার_সিএনটি <50)

{

eyeball_cnt = 20;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <51)

{

eyeball_cnt = 50;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <52)

{

eyeball_cnt = 80;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <53)

{

eyeball_cnt = 94;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি < 103)

{

eyeball_cnt = 94;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি < 104)

{

eyeball_cnt = 80;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <105)

{

eyeball_cnt = 50;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <106)

{

eyeball_cnt = 20;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি < 107)

{

eyeball_cnt = -10;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <108)

{

eyeball_cnt = -40;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <158)

{

eyeball_cnt = -54;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <159)

{

eyeball_cnt = -40;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <160)

{

eyeball_cnt = -10;

}

অন্যথায় যদি (চোখের_টাইমার_সিএনটি <161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

// বাম এবং ডান সরান

// যদি (চোখের_পতাকা == 0)

// {

// eyeball_cnt++;

// যদি (আইবল_সিএনটি >= 94)

// {

// eyeball_flag = 1;

// }

// }

// অন্য

// {

// eyeball_cnt–;

// যদি (চোখের_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

যদি (চোখের_cnt >= 0)

{

চোখের বল_পোস[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);

}

অকার্যকর চোখের বল_রান()

{

স্ট্যাটিক u32 run_timer_cnt = 0;

run_timer_cnt++;

যদি (রান_টাইমার_সিএনটি >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. মুখ অনুসরণ করে চোখের নড়াচড়া বুঝতে ESP32 ফেস রিকগনিশন যোগ করুন।

এখানে প্রসেসিং পদ্ধতি হল যে যখন মুখ সনাক্ত করা হয়, তখন চোখ নিজে থেকে সরে না, এবং একটি পরিবর্তনশীল সংজ্ঞায়িত করা হয় যখন লুপ বাড়ানোর জন্য।যখন বৃদ্ধি একটি নির্দিষ্ট মান পৌঁছায়, চোখের গোলাগুলি নিজেরাই সরে যাবে।যখন সিরিয়াল পোর্ট ডেটা পায়, তখন এই ভেরিয়েবলটি সাফ করা হবে এবং তারপর শুধুমাত্র মুখের অবস্থান অনুযায়ী চোখ সরানো হবে।প্রধান কোড নিম্নরূপ:

যদি(rec_data_timer_cnt <1000000)

{

rec_data_timer_cnt++;

}

অন্য

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

void 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)

বর্ণনা_8283(st);

#elif(টাইপ_যোগাযোগ==2)

Describe_Modbus(st);

#যদি শেষ

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


পোস্টের সময়: জুন-26-2023