Talaan ng mga Nilalaman:

DIP Tune Selector Gamit ang 1 Pin: 4 na Hakbang
DIP Tune Selector Gamit ang 1 Pin: 4 na Hakbang

Video: DIP Tune Selector Gamit ang 1 Pin: 4 na Hakbang

Video: DIP Tune Selector Gamit ang 1 Pin: 4 na Hakbang
Video: DR. VICKI BELO's TRANSFORMATION💖🤩#vickibelo #doctor #transformation #viral #trending 2024, Hulyo
Anonim
DIP Tune Selector Gamit ang 1 Pin
DIP Tune Selector Gamit ang 1 Pin

Ilang sandali pa nagtrabaho ako sa isang proyekto na "music box" na kailangan upang pumili sa pagitan ng hanggang 10 magkakaibang mga snippet ng tune. Ang isang natural na pagpipilian para sa pagpili ng isang tukoy na tune ay isang 4 pin dip switch dahil ang 4 na switch ay nagbibigay ng 24= 16 magkakaibang mga setting. Gayunpaman, ang pagpapatupad ng malupit na puwersa para sa pamamaraang ito ay nangangailangan ng 4 na mga pin ng aparato, isa para sa bawat switch. Dahil pinaplano kong gamitin ang ATtiny85 para sa pag-unlad, ang pagkawala ng 4 na pin ay medyo sobra. Sa kasamaang palad, tumakbo ako sa isang artikulo na naglalarawan sa isang mapanlikha na pamamaraan para sa paggamit ng 1 analog pin upang mahawakan ang maraming mga input ng switch.

Ang multi-switch; 1-input na diskarte ay gumagamit ng isang Voltage Divider circuit upang magbigay ng isang natatanging halaga ng integer para sa bawat isa sa 16 mga posibleng kumbinasyon ng setting ng switch. Ang hanay ng 16 integer identifier na ito ay ginagamit sa programa ng aplikasyon upang maiugnay ang isang aksyon sa isang setting.

Ang itinuturo na ito ay gumagamit ng pamamaraang multi-switch upang magpatupad ng pagpili ng tune para sa application ng music box. Ang napiling himig ay i-play pagkatapos ng isang piezo buzzer gamit ang pagpapaandar ng tono ng Arduino.

Hakbang 1: Kinakailangan ang Hardware

Kinakailangan Hardware
Kinakailangan Hardware

Ang paggamit ng UNO bilang platform ng pagpapatupad ay nagpapaliit ng bilang ng mga kinakailangang bahagi ng hardware. Ang pagpapatupad ng pamamaraan ng pag-input ng multi-switch ay nangangailangan lamang ng isang 4-pin dip switch, ang 5 resistors na ginagamit para sa voltage divider, at hookup wire para sa mga koneksyon. Ang isang piezo buzzer ay idinagdag sa pagsasaayos para sa pagpapatupad ng tagapili ng kahon ng musika. Bilang pagpipilian, nakasalalay sa uri ng ginamit na paglipat ng paglubog, kapaki-pakinabang na gumamit ng isang 2x4 8 pin socket upang ikonekta ang dip switch sa breadboard dahil ang karaniwang mga dip pin switch ay tila ginawa para sa paghihinang sa isang perfboard na hindi direktang pagsaksak sa isang breadboard. Pinatatag ng socket ang mga koneksyon ng paglubog at pinipigilan ang switch na madaling maiangat kapag itinatakda ang mga switch ng toggle.

Pangalan Posibleng Pinagmulan Paano Ginamit
4-pin dip switch Pagpili ng Tono
2x4 pin socket (Opsyonal) Amazon Ang mga post sa karamihan sa mga switch ng dip ay hindi masyadong nahahawakan ang switch sa isang breadboard. Ang isang socket ay tumutulong upang gawing mas solid ang koneksyon. Ang isang kahalili ay upang makahanap ng isang dip switch na tunay na ginawa para sa paggamit ng breadboard na may regular na mga IC pin.

resistors:

  • 10K x2
  • 20K
  • 40K
  • 80K
Ipatupad ang divider ng boltahe
passive piezo buzzer Amazon Patugtugin ang himig na hinihimok ng application sa pamamagitan ng pagpapaandar ng tono ng Arduino

Hakbang 2: Pagpapaliwanag sa Paraan ng Multi-switch

Pagpapaliwanag sa Paraan ng Multi-switch
Pagpapaliwanag sa Paraan ng Multi-switch

Tinalakay ng seksyong ito ang mga kalakip na konsepto para sa multi-switch na pamamaraan at bubuo ng mga equation na kinakailangan para sa stand-alone na pagkalkula ng mga natatanging identifier para sa bawat isa sa 16 mga posibleng pagsasaayos ng setting ng paglubog. Ang mga pagkakakilanlan na ito ay maaaring magamit sa isang programa ng aplikasyon upang maiugnay ang isang pagsasaayos ng switch sa isang aksyon. Halimbawa Lion Sleeps Tonight. Para sa pagiging maikli at pagiging maikli ang mga tagapagpakilala sa pagsasaayos ay tinutukoy bilang mga paghahambing sa natitirang dokumento.

Larawan
Larawan

Ang pundasyong konsepto para sa pamamaraan ng multi-switch ay ang Voltage Divider circuit na binubuo ng 2 sa mga resistors ng serye na konektado sa isang boltahe ng pag-input. Ang lead boltahe ng output ay konektado sa pagitan ng mga resistors, R1 at R2, tulad ng ipinakita sa itaas. Ang boltahe ng output ng divider ay kinakalkula bilang input boltahe na pinarami ng ratio ng risistor R2 sa kabuuan ng R1 at R2 (equation 1). Ang ratio na ito ay palaging mas mababa sa 1 kaya ang output boltahe ay palaging mas maliit kaysa sa input boltahe.

Tulad ng ipinahiwatig sa disenyo ng diagram sa itaas ang multi-switch ay na-configure bilang isang boltahe divider na may R2 naayos at R1 katumbas ng pinaghalong / katumbas na paglaban para sa 4 dip switch resistors. Ang halaga ng R1 nakasalalay sa aling mga switch ng paglubog ay naka-on at, samakatuwid, na nag-aambag sa pinaghalong paglaban. Dahil ang mga resistors ng paglipat ng dip ay kahanay, ang katumbas na equation ng pagkalkula ng paglaban ay nakasaad sa mga tuntunin ng mga kapalit ng mga resistor ng sangkap. Para sa aming pagsasaayos at ang kaso na ang lahat ng mga switch ay nakabukas, ang equation ay nagiging

1 / R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

pagbibigay ng R1 = 5333.33 volts. Upang isaalang-alang ang katunayan na ang karamihan sa mga setting ay may hindi bababa sa isa sa mga switch na naka-off, ang estado ng switch ay ginagamit bilang isang multiplier:

1 / R1 = s1* 1/80000 + s2* 1/40000 + s3* 1/20000 + s4*1/10000 (2)

kung saan ang multiplier ng estado, sako, ay katumbas ng 1 kung ang switch ay nakabukas at katumbas ng 0 kung ang switch ay naka-off. R1 maaari nang magamit upang makalkula ang ratio ng paglaban na kinakailangan sa equation 1. Gamit ang kaso kung saan ang lahat ng mga switch ay nakabukas bilang halimbawa muli

RATIO = R2/ (R1+ R2) = 10000/(5333.33+10000) =.6522

Ang huling hakbang sa pagkalkula ng hinulaang halaga ng paghahambing ay pagpaparami ng RATIO ng 1023 upang tularan ang epekto ng pagpapaandar ng analogRead. Ang identifier para sa kaso kung saan nakabukas ang lahat ng switch ay pagkatapos

kumpare15 = 1023*.6522 = 667

Nasa lugar na ngayon ang lahat ng mga equation para sa pagkalkula ng mga identifier para sa 16 posibleng mga setting ng switch. Upang buod:

  1. R1 ay kinakalkula gamit ang equation 2
  2. R1 at R2 ay ginagamit upang makalkula ang nauugnay na pagtutol RATIO
  3. ang RATIO ay pinarami ng 1023 upang makuha ang halaga ng paghahambing
  4. opsyonal, ang hinulaang boltahe ng output ay maaari ring kalkulahin bilang RATIO * Vin

Ang hanay ng mga kumpara ay nakasalalay lamang sa mga halaga ng risistor na ginamit para sa voltner divider at isang natatanging lagda para sa pagsasaayos. Dahil ang mga voltase ng output ng divider ay magbabagu-bago mula sa tumakbo hanggang sa tumakbo (at basahin na basahin), ang natatangi sa kontekstong ito ay nangangahulugang habang ang dalawang hanay ng mga pagkakakilala ay maaaring hindi eksaktong magkapareho sila ay sapat na malapit na ang mga pagkakaiba-iba ng bahagi ng paghahambing ay nahuhulog sa loob ng isang maliit na paunang tinukoy na agwat. Ang parameter ng laki ng agwat ay dapat mapili ng sapat na malaki upang maituring ang mga inaasahang pagbabago-bago ngunit sapat na maliit na hindi magkakasama ang iba't ibang mga setting ng switch. Kadalasan ang 7 ay gumagana nang maayos para sa agwat ng kalahating lapad.

Ang isang hanay ng mga kumpara para sa isang partikular na pagsasaayos ay maaaring makuha ng maraming mga pamamaraan - patakbuhin ang programa ng demo at itala ang mga halaga para sa bawat setting; gamitin ang spreadsheet sa susunod na seksyon upang makalkula; kopyahin ang isang mayroon nang hanay. Tulad ng nabanggit sa itaas ng lahat ng mga hanay ay malamang na bahagyang magkakaiba ngunit dapat gumana. Iminumungkahi ko na gamitin ang hanay ng mga tagakilala ng may-akda ng pamamaraan para sa pag-setup ng multi-switch at ang spreadsheet mula sa susunod na seksyon kung ang alinman sa mga resistor ay binago nang malaki o idinagdag ang maraming mga resistor.

Ang sumusunod na programa sa demo ay naglalarawan ng paggamit ng mga kumpare upang makilala ang kasalukuyang setting ng paglipat ng dip. Sa bawat siklo ng programa isang analogRead ay ginaganap upang makakuha ng isang identifier para sa kasalukuyang pagsasaayos. Ang identifier na ito ay ihinahambing sa listahan ng kumpare hanggang sa matagpuan ang isang tugma o maubos ang listahan. Kung ang isang tugma ay natagpuan ang isang mensahe ng output ay inisyu para sa pag-verify; kung hindi nahanap ang isang babala ay inilabas. Ang isang 3 segundong pagkaantala ay naipasok sa loop upang ang serial window ng output ay hindi masobrahan ng mga mensahe at upang magbigay ng ilang oras upang i-reset ang pagsawid ng switch ng pagsasaayos.

//-------------------------------------------------------------------------------------

// Demo program upang mabasa ang output ng divider ng boltahe at gamitin ito upang makilala ang // kasalukuyang pagsasaayos ng switch ng dip sa pamamagitan ng pagtingin sa output na halaga sa isang hanay ng // mga halaga ng paghahambing para sa bawat posibleng setting. Ang mga halagang nasa lookup array ay maaaring // alinman sa makuha mula sa isang nakaraang pagtakbo para sa pagsasaayos o sa pamamagitan ng pagkalkula // batay sa mga kalakip na equation. // ----------------- ------------------------------------ int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Tukuyin ang mga variable ng pagproseso int dipPin = A0; // analog pin for voltage divider input int dipIn = 0; // humahawak ng output ng boltahe ng divider na isinalin ng analogRead int count = 0; // loop counter int epsilon = 7; // interval ng paghahambing kalahating lapad bool dipFound = false; // true kung kasalukuyang output ng divider ng boltahe na nahanap sa tignan ang talahanayan na walang bisa ang pag-setup () {pinMode (dipPin, INPUT); // configure boltahe divider pin bilang isang INPUT Serial.begin (9600); // paganahin ang serial komunikasyon} void loop () {pagkaantala (3000); // panatilihin ang output mula sa napakabilis na pag-scroll // Initialize ang mga parameter ng paghanap ng bilang = 0; dipFound = false; // Basahin at idokumento ang kasalukuyang output boltahe dipIn = analogRead (dipPin); Serial.print ("divider output"); Serial.print (dipIn); // Listahan ng paghahambing sa paghahanap para sa kasalukuyang halaga habang ((count <16) && (! DipFound)) {kung (abs (dipIn - comparator [count]) <= epsilon) {// natagpuan ito dipFound = true; Serial.print ("matatagpuan sa pagpasok"); Serial.print (count); Serial.println ("halaga" + String (kumpara [bilang])); pahinga; } bilangin ++; } kung (! dipFound) {// hindi halaga sa talahanayan; hindi dapat mangyari Serial.println ("OOPS! Hindi natagpuan; mas mahusay na tawagan ang Ghost Busters"); }}

Hakbang 3: Comparator Spreadsheet

Larawan
Larawan

Ang mga kalkulasyon para sa 16 na halaga ng paghahambing ay ibinibigay sa spreadsheet na ipinakita sa itaas. Ang kasamang file ng excel ay magagamit para sa pag-download sa ilalim ng seksyong ito.

Itinatala ng mga haligi ng Spreadsheet ang mga halaga ng dip switch resistor at ang 16 na posibleng setting ng switch. Mangyaring tandaan na ang switch ng hardware DIP na ipinapakita sa fritzing design diagram ay talagang bilang mula kaliwa hanggang kanan sa halip na ang kanan sa kaliwang pag-numero na ipinakita sa spreadsheet. Natagpuan ko itong medyo nakalilito ngunit ang kahalili ay hindi inilalagay ang pagsasaayos ng "1" (0, 0, 0, 1) sa una sa listahan. Gumagamit ang Hanay E ng pormula 2 ng nakaraang seksyon upang makalkula ang katumbas na Boltahe na Divider na pagtutol R1 para sa setting. Ginagamit ng Column F ang resulta na ito upang makalkula ang nauugnay na pagtutol RATIO, at, sa wakas, ang Column G ay nagpaparami ng RATIO ng analogRead max na halaga (1023) upang makuha ang hinulaang halaga ng kumpare. Ang huling 2 haligi ay naglalaman ng mga aktwal na halaga mula sa isang pagpapatakbo ng programa ng demo kasama ang mga pagkakaiba sa pagitan ng hinulaang at aktwal na mga halaga.

Nabanggit sa naunang seksyon ang tatlong mga pamamaraan upang makakuha ng isang hanay ng mga halaga ng paghahambing kabilang ang pagpapalawak ng spreadsheet na ito kung ang mga halaga ng risistor ay makabuluhang binago o idinagdag ang higit pang mga switch. Lumilitaw na ang maliliit na pagkakaiba sa mga halaga ng resistor ay hindi nakakaapekto nang malaki sa pangwakas na mga resulta (na mabuti dahil ang mga pagtutukoy ng risistor ay nagbibigay ng isang pagpapaubaya, sabihin 5%, at ang risistor ay bihirang katumbas ng aktwal na nakasaad na halaga).

Hakbang 4: Magpatugtog ng Tono

Patugtugin ang isang Tono
Patugtugin ang isang Tono

Upang ilarawan kung paano maaaring gamitin ang diskarteng multi-switch sa isang application, ang programa ng paghahambing ng demo mula sa seksyong "Paraan ng Paliwanag" ay binago upang ipatupad ang pagpoproseso ng pagpili ng tune para sa programa ng kahon ng musika. Ang na-update na pagsasaayos ng application ay ipinapakita sa itaas. Ang tanging karagdagan sa hardware ay isang passive piezo buzzer upang i-play ang napiling tono. Ang pangunahing pagbabago sa software ay pagdaragdag ng isang gawain upang maglaro ng isang tono, sa sandaling nakilala, gamit ang buzzer at ang gawain ng tono ng Arduino.

Ang mga magagamit na mga snippet ng tune ay nakapaloob sa isang header file, Tunes.h, kasama ang kahulugan ng mga kinakailangang istraktura ng suporta. Ang bawat tono ay tinukoy bilang isang hanay ng mga istrukturang nauugnay sa tala na naglalaman ng dalas ng tagal at tagal. Ang mga frequency frequency ay nakapaloob sa isang hiwalay na file ng header, ang Pitches.h. Ang programa at mga file ng header ay magagamit para sa pag-download sa dulo ng seksyong ito. Ang lahat ng tatlong mga file ay dapat na mailagay sa parehong direktoryo.

Pagpipilian at pagkilala sa nalikom tulad ng sumusunod:

  1. Itinatakda ng "gumagamit" ang mga paglipat ng paglubog sa pagsasaayos na nauugnay sa nais na tune
  2. bawat ikot ng loop ng programa ang tagakilala para sa kasalukuyang setting ng paglipat ng dip ay nakuha sa pamamagitan ng analogRead
  3. Ang tagakilala ng pagsasaayos ng hakbang 2 ay inihambing kumpara sa bawat isa sa mga kumpare sa magagamit na listahan ng tune
  4. Kung natagpuan ang isang tugma ang gawain ng playTune ay tinatawag na may impormasyong kinakailangan upang ma-access ang listahan ng tala ng tune

    Gamit ang pagpapaandar ng tono ng Arduino bawat nota ay nilalaro sa pamamagitan ng buzzer

  5. Kung walang nahanap na tugma, walang aksyon na gagawin
  6. ulitin ang 1-5

Ang mga setting ng switch ng DIP para sa mga magagamit na tono ay ipinapakita sa talahanayan sa ibaba kung saan ang 1 ay nangangahulugang nakabukas ang switch, 0 ang patayin. Alalahanin na ang paraan ng paglubog ng paglipat ay nakatuon sa mga lugar na lumipat 1 sa kaliwang pinaka-posisyon (ang nauugnay sa 80K risistor).

PANGALAN Lumipat 1 Lumipat 2 Lumipat 3 Lumipat 4
Danny Boy 1 0 0 0
Maliit na oso 0 1 0 0
Lion Sleeps Tonight 1 1 0 0
Walang Alam sa Gulo 0 0 1 0
Kamangha-manghang Grace 0 0 0 1
Blangkong Puwang 1 0 0 1
MockingBird Hill 1 0 1 1

Ang kalidad ng tunog mula sa isang piezo buzzer ay tiyak na hindi mahusay ngunit ito ay hindi bababa sa makikilala. Sa katunayan kung sinusukat ang mga tono, napakalapit sa mga tala ng eksaktong dalas. Ang isang kagiliw-giliw na pamamaraan na ginamit sa programa ay ang pag-iimbak ng tune data sa seksyon ng memorya ng flash / programa sa halip na ang default na seksyon ng memorya ng data sa pamamagitan ng paggamit ng direktibong PROGMEM. Ang seksyon ng data ay humahawak ng mga variable ng pagpoproseso ng programa at mas maliit, sa paligid ng 512 bytes para sa ilan sa mga ATtiny microcontroller.

Inirerekumendang: