Arduino руу товчлуурыг холбох талаар бид аль хэдийн авч үзсэн бөгөөд "үсрэх" харилцагчдын асуудлыг хөндсөн. Энэ нь товчлуурыг давтаж дарахад хүргэдэг, товчлуур дарах үйлдлийг програмчлахад бэрхшээлтэй болгодог маш ядаргаатай үзэгдэл юм. Холбоо барих үсрэлтийг хэрхэн арилгах талаар ярилцъя.
Шаардлагатай
- - Ардуино;
- - товчлуур товчлуур;
- - 10 кОм нэрлэсэн утга бүхий резистор;
- - Гэрэл ялгаруулах диод;
- - холбох утас.
Зааварчилгаа
1-р алхам
Холболтын үсрэлт нь механик унтраалга, товчлуур, тохируулагч унтраалга, релений нийтлэг үзэгдэл юм. Контактыг ихэвчлэн уян хатан чанар бүхий метал ба хайлшаар хийдэг тул бие махбодийн хувьд хаалттай байх үед тэр даруй найдвартай холболт үүсгэдэггүй. Богино хугацаанд контактууд хэд хэдэн удаа хаагдаж, бие биенээ няцаадаг. Үүний үр дүнд цахилгаан гүйдэл тогтмол төлөвт шууд биш харин хэд хэдэн удаа уналт, уналтын дараа шилждэг. Энэхүү түр зуурын нөлөөллийн үргэлжлэх хугацаа нь холбоо барих материал, хэмжээ, хийцээс хамаарна. Зураг дээр товчлуурын товчлуурууд хаагдах үед ердийн осциллограмм харагдаж байна. Тогтвортой төлөвт шилжсэн мөчөөс хойш хэдэн миллисекунд байгаа нь харагдаж байна. Үүнийг "үсрэлт" гэж нэрлэдэг.
Энэ нөлөө нь гэрэлтүүлэг, мотор эсвэл бусад инерцийн мэдрэгч ба төхөөрөмжийг хянах цахилгаан хэлхээнд мэдэгдэхүйц биш юм. Гэхдээ мэдээллийг хурдан уншиж, боловсруулдаг хэлхээний хувьд (давтамж нь "үсрэх" импульсийн дараалалтай эсвэл түүнээс их) байвал энэ нь асуудал үүсгэдэг. Ялангуяа 16 MHz давтамжтай ажилладаг Arduino UNO нь 0-ээс 1 шилжүүлэгчийн оронд нэг ба тэгийн дарааллыг хүлээн авч холбоо барих үсрэлтийг маш сайн гүйцэтгэдэг.
Алхам 2
Холболтын үсрэлт нь хэлхээний зөв ажиллагаанд хэрхэн нөлөөлж байгааг харцгаая. Татаж авах эсэргүүцлийн хэлхээг ашиглан Arduino руу цагийн товчлуурыг холбож үзье. Товчлуурыг дарснаар бид LED-г асааж, товчлуурыг дахин дарах хүртэл асаана. Илүү тодорхой болгохын тулд бид гаднах LED-ийг дижитал зүү 13-тэй холбодог.
Алхам 3
Энэ даалгаврыг биелүүлэхийн тулд хамгийн түрүүнд санаанд орж байгаа зүйл бол:
- товчлуурын өмнөх төлөвийг санах;
- одоогийн байдалтай харьцуулах;
- төлөв өөрчлөгдсөн бол бид LED төлөвийг өөрчилнө.
Ийм ноорог бичээд Arduino-ийн санах ойд оруулъя.
Цахилгаан хэлхээг асаахад контакт үсрэх нөлөө шууд харагдана. Энэ нь LED товчлуурыг дарсны дараа шууд асахгүй, эсвэл асч, дараа нь унтрах эсвэл товчлуур дарсны дараа шууд унтрахгүй, харин асаалттай хэвээр байгаа нь илэрдэг. Ерөнхийдөө хэлхээ нь тогтвортой ажиллахгүй байна. Хэрэв LED асаах ажилд энэ нь тийм ч чухал биш бол бусад ноцтой ажлуудын хувьд энэ нь зүгээр л хүлээн зөвшөөрөгдөхгүй юм.
Алхам 4
Бид нөхцөл байдлыг засахыг хичээх болно. Контактыг хааснаас хойш хэдэн миллисекундын дараа холбоо барих үсрэлт болдог гэдгийг бид мэднэ. Товчлуурын төлөвийг өөрчилснөөс хойш 5 минутын дараа хүлээцгээе. Хүний хувьд энэ цаг бараг л агшин зуур байдаг бөгөөд хүний товчлуур дарахад ихэвчлэн хэдэн арван миллисекунд илүү удаан хугацаа шаардагддаг. Arduino нь ийм богино хугацаанд маш сайн ажилладаг бөгөөд эдгээр 5ms нь товчлуур дээр дарахад контактуудын үсрэлтийг зогсоох боломжийг олгоно.
Энэ ноорог дээр бид debounce () процедурыг зарлах болно (англиар "bounce" гэдэг нь зүгээр л "bounce", "de" угтвар нь урвуу процессыг хэлнэ), бид оролт дээр товчлуурын өмнөх төлөвийг нийлүүлнэ. Хэрэв товчлуур дээр дарах нь 5 мсек-ээс илүү үргэлжилдэг бол энэ нь үнэхээр дарагдсан гэсэн үг юм.
Хэвлэлийг илрүүлснээр бид LED төлөвийг өөрчилнө.
Ноорогоо Arduino самбар дээр байршуулна уу. Одоо бүх зүйл илүү дээр болжээ! Товчлуур нь тасралтгүй ажилладаг бөгөөд дарахад LED нь хүссэнээрээ өөрчлөгддөг.
Алхам 5
Үүнтэй ижил төстэй ажиллагааг Bounce2 номын сан гэх мэт тусгай сангуудаар хангадаг. Та үүнийг "Эх сурвалж" хэсгийн холбоос эсвэл https://github.com/thomasfredericks/Bounce2 вэбсайт дээрээс татаж авах боломжтой. Номын сан суулгахын тулд Arduino хөгжүүлэлтийн орчны номын сангуудад байрлуулж IDE-г дахин эхлүүлнэ үү.
"Bounce2" номын сан нь дараахь аргуудыг агуулдаг.
Bounce () - "Bounce" объектыг эхлүүлэх;
хоосон зай (ms) - саатлын хугацааг миллисекундээр тохируулна;
void хавсаргах (зүү дугаар) - товчлуурыг холбосон зүүг тохируулна;
int update () - объектыг шинэчилж, хэрэв пин төлөв өөрчлөгдсөн бол үнэн, харин эсрэг тохиолдолд худал;
int read () - зүүний шинэ төлөвийг уншина.
Номын сангаа ашиглан ноорогоо дахин бичье. Та мөн товчлуурын өнгөрсөн төлөвийг одоогийнхтой нь харьцуулж, харьцуулж болох боловч алгоритмыг хялбарчилж үзье. Товчлуурыг дарахад бид дарагчийг тоолж, сондгой дарах болгонд LED асаж, жигд дарах бүр унтрах болно. Энэхүү ноорог товч, уншихад хялбар, ашиглахад хялбар харагдаж байна.