فهرست مطالب:

ورودی لمسی خازنی ESP32 با استفاده از "دوشاخه های متالیک سوراخ" برای دکمه ها: 5 مرحله (همراه با تصاویر)
ورودی لمسی خازنی ESP32 با استفاده از "دوشاخه های متالیک سوراخ" برای دکمه ها: 5 مرحله (همراه با تصاویر)

تصویری: ورودی لمسی خازنی ESP32 با استفاده از "دوشاخه های متالیک سوراخ" برای دکمه ها: 5 مرحله (همراه با تصاویر)

تصویری: ورودی لمسی خازنی ESP32 با استفاده از
تصویری: همه چیز در مورد ESP32 CAM - قسمت اول - سخت افزار 2024, نوامبر
Anonim
Image
Image
سخت افزار
سخت افزار

همانطور که در حال نهایی کردن تصمیمات طراحی برای پروژه آینده ESP32 WiFi Kit 32 بودم که نیاز به سه دکمه ورودی داشت ، یک مشکل قابل توجه این بود که WiFi Kit 32 دارای یک دکمه مکانیکی واحد ، در عین حال تنها سه دکمه مکانیکی ، برای ورودی نیست. با این حال ، WiFi Kit 32 ورودی های لمسی خازنی زیادی دارد ، بنابراین مدتی را صرف مونتاژ سخت افزار ، نوشتن نرم افزار و آزمایش طراحی ورودی سه دکمه با استفاده از ویژگی ورودی لمسی خازنی ESP32 و سه شاخه 3/8 اینچی فلزی برای دکمه ها.

همانطور که هر کسی که ورودی های لمسی خازنی ESP32 را آزمایش کرده است ، متوجه شده است که ورودی های لمسی مطمئناً آنقدر پر سر و صدا هستند که برای تشخیص ورودی قابل اطمینان به فیلتر نیاز دارند. برای به حداقل رساندن تعداد کل قطعات برای پروژه آینده ، من تشخیص دادم که یک فیلتر دیجیتالی با وقفه ساده (بیشتر از آنکه "فیلتر" باشد ، اما من از آن دور می شوم) ، برعکس افزودن سخت افزار فیلتر خارجی ، می تواند ورودی های پر سر و صدا را خاموش کند. به و پس از آزمایش ، مشخص شد که ورودی های خازنی ESP32 ، سه شاخه سوراخ فلزی 3/8 اینچی و برخی نرم افزارهای دیجیتالی "فیلتر" ، در واقع یک ورودی سه دکمه قابل اعتماد برای طراحی ارائه می دهند.

بنابراین اگر علاقمند به آزمایش ورودی خازنی با فیلتر دیجیتال در ESP32 هستید ، من کد منبع "Buttons.ino" را در قالب محیط Arduino به همراه دستورالعمل های مونتاژ و برنامه نویسی ، به همراه توضیح مختصر کد منبع ، برای آنچه من دریافتم یک ورودی سه دکمه بسیار قابل اعتماد است.

و طبق معمول ، من احتمالاً یک یا دو پرونده را فراموش کرده ام یا چه کسی می داند چه چیز دیگری ، بنابراین اگر سوالی دارید ، لطفاً از من دریغ نکنید زیرا من اشتباهات زیادی انجام می دهم.

و یک نکته پایانی ، من هیچگونه غرامتی به هر شکلی ، از جمله نمونه های رایگان ، بدون هیچ محدودیتی ، برای هیچ یک از اجزای مورد استفاده در این طرح دریافت نمی کنم.

مرحله 1: سخت افزار

سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار

در طراحی از سخت افزار زیر استفاده شده است:

  • یک ، وای فای کیت 32.
  • سه شاخه سوراخ فلزی 3/8 اینچی.
  • طول سه ، 4 اینچ از سیم 28awg.

برای مونتاژ سخت افزار ، مراحل زیر را انجام دادم:

  • انتهای هر سیم 4 اینچی را همانطور که نشان داده شده ، نوار و قلع می کنید.
  • اولین سیم را به پین 13 ESP32 (ورودی TOUCH4 یا "T4") لحیم کرد.
  • سیم دوم را به پین 12 ESP32 (ورودی TOUCH5 یا "T5") لحیم کرد.
  • سیم سوم را به پین 14 ESP32 (ورودی TOUCH6 یا "T6") لحیم کرد.
  • یکی از سه شاخه سوراخ فلزی 3/8 اینچی را به انتهای آزاد سه طول سیم لحیم کنید.

مرحله 2: نرم افزار

نرم افزار
نرم افزار

فایل "Buttons.ino" یک فایل محیط Arduino است که حاوی نرم افزار طراحی است. علاوه بر این فایل ، به کتابخانه گرافیکی "U8g2lib" برای صفحه نمایش WiFi Kit32 OLED نیاز دارید (برای اطلاعات بیشتر در مورد این کتابخانه به https://github.com/olikraus/u8g2/wiki مراجعه کنید).

با نصب کتابخانه گرافیکی U8g2lib در فهرست راهنمای Arduino و بارگذاری "Buttons.ino" در محیط Arduino ، نرم افزار را در ESP32 کامپایل و بارگیری کنید.

پس از بارگیری و اجرا ، خط بالای صفحه باید "دکمه ها" را بخواند و خط دوم صفحه نمایش "1 2 3" را به عنوان نشانگر دکمه بخواند. در زیر هر یک از دکمه های 1 ، 2 ، 3 مقادیر بدون فیلتر خواندن لمسی و در زیر هر یک از آنها نشانگرهای فشار دکمه ("1" برای فشار داده شده ، "0" برای فشرده نشدن) قرار دارند. همانطور که در ویدیو مشاهده می شود (و در صورت آزمایش طولانی مدت تأیید شد) ، فیلتر نرم افزار تشخیص ورودی دکمه قابل اطمینان را بدون راه اندازی کاذب ارائه می دهد.

مرحله 3: درباره نرم افزار

نرم افزار شامل سه بخش اصلی کد می باشد. آردوینو به بخش "setup ()" و "loop ()" و یک بخش "وقفه" نیاز داشت. بخش setup () شامل کد لازم برای راه اندازی اولیه OLED و وقفه در خدمات می باشد. توابع راه اندازی OLED در پیوند بالا توضیح داده شده است. توابع راه اندازی سرویس وقفه به شرح زیر است:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" یک سمفور برای "InterruptService ()" (روال سرویس وقفه) برای اطلاع از حلقه () در زمان اجرای یک حلقه گذر ایجاد می کند.
  • "timerInterruptService = timerBegin (0 ، 80 ، true)" یک تایمر با استفاده از تایمر سخت افزاری 0 با پیش مقیاس 80 ایجاد می کند.
  • "timerAttachInterrupt (timerInterruptService، & InterruptService، true)" InterruptService () را به تایمر متصل می کند.
  • "timerAlarmWrite (timerInterruptService، 1000، true)" میزان وقفه سرویس را روی 1000 هرتز تنظیم می کند.
  • "timerAlarmEnable (timerInterruptService)" زنگ ساعت را شروع می کند و بنابراین سرویس را قطع می کند.

با نصب کامل ، حلقه () وارد شده و بلافاصله در خط متوقف می شود:

if (xSemaphoreTake (timerLoopSemaphore ، portMAX_DELAY) == pdTRUE) ،

به معنی حلقه () در این مرحله منتظر می ماند تا semaphore از InterruptService () برسد. هنگامی که سمافور وارد می شود ، کد حلقه () اجرا می شود و صفحه OLED را با داده های دکمه به روز می کند و سپس به بالا باز می گردد تا دوباره منتظر سمافور بعدی باشد. با InterruptService () با سرعت 1000 هرتز و مقدار LOOP_DELAY 30 ، حلقه () هر 30 میلی ثانیه اجرا می شود ، یا با سرعت نمایش 33.333 هرتز. در حالی که این نرخ تازه سازی صفحه نمایش بیشتر از مورد نیاز برای اکثر برنامه های ESP32 است ، من از این تنظیم برای نشان دادن پاسخگویی فیلتر استفاده کردم. من آزمایش کردم و زمان مورد نیاز برای اجرای یک حلقه () را 20ms تعیین کردم.

InterruptService () با تایمر ایجاد شده در setup () با نرخ 1000 هرتز فراخوانی می شود. هنگام فراخوانی ، دو شمارنده پایین ، nLoopDelay و nButtonDelay را به روز می کند. هنگامی که nLoopDelay به صورت صفر شمارش می شود ، سمافور را به حلقه () اجازه می دهد تا یک گذر را اجرا کند و nLoopDelay را بازنشانی می کند. هنگامی که nButtonDelay شمارش معکوس تا صفر است ، آن را نیز تنظیم مجدد می کند سپس دکمه "filter" اجرا می شود.

هر فیلتر دکمه دارای یک شمارنده فیلتر منحصر به فرد است (به عنوان مثال nButton1Count ، nButton2Count و nButton3Count). تا زمانی که مقدار ورودی لمسی اختصاص داده شده به دکمه بیشتر یا مساوی مقدار آستانه تعریف شده باشد (BUTTON_THRESHHOLD) ، شمارنده فیلتر اختصاص داده شده به دکمه و دکمه صفر باقی می ماند. اگر مقدار ورودی لمسی اختصاص داده شده به دکمه کمتر از آستانه تعیین شده باشد ، شمارنده فیلتر اختصاص داده شده به دکمه هر 20 میلی ثانیه یک عدد افزایش می یابد. وقتی شمارنده فیلتر از مقدار فیلتر دکمه (BUTTON_FILTER) بیشتر شود ، دکمه "فشرده" در نظر گرفته می شود. اثر این روش ایجاد فیلتری است که به 80ms (20ms nButtonDelay * 4ms nButtonCountN که N شماره دکمه است) دارای مقادیر ورودی لمسی پیوسته زیر آستانه تعریف شده برای در نظر گرفتن دکمه واقعاً فشرده شده است. هر زمان کمتر از 80 میلی ثانیه "اشکال" تلقی می شود و توسط فیلتر رد می شود.

با توجه به این توضیح مختصر ، اگر س questionsالی دارید ، لطفاً بپرسید و من تمام تلاش خود را برای پاسخ دادن به آنها انجام خواهم داد.

امیدوارم که لذت برده باشید!

مرحله 4: "پروژه آینده"

این
این

پروژه آینده ، "Intelligrill® Pro" ، یک مانیتور سیگاری دو پروب دما است که شامل موارد زیر است:

  • محاسبات کاوشگر دما Steinhart-Hart (برخلاف جداول "جستجو") برای افزایش دقت.
  • زمان پیش بینی برای تکمیل کاوشگر 1 با افزودن دقت بیشتر ناشی از محاسبات استاینهارت-هارت.
  • کاوشگر دوم ، کاوشگر 2 ، برای نظارت بر دمای افراد سیگاری (محدود به 32 تا 399 درجه).
  • کنترل های ورودی لمسی خازنی (مانند این دستورالعمل).
  • نظارت از راه دور مبتنی بر WIFI (با آدرس IP ثابت ، امکان نظارت بر پیشرفت افراد سیگاری را از هرجایی که اتصال اینترنت در دسترس باشد).
  • محدوده دما افزایش یافته (دوباره 32 تا 399 درجه).
  • هشدارهای تکمیل صوتی هم در فرستنده Intelligrill® و هم در اکثر دستگاه های نظارت کننده با قابلیت WiFi.
  • نمایش دما در دو درجه F یا درجه C.
  • قالب زمان به دو صورت HH: MM: SS یا HH: MM.
  • نمایش باتری در ولتاژ یا درصد شارژ.
  • و به زودی ، خروجی PID برای افراد سیگاری مبتنی بر سنجه.

"Intelligrill® Pro" در حال آزمایش است تا بتواند دقیق ترین ، قابل اطمینان ترین و قابل اعتمادترین HTML مبتنی بر Intelligrill® طراحی شده من باشد.

هنوز در حال آزمایش است ، اما با غذاهایی که در حین آزمایش آماده می شود ، من بیش از چند کیلو وزن اضافه کرده ام.

باز هم امیدوارم لذت ببرید!

مرحله 5: بعدی: ورودی آنالوگ پروب دمای ESP32 NTP با تصحیح Steinhart-Hart

آماده باشید که برای این کتاب کتابهای جبری خود را گردگیری کنید.

توصیه شده: