Съдържание:
- Стъпка 1: Необходим хардуер
- Стъпка 2: Метод с няколко превключвателя Обяснение
- Стъпка 3: Сравнителна електронна таблица
- Стъпка 4: Пуснете мелодия
Видео: Селектор за DIP настройка с помощта на 1 щифт: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Преди време работих по проект за „музикална кутия“, който трябваше да избира между цели 10 различни фрагмента от мелодия. Естествен избор за избор на конкретна мелодия беше 4 -пинов потапящ превключвател, тъй като 4 превключвателя осигуряват 24= 16 различни настройки. Въпреки това, прилагането на груба сила за този подход изисква 4 пина на устройството, по един за всеки превключвател. Тъй като планирах да използвам ATtiny85 за разработка, загубата на 4 пина беше малко прекалено. За щастие попаднах на статия, която описва гениален метод за използване на 1 аналогов щифт за обработка на множество входове за превключване.
Техниката с множество превключватели; 1 вход използва схема на делител на напрежение, за да осигури уникална цяло числова стойност за всяка от 16-те възможни комбинации за настройка на превключвателя. Този набор от 16 целочислени идентификатора след това се използва в приложната програма за свързване на действие с настройка.
Тази инструкция използва метода с няколко превключвателя, за да приложи избор на мелодия за приложението за музикална кутия. След това избраната мелодия се възпроизвежда чрез пиезо зумер, използвайки функцията за тон на Arduino.
Стъпка 1: Необходим хардуер
Използването на UNO като платформа за внедряване минимизира броя на необходимите хардуерни компоненти. Прилагането на метода за вход с множество превключватели изисква само 4-пинов потапящ ключ, 5-те резистора, използвани за делителя на напрежението, и свързващ проводник за връзки. Към конфигурацията се добавя пиезо зумер за внедряване на селектора за настройка на музикалната кутия. По избор, в зависимост от вида на използвания dip превключвател, е полезно да използвате 2x4 8 -пинов контакт за свързване на dip превключвателя към макетната платка, тъй като стандартните щифтове за dip превключватели изглежда са предназначени за запояване към перфорирана дъска, която не се включва директно в дъската. Гнездото стабилизира връзките на потапящия превключвател и предпазва превключвателя от лесно повдигане при настройка на превключвателите.
Име | Възможен източник | Как се използва |
---|---|---|
4-пинов потапящ превключвател | Избор на мелодия | |
2x4 пинов контакт (по избор) | Amazon | Стълбовете на повечето превключватели за потапяне не държат превключвателя много добре в макет. Гнездото помага да се направи връзката по -стабилна. Алтернатива е да се намери потапящ превключвател, който наистина е направен за използване на макет с обикновени IC пинове. |
резистори:
|
Инсталирайте разделител на напрежение | |
пасивен пиезо зумер | Amazon | Възпроизвеждане на мелодия, управлявана от приложението чрез функцията за тон на Arduino |
Стъпка 2: Метод с няколко превключвателя Обяснение
В този раздел се обсъждат основните концепции за метода с множество превключватели и се разработват уравненията, необходими за самостоятелно изчисляване на уникални идентификатори за всяка от 16-те възможни конфигурации за настройка на dip switch. След това тези идентификатори могат да се използват в приложна програма за свързване на конфигурация на превключвател с действие. Например, може да искате настройката - включване 1, изключване 2, изключване 3, изключване 4 (1, 0, 0, 0) - за възпроизвеждане на Amazing Grace и (0, 1, 0, 0) за възпроизвеждане Лъвът спи тази нощ. За краткост и сбитост идентификаторите на конфигурацията се наричат сравнители в останалата част от документа.
Основната концепция за метода с множество превключватели е веригата на делителя на напрежение, която се състои от 2 последователни резистора, свързани към входно напрежение. Изходният проводник на напрежение е свързан между резисторите, R1 и Р2, както е показано по -горе. Изходното напрежение на делителя се изчислява като входното напрежение, умножено по съотношението на резистора R2 към сумата на R1 и Р2 (уравнение 1). Това съотношение винаги е по -малко от 1, така че изходното напрежение винаги е по -малко от входното напрежение.
Както е посочено в схемата за проектиране по-горе, мулти-превключвателят е конфигуриран като делител на напрежение с R2 фиксиран и R1 равно на композитното/еквивалентно съпротивление за 4 -те резистора на дип превключвател. Стойността на R1 зависи от това кои дип превключватели са включени и следователно допринасят за композитното съпротивление. Тъй като резисторите на дип превключвателя са успоредни, уравнението за изчисляване на еквивалентното съпротивление е посочено по отношение на реципрочните стойности на съставните резистори. За нашата конфигурация и в случай, че всички ключове са включени, уравнението става
1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
давайки R1 = 5333,33 волта. За да се отчете фактът, че повечето настройки имат изключен поне един от превключвателите, състоянието на превключвателя се използва като множител:
1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)
където множителят на състоянието, si, е равно на 1, ако превключвателят е включен и равно на 0, ако превключвателят е изключен. R1 сега може да се използва за изчисляване на съотношението на съпротивлението, необходимо в уравнение 1. Като отново се използва случаят, когато всички превключватели са включени
ОТНОШЕНИЕ = R2/(R1+R2) = 10000/(5333.33+10000) =.6522
Последната стъпка в изчисляването на прогнозираната сравнителна стойност е умножаването на RATIO по 1023 с цел емулиране на ефекта от функцията analogRead. Идентификаторът за случая, когато всички превключватели са включени, е тогава
компаратор15 = 1023*.6522 = 667
Всички уравнения вече са налице за изчисляване на идентификатори за 16 -те възможни настройки за превключване. Да обобщим:
- R1 се изчислява с помощта на уравнение 2
- R1 и Р2 се използват за изчисляване на свързаното съпротивление RATIO
- коефициентът се умножава по 1023, за да се получи сравнителната стойност
- по избор прогнозираното изходно напрежение може да се изчисли и като RATIO*Vin
Наборът от сравнителни устройства зависи само от стойностите на резистора, използвани за делителя на напрежението и са уникален подпис за конфигурацията. Тъй като изходното напрежение на разделителя ще се колебае от цикъл до цикъл (и четене за четене), уникално в този контекст означава, че макар два набора от идентификатори да не са абсолютно еднакви, те са достатъчно близки, че разликите в сравнителния компонент попадат в рамките на малка предварителна стойност. определен интервал. Параметърът за размер на интервала трябва да бъде избран достатъчно голям, за да отчете очакваните колебания, но достатъчно малък, че различните настройки на превключвателя да не се припокриват. Обикновено 7 работи добре за интервала полуширина.
Набор от сравнители за определена конфигурация може да бъде получен по няколко метода - стартирайте демонстрационната програма и запишете стойностите за всяка настройка; използвайте електронната таблица в следващия раздел, за да изчислите; копирайте съществуващ набор. Както бе отбелязано по -горе, всички комплекти най -вероятно ще бъдат малко по -различни, но трябва да работят. Предлагам да се използва авторският набор от идентификатори на метода за настройката на няколко превключвателя и електронната таблица от следващия раздел, ако някой от резисторите е променен значително или са добавени повече резистори.
Следващата демонстрационна програма илюстрира използването на компараторите за идентифициране на текущата настройка на дип превключвател. Във всеки програмен цикъл се извършва analogRead за получаване на идентификатор за текущата конфигурация. След това този идентификатор се сравнява в сравнителния списък, докато се намери съвпадение или списъкът се изчерпи. Ако се намери съвпадение, се издава изходящо съобщение за проверка; ако не се намери, се издава предупреждение. Закъснение от 3 секунди се вмъква в цикъла, така че прозорецът на серийния изход да не бъде затрупан с съобщения и да даде известно време за нулиране на конфигурацията на dip switch.
//-------------------------------------------------------------------------------------
// Демонстрационна програма за четене на изхода на делителя на напрежение и го използва за идентифициране на // текущата конфигурация на дип превключвател, като търси изходната стойност нагоре в масив от // сравнителни стойности за всяка възможна настройка. Стойностите в масива за търсене могат // да бъдат получени или от предишно изпълнение за конфигурацията, или чрез изчисление // въз основа на основните уравнения. // ------------------------------------------------ -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Дефиниране на променливи за обработка int dipPin = A0; // аналогов щифт за вход на делител на напрежение int dipIn = 0; // задържа изходното напрежение на разделителя, преведено от analogRead int count = 0; // брояч на цикли int epsilon = 7; // интервал за сравнение полуширина bool dipFound = false; // вярно, ако изходният делител на текущото напрежение е намерен в таблицата за търсене void setup () {pinMode (dipPin, INPUT); // конфигурираме щифт на разделителя на напрежение като INPUT Serial.begin (9600); // разрешаване на серийна комуникация} void loop () {delay (3000); // не позволявам на превъртането твърде бързо // Инициализиране на параметрите за търсене count = 0; dipFound = невярно; // Прочетете и документирайте текущото изходно напрежение dipIn = analogRead (dipPin); Serial.print ("изход за разделител"); Serial.print (dipIn); // Търсене в сравнителния списък за текуща стойност while ((count <16) && (! DipFound)) {if (abs (dipIn - comparator [count]) <= epsilon) {// го намери dipFound = true; Serial.print ("намерено при влизане"); Serial.print (брой); Serial.println ("стойност" + низ (сравнител [брой])); прекъсване; } брой ++; } if (! dipFound) {// стойността не е в таблицата; не трябва да се случва Serial.println ("OOPS! Не е намерено; по -добре се обадете на Ghost Busters"); }}
Стъпка 3: Сравнителна електронна таблица
Изчисленията за 16 -те сравнителни стойности са дадени в електронната таблица, показана по -горе. Придружаващият Excel файл е достъпен за изтегляне в долната част на този раздел.
Колоните A-D в електронна таблица записват стойностите на резистора на dip switch и 16-те възможни настройки на превключвателя. Моля, обърнете внимание, че хардуерният DIP превключвател, показан на диаграмата за проектиране на фритзинг, всъщност е номериран отляво надясно, вместо номерирането отдясно наляво, показано в електронната таблица. Намерих това донякъде объркващо, но алтернативата не поставя конфигурацията "1" (0, 0, 0, 1) на първо място в списъка. Колона Е използва формула 2 от предишния раздел за изчисляване на еквивалентното съпротивление на делителя на напрежението R1 за настройката. Колона F използва този резултат за изчисляване на свързаното съпротивление RATIO и накрая колона G умножава RATIO по максималната стойност на analogRead (1023), за да получи прогнозираната сравнителна стойност. Последните 2 колони съдържат действителните стойности от изпълнението на демонстрационната програма заедно с разликите между прогнозираните и действителните стойности.
Предишният раздел спомена три метода за получаване на набор от сравнителни стойности, включително разширяване на тази електронна таблица, ако стойностите на резистора са значително променени или са добавени повече превключватели. Изглежда, че малките разлики в стойностите на резистора не влияят значително върху крайните резултати (което е добре, тъй като спецификациите на резистора дават толеранс, да речем 5%, а резисторът рядко е равен на действителната заявена стойност).
Стъпка 4: Пуснете мелодия
За да се илюстрира как техниката за многократно превключване може да се използва в приложение, демонстрационната програма за сравнение от раздела „Обяснение на метода“е модифицирана, за да приложи обработката за избор на мелодия за програмата за музикална кутия. Актуализираната конфигурация на приложението е показана по -горе. Единственото допълнение към хардуера е пасивен пиезо зумер за възпроизвеждане на избраната мелодия. Основната промяна в софтуера е добавяне на рутина за възпроизвеждане на мелодия, веднъж идентифицирана, с помощта на зумера и рутинния тон на Arduino.
Наличните фрагменти от мелодии се съдържат в заглавен файл, Tunes.h, заедно с дефиницията на необходимите поддържащи структури. Всяка мелодия е дефинирана като масив от нотни структури, съдържащи нотната честота и продължителност. Бележките честоти се съдържат в отделен заглавен файл, Pitches.h. Програмата и заглавните файлове са достъпни за изтегляне в края на този раздел. И трите файла трябва да бъдат поставени в една и съща директория.
Изборът и идентификацията протичат, както следва:
- „Потребителят“задава превключвателите за потапяне в конфигурацията, свързана с желаната мелодия
- всеки цикъл на програмния цикъл идентификаторът за текущата настройка на дип превключвател се получава чрез analogRead
- Идентификаторът на конфигурацията от стъпка 2 се сравнява с всеки от сравнителите в наличния списък с мелодии
-
Ако се намери съвпадение, се извиква програмата playTune с информацията, необходима за достъп до списъка с мелодии
Използвайки функцията за тон на Arduino, всяка нота се изпълнява чрез зумера
- Ако не се намери съвпадение, не се предприемат действия
- повторете 1-5
Настройките на DIP превключвателя за наличните мелодии са показани в таблицата по -долу, където 1 означава, че превключвателят е включен, 0 изключен. Припомнете си, че начинът, по който е ориентиран превключвателят, поставя превключвател 1 в най-лявата позиция (тази, свързана с 80K резистора).
ИМЕ | Превключвател 1 | Превключвател 2 | Превключвател 3 | Превключвател 4 |
Дани Бой | 1 | 0 | 0 | 0 |
Малка мечка | 0 | 1 | 0 | 0 |
Лъвът спи тази нощ | 1 | 1 | 0 | 0 |
Никой не знае бедата | 0 | 0 | 1 | 0 |
Невероятна благодат | 0 | 0 | 0 | 1 |
Празно място | 1 | 0 | 0 | 1 |
MockingBird Hill | 1 | 0 | 1 | 1 |
Качеството на звука от пиезо зумер със сигурност не е страхотно, но поне е разпознаваемо. Всъщност, ако тоновете се измерват, те са много близки до точната честота на нотите. Една интересна техника, използвана в програмата, е да се съхраняват данните за настройката в раздела за флаш памет/програма, вместо в секцията за памет по подразбиране на данни, като се използва директивата PROGMEM. Разделът с данни съдържа променливите за обработка на програмата и е много по -малък, около 512 байта за някои от микроконтролерите ATtiny.
Препоръчано:
Настройка на Raspberry Pi 4 чрез лаптоп/компютър с помощта на Ethernet кабел (без монитор, без Wi-Fi): 8 стъпки
Настройка на Raspberry Pi 4 чрез лаптоп/компютър с помощта на Ethernet кабел (без монитор, без Wi-Fi): В това ще работим с Raspberry Pi 4 Model-B от 1Gb RAM за настройката. Raspberry-Pi е единичен настолен компютър, използван за образователни цели и DIY проекти на достъпна цена, изисква захранване от 5V 3A
Лесна настройка на IR дистанционното управление с помощта на LIRC за Raspberry PI (RPi) - юли 2019 г. [част 1]: 7 стъпки
Лесна настройка на IR дистанционното управление с помощта на LIRC за Raspberry PI (RPi) - юли 2019 г. [част 1]: След дълго търсене бях изненадан и обезпокоен от противоречивата информация за това как да настроя IR дистанционното управление за моя проект RPi. Мислех, че ще бъде лесно, но настройката на Linux InfraRed Control (LIRC) е проблематична от дълго време, но
Лесна настройка IR дистанционно управление с помощта на LIRC за Raspberry PI (RPi) - юли 2019 г. [част 2]: 3 стъпки
Лесна настройка на IR дистанционно управление с помощта на LIRC за Raspberry PI (RPi) - юли 2019 г. [част 2]: В част 1 демонстрирах как да сглобявам RPi + VS1838b и да конфигурирам LIRC модула на Raspbian да получава IR команди от IR дистанционно. Всички проблеми с настройките на хардуера и LIRC са обсъдени в част 1. Част 2 ще демонстрира как да се свърже хардуерната
Настройка на DS3231 RTC (часовник в реално време) точно, бързо и автоматично с помощта на Java (+-1s): 3 стъпки
Задаване на DS3231 RTC (часовник в реално време) точно, бързо и автоматизирано с помощта на Java (+-1s): Тази инструкция ще ви покаже как да настроите часа на DS3231 часовник в реално време с помощта на Arduino и малко Java приложение, което използва серийната връзка на Arduino. Основната логика на тази програма: 1. Arduino изпраща серийна заявка
Аудио селектор на Mint Box: 3,5 мм аудио превключвател: 6 стъпки
Аудио селектор на Mint Box: 3,5 мм аудио превключвател: Проблем: Често трябва да използвам слушалки за игри или слушане на музика, докато други хора са в стаята и след това трябва да превключвам към високоговорители, ако искам да покажа забавен видео или направете интернет обаждане до далечен роднина. Th