Съдържание:

Използвайте 1 аналогов вход за 6 бутона за Arduino: 6 стъпки
Използвайте 1 аналогов вход за 6 бутона за Arduino: 6 стъпки

Видео: Използвайте 1 аналогов вход за 6 бутона за Arduino: 6 стъпки

Видео: Използвайте 1 аналогов вход за 6 бутона за Arduino: 6 стъпки
Видео: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Юли
Anonim
Използвайте 1 аналогов вход за 6 бутона за Arduino
Използвайте 1 аналогов вход за 6 бутона за Arduino

Често съм се чудил как мога да получа повече цифрови входове за моя Arduino. Наскоро ми хрумна, че трябва да мога да използвам един от аналоговите входове за въвеждане на множество цифрови входове. Направих бързо търсене и открих къде хората могат да направят това, но това позволява само едно натискане на бутон наведнъж. Искам да мога да имам комбинация от бутони, които да се натискат едновременно. Така че, с помощта на TINKERCAD КРЪГИ, се заех да направя това да се случи.

Защо бих искал едновременно натискане на бутони? Както е илюстрирано в дизайна на TinkerCad Circuits, той може да се използва за DIP превключватели за избор на различни режими в рамките на програмата.

Схемата, която измислих, използва източника на 5V, наличен от Arduino, и използва 7 резистора и 6 бутона или превключвателя.

Стъпка 1: Веригата

Веригата
Веригата

Arduino имат аналогови входове, които приемат вход от 0V до 5V. Този вход има 10-битова резолюция, което означава, че сигналът е разделен на 2^10 сегмента или 1024 броя. Въз основа на това най -многото, което някога бихме могли да въведем в аналогов вход, като същевременно позволяваме едновременното натискане, биха били 10 бутона към 1 аналогов вход. Но това не е съвършен свят. Има съпротивление в проводниците, шум от външни източници и несъвършена мощност. Така че, за да си дам много гъвкавост, планирах да проектирам това за 6 бутона. Това отчасти беше повлияно от факта, че TinkerCAD Circuits имаше 6-Switch DIP Switch обект, което би улеснило тестването.

Първата стъпка в моя дизайн беше да се уверя, че всеки бутон, когато се натисне поотделно, ще осигури уникално напрежение. Това изключи всички резистори да имат еднаква стойност. Следващата стъпка беше, че стойностите на съпротивлението, когато се добавят паралелно, не могат да имат същото съпротивление като всяка единична стойност на резистора. Когато резисторите са свързани паралелно, полученото съпротивление може да бъде изчислено чрез Rx = 1/[(1/R1)+(1/R2)]. Така че, ако R1 = 2000 и R2 = 1000, Rx = 667. Предполагах, че като удвоя размера на всеки резистор, няма да видя същата съпротива за нито една от комбинациите.

Така че моята верига до този момент трябваше да има 6 превключвателя, всеки със собствен резистор. Но има още един резистор, необходим за завършване на тази верига.

Последният резистор има 3 цели. Първо, той действа като Pull-Down резистор. Без резистора, когато няма натиснати бутони, веригата е непълна. Това би позволило напрежението на аналоговия вход на Arduino да изплува до всеки потенциал на напрежението. Издърпващ се резистор по същество дърпа напрежението до 0 V. Втората цел е да се ограничи токът на тази верига. Законът на Ом гласи, че V = IR или напрежение = ток, умножен по съпротивление. При даден източник на напрежение, по -големият резистор означава, че токът ще бъде по -малък. Така че, ако 5V сигнал беше приложен към 500ohm резистор, най -големият ток, който можем да видим, ще бъде 0.01A или 10mA. Третата цел е да осигури напрежение на сигнала. Общият ток, протичащ през последния резистор, ще бъде: i = 5V/Rtotal, където Rtotal = Rlast+{1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Въпреки това, включете само 1/Rx за всеки резистор, който е натиснал съответния бутон. От общия ток, напрежението, подадено към аналоговия вход, ще бъде i*Rlast или i*500.

Стъпка 2: Доказателство - Excel

Доказателство - Excel
Доказателство - Excel

Най -бързият и лесен начин да докажа, че ще получа уникални съпротивления и по този начин уникални напрежения с тази схема беше да използвам възможностите на Excel.

Настроих всички възможни комбинации от входове за превключване и ги организирах последователно, следвайки двоични модели. Стойност "1" показва, че превключвателят е включен, празно означава, че е изключен. В горната част на електронната таблица поставям стойностите на съпротивлението за всеки превключвател и за падащия резистор. След това изчислих еквивалентното съпротивление за всяка от комбинациите, с изключение на случаите, когато всички резистори са изключени, тъй като тези резистори няма да повлияят, без да имат захранващ източник. За да направя изчисленията си лесни, за да мога да копирам и поставям във всяка комбинация, включих всички комбинации в изчислението, като умножа всяка стойност на превключвателя (0 или 1) по нейната стойност на обърнато съпротивление. Това премахва съпротивлението му от изчислението, ако превключвателят е бил изключен. Полученото уравнение може да се види в изображението на електронната таблица, но Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Използвайки Itotal = 5V / Req, ние определяме общия ток през веригата. Това е същият ток, който преминава през изтеглящия се резистор и ни осигурява напрежението към нашия аналогов вход. Това се изчислява като Vin = Общо x Rx. Разглеждайки както данните Req, така и данните Vin, можем да видим, че наистина имаме уникални стойности.

В този момент изглежда, че нашата верига ще работи. Сега, за да разберете как да програмирате Arduino.

Стъпка 3: Програмиране на Arduino

Програмиране на Arduino
Програмиране на Arduino
Програмиране на Arduino
Програмиране на Arduino
Програмиране на Arduino
Програмиране на Arduino

Когато започнах да мисля как да програмирам Arduino, първоначално планирах да настроя отделни диапазони на напрежение за определяне дали превключвателят е включен или изключен. Но докато лежах в леглото една нощ, ми хрумна, че трябва да мога да намеря уравнение за това. Как? ОТЛИЧНО. Excel има способността да изчислява уравнения, за да пасне най -добре на данните в диаграма. За да направя това, ще искам уравнение на целочислената стойност на превключвателите (двоично) спрямо входното напрежение, съответстващо на тази стойност. В моята работна книга на Excel поставих целочислената стойност в лявата част на електронната таблица. Сега да определя моето уравнение.

Ето кратък урок за това как да определите уравнението на ред в Excel.

1) Изберете клетка, която не съдържа никакви данни. Ако сте избрали клетка с данни, Excel ще се опита да отгатне какво искате да променяте. Това прави създаването на тенденция много по -трудно, тъй като Excel рядко прогнозира правилно.

2) Изберете раздела „Вмъкване“и изберете диаграма „Скатер“.

3) Щракнете с десния бутон в полето за диаграма и кликнете върху „Избор на данни …“. Това ще изскочи прозореца „Избор на източник на данни“. Изберете бутона Добавяне, за да продължите да избирате данните.

4) Дайте му име на серия (по избор). Изберете диапазона за оста X, като щракнете върху стрелката нагоре и след това изберете данните за напрежението. Изберете диапазона за оста Y, като щракнете върху стрелката нагоре и след това изберете Целочислени данни (0-63).

5) Щракнете с десния бутон върху точките с данни и изберете „Add Trendline…“В прозореца „Format Trendline“изберете бутона Polynomial. Разглеждайки тенденцията, виждаме, че редът 2 не съвпада напълно. Избрах Поръчка 3 и почувствах, че това е много по -точно. Поставете отметка в квадратчето за „Показване на уравнението на диаграмата“. Крайното уравнение сега се показва на диаграмата.

6) Готово.

ДОБРЕ. Обратно към програмата Arduino. Сега, когато имаме уравнението, програмирането на Arduino е лесно. Цялото число, което представлява позициите на превключвателя, се изчислява в 1 ред код. Използвайки функцията "bitread", можем да вземем стойността на всеки отделен бит и по този начин да знаем състоянието на всеки бутон. (ВИЖ СНИМКИ)

Стъпка 4: TinkerCAD схеми

TinkerCAD схеми
TinkerCAD схеми

Ако не сте проверили TinkerCAD Circuits, направете го сега. ИЗЧАКАЙТЕ!!!! Завършете четенето на моя Instructable и след това го проверете. TinkerCAD Circuits прави тестването на Arduino схеми много лесно. Той включва няколко електрически обекта и Arduinos, като дори ви позволява да програмирате Arduino за тестване.

За да тествам веригата си, настроих 6 превключвателя с помощта на пакет DIP превключватели и ги завързах към резисторите. За да докажа, че стойността на напрежението в моята електронна таблица на Excel е правилна, показах волтметър на входа на Arduino. Всичко това работеше според очакванията.

За да докажа, че програмирането на Arduino работи, извеждам състоянията на превключвателите към светодиоди, използвайки цифровите изходи на Arduino.

След това превключих всеки превключвател за всяка възможна комбинация и с гордост казвам "РАБОТИ" !!!

Стъпка 5: „Толкова дълго и благодаря за цялата риба“. (реф.1)

Все още не съм изпробвал това с истинско оборудване, тъй като в момента пътувам по работа. Но след като го доказах с TinkerCAD Circuits, вярвам, че ще работи. Предизвикателството е, че стойностите на резисторите, които посочих, не са всички стандартни стойности за резистори. За да заобиколя това, планирам да използвам потенциометри и комбинации от резистори, за да получа стойностите, от които се нуждая.

Благодаря ви, че прочетохте инструкциите ми. Надявам се, че това ще ви помогне с вашите проекти.

Моля, оставете коментари, ако сте се опитали да се справите със същата тази пречка и как сте я решили. Бих искал да науча повече начини за това.

Стъпка 6: Препратки

Не сте мислили, че ще дам цитат, без да посоча източника му, нали?

ref. 1: Адамс, Дъглас. Толкова дълго и благодаря за цялата риба. (Четвъртата книга от "Трилогията" на Пътеводителя на автостопа за галактиката)

Препоръчано: