Агуулгын хүснэгт:

1 Pin ашиглан DIP тааруулах сонгогч: 4 алхам
1 Pin ашиглан DIP тааруулах сонгогч: 4 алхам

Видео: 1 Pin ашиглан DIP тааруулах сонгогч: 4 алхам

Видео: 1 Pin ашиглан DIP тааруулах сонгогч: 4 алхам
Видео: Generate Studio Quality Realistic Photos By Kohya LoRA Stable Diffusion Training - Full Tutorial 2024, Долдугаар сарын
Anonim
1 Pin ашиглан DIP тааруулах сонгогч
1 Pin ашиглан DIP тааруулах сонгогч

Хэсэг хугацааны өмнө би "хөгжмийн хайрцаг" төсөл дээр ажиллаж байсан бөгөөд 10 өөр өөр аялгуунаас сонгох шаардлагатай байв. Тодорхой аялгууг сонгох байгалийн сонголт бол 4 унтраалгатай 2 товчлууртай тул 4 зүү унтрах унтраалга байв4= 16 өөр тохиргоо. Гэсэн хэдий ч энэхүү арга барилын хүчирхийллийн хүчийг хэрэгжүүлэхийн тулд унтраалга тус бүрт нэг төхөөрөмжийн 4 голтой байх шаардлагатай. Би ATtiny85 -ийг хөгжүүлэх зорилгоор ашиглахаар төлөвлөж байсан тул 4 тээглүүр алдагдсан нь хэтэрхий их байсан. Аз болоход би олон аналог оролтыг зохицуулахын тулд 1 аналог зүү ашиглах гайхалтай аргыг тайлбарласан нийтлэлтэй танилцлаа.

Олон унтраалга; 1 оролтын техник нь хүчдэл хуваагдлын хэлхээг ашиглан 16 боломжит унтраалга тохируулгын хослол бүрт өвөрмөц бүхэл тоон утгыг өгдөг. Энэхүү 16 бүхэл тоон танигчийн багцыг дараа нь хэрэглээний програмд үйлдлийг тохиргоотой холбоход ашигладаг.

Энэхүү зааварчилгаа нь хөгжмийн хайрцагны програмыг тааруулах сонголтыг хэрэгжүүлэхийн тулд олон шилжих аргыг ашигладаг. Сонгосон аялгууг Arduino tone функцийг ашиглан пьезо дуугаруулагчаар тоглуулдаг.

Алхам 1: Шаардлагатай техник хангамж

Шаардлагатай техник хангамж
Шаардлагатай техник хангамж

НҮБ -ыг хэрэгжүүлэх платформ болгон ашиглах нь шаардлагатай тоног төхөөрөмжийн бүрэлдэхүүн хэсгүүдийн тоог бууруулдаг. Олон унтраалгатай оролтын аргыг хэрэгжүүлэхийн тулд зөвхөн 4 зүү унтрах унтраалга, хүчдэл хуваагуурт ашигладаг 5 резистор, холболтод холбох утас шаардлагатай болно. Хөгжмийн хайрцгийг тааруулах сонголтыг хэрэгжүүлэх тохиргоонд пьезо дуугаруулагч нэмж оруулсан болно. Нэмэлт дүрсний унтраалгын төрлөөс хамааран дүрэх товчлуурыг талхны тавцан руу холбохын тулд 2х4 хэмжээтэй 8 зүү бүхий залгуурыг ашиглах нь ашигтай байдаг, учир нь стандарт дүрэх унтраалга нь зүү нь самбар дээр шууд залгагддаггүй перформаторт гагнах зориулалттай юм шиг санагддаг. Сокет нь унтрах унтраалгын холболтыг тогтворжуулж, унтраалгыг тохируулахдаа унтраалгыг амархан өргөхөөс хамгаална.

Нэр Боломжит эх сурвалж Хэрхэн ашигласан
4 зүү унтрах унтраалга Сонголт тааруулах
2х4 зүү залгуур (заавал биш) Амазон Ихэнх унтрах унтраалга дээрх бичлэгүүд нь унтраалгыг талхны тавцан дээр сайн барьдаггүй. Сокет нь холболтыг илүү бат бөх болгоход тусалдаг. Өөр нэг хувилбар бол жирийн IC тээглүүр ашиглан талхны самбар ашиглахад зориулагдсан дүрэх унтраалгыг олох явдал юм.

эсэргүүцэл:

  • 10K x2
  • 20К
  • 40К
  • 80К
Хүчдэл хуваагчийг хэрэгжүүлэх
идэвхгүй пьезо дуугаралт Амазон Arduino аяны функцээр дамжуулан програмын дагуу аялгуу тоглуул

Алхам 2: Олон шилжүүлэгчтэй аргын тайлбар

Олон шилжүүлэгчтэй аргын тайлбар
Олон шилжүүлэгчтэй аргын тайлбар

Энэ хэсэгт олон унтраалгатай аргын үндсэн ойлголтуудыг авч үзэх бөгөөд 16 боломжит дүрж тохируулах тохиргоо тус бүрийн өвөрмөц танигчийг бие даан тооцоолоход шаардлагатай тэгшитгэлийг боловсруулна. Эдгээр танигчийг дараа нь програмын програмд шилжүүлэгчийн тохиргоог үйлдэлтэй холбоход ашиглаж болно. Жишээлбэл, та 1 тохиргоог асаах, 2 унтраах, 3 унтраах, 4 унтраах (1, 0, 0, 0) - Amazing Grace болон (0, 1, 0, 0) тоглохыг хүсч байна. Арслан өнөө орой унтлаа. Товч бөгөөд товчхон байхын тулд тохиргооны таних тэмдгийг баримт бичгийн үлдсэн хэсэгт харьцуулагч гэж нэрлэдэг.

Зураг
Зураг

Олон унтраалгатай аргын үндсэн ойлголт бол оролтын хүчдэлд холбогдсон 2 цуврал резистороос бүрдэх хүчдэл хуваагчийн хэлхээ юм. Гаралтын хүчдэлийн тугалга нь резисторуудын хооронд холбогдсон, R1 болон Р2, дээр үзүүлсэн шиг. Хуваагчийн гаралтын хүчдэлийг оролтын хүчдэлийг эсэргүүцэл R -ийн харьцаагаар үржүүлж тооцно2 R -ийн нийлбэр хүртэл1 болон Р2 (тэгшитгэл 1). Энэ харьцаа нь үргэлж 1 -ээс бага байдаг тул гаралтын хүчдэл нь оролтын хүчдэлээс үргэлж бага байдаг.

Дээрх дизайны диаграммд заасны дагуу олон унтраалгыг R хүчдэл хуваагч болгон тохируулсан болно2 тогтмол ба Р1 4 уналтын унтраалгын эсэргүүцлийн нийлмэл/эквивалент эсэргүүцэлтэй тэнцүү. R -ийн үнэ цэнэ1 ямар дүрэх унтраалгыг асаахаас хамаардаг бөгөөд ингэснээр нийлмэл эсэргүүцэлд хувь нэмэр оруулдаг. Уналтын унтраалга резисторууд зэрэгцээ байрладаг тул эсэргүүцлийн тэнцүү тооцооны тэгшитгэлийг бүрэлдэхүүн хэсгүүдийн резисторуудын харилцан хамаарлаар илэрхийлнэ. Бидний тохиргоо болон бүх унтраалга асаалттай байгаа тохиолдолд тэгшитгэл болно

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

өгөх Р1 = 5333.33 вольт. Ихэнх тохиргоонд дор хаяж нэг унтраалгыг унтраасан байдгийг харгалзан үзэхийн тулд шилжүүлэгчийн төлөвийг үржүүлэгч болгон ашигладаг.

1/R1 = с1*1/80000 + с2*1/40000 + с3*1/20000 + с4*1/10000 (2)

хаана улсын үржүүлэгч, sби, унтраалга асаалттай байвал 1 -тэй, унтраасан бол 0 -тэй тэнцүү байна. R1 тэгшитгэлд шаардлагатай эсэргүүцлийн харьцааг тооцоолоход ашиглаж болно 1. Бүх унтраалга асаалттай байгаа тохиолдлыг дахин жишээ болгон ашиглана

Харьцаа = R2/(Р1+R2) = 10000/(5333.33+10000) =.6522

Урьдчилан тооцоолсон утгыг тооцоолох сүүлийн алхам бол analogRead функцийн нөлөөг дуурайхын тулд RATIO -ийг 1023 -аар үржүүлэх явдал юм. Дараа нь бүх унтраалга асаалттай байгаа тохиолдолд танигч болно

харьцуулагч15 = 1023*.6522 = 667

Бүх тэгшитгэлүүд нь шилжих боломжтой 16 тохиргооны танигчдыг тооцоолоход бэлэн болсон байна. Нэгтгэн дүгнэхэд:

  1. R1 2 -р тэгшитгэлийг ашиглан тооцоолно
  2. R1 болон Р2 холбогдох эсэргүүцлийн RATIO -ийг тооцоолоход ашигладаг
  3. харьцааг 1023 -аар үржүүлж харьцуулах утгыг авна
  4. сонголтоор урьдчилан тооцоолсон гаралтын хүчдэлийг RATIO*Vin гэж тооцоолж болно

Харьцуулагчийн багц нь зөвхөн хүчдэл хуваагуурт ашиглагддаг эсэргүүцлийн утгуудаас хамаардаг бөгөөд тохиргооны өвөрмөц гарын үсэг юм. Хуваагуурын гаралтын хүчдэл гүйлтээс гүйлт рүү (мөн уншихаас унших хүртэл) хэлбэлзэх тул энэ утгаараа өвөрмөц байх нь хоёр тодорхойлогчийн багц нь хоорондоо ижил биш байж болох ч гэсэн бүрэлдэхүүн хэсгүүдийн харьцуулагчийн ялгаа нь урьдчилсан байдлаар багтах болно гэсэн үг юм. заасан интервал. Интервалын параметрийн параметрийг хүлээгдэж буй хэлбэлзлийг тооцох хангалттай том хэмжээтэй байх ёстой боловч өөр өөр шилжүүлэгчийн тохиргоо давхцахгүй байхаар хангалттай бага байх ёстой. Ихэвчлэн 7 нь хагас өргөн интервалд сайн ажилладаг.

Тодорхой тохиргоонд зориулсан харьцуулагчийн багцыг хэд хэдэн аргаар олж авч болно - демо програмыг ажиллуулж, тохиргоо бүрийн утгыг бүртгэх; дараагийн хэсэгт байгаа хүснэгтийг ашиглан тооцоолох; одоо байгаа багцыг хуулах. Дээр дурдсанчлан бүх багцууд арай өөр байх боловч ажиллах ёстой. Хэрэв резисторуудын аль нэг нь мэдэгдэхүйц өөрчлөгдсөн эсвэл түүнээс дээш эсэргүүцэл нэмсэн бол дараагийн хувилбарын олон унтраалгатай тохиргооны зохиогчийн тодорхойлогчийн багцыг ашиглахыг санал болгож байна.

Дараахь демо програм нь одоогийн уналтын тохиргоог тодорхойлохын тулд харьцуулагчийг ашиглахыг харуулав. Програмын мөчлөг бүрт одоогийн тохиргооны танигчийг олж авахын тулд analogRead хийгддэг. Дараа нь энэ таних тэмдгийг тааруулагч олдох эсвэл жагсаалт дуусах хүртэл харьцуулагчийн жагсаалтад харьцуулна. Хэрэв тааралдсан бол баталгаажуулахын тулд гаралтын зурвас гаргадаг; олж чадаагүй бол анхааруулга өгдөг. 3 секундын хоцролтыг давталтад оруулсан бөгөөд ингэснээр цуваа гаралтын цонхыг зурвасууд дарахгүй бөгөөд уналтын тохиргоог дахин тохируулахын тулд хэсэг хугацаа өгөх болно.

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

// Демо програм нь хүчдэл хуваагчийн гаралтыг уншиж, боломжит тохиргоо бүрийн гаралтын утгыг // харьцуулах утгуудын массиваас хараад // одоогийн уналтын унтраалгын тохиргоог тодорхойлоход ашигладаг. Хайлтын массив дахь утгыг // тохиргооны өмнөх гүйлгээнээс эсвэл тооцоолох замаар олж авч болно. // ------------------------------------------------ -------------------------------------- int харьцуулагч [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Боловсруулах хувьсагчдыг тодорхойлох int dipPin = A0; // хүчдэл хуваагч оролтын аналог зүү int dipIn = 0; // аналогоор орчуулагдсан хуваагдлын хүчдэлийн гаралтыг эзэмшдэгRead int count = 0; // давталтын тоолуур int epsilon = 7; // харьцуулах интервал хагас өргөн bool dipFound = false; // үнэн бол хэрэв хүчдэл хуваагчийн гаралтыг хүснэгтийн хоосон тохиргоонд олсон бол () {pinMode (dipPin, INPUT); // хүчдэл хуваагч зүүг INPUT Serial.begin (9600) болгон тохируулах; // цуваа холболтыг идэвхжүүлэх} void loop () {delay (3000); // гаралтыг хэт хурдан гүйлгэхээс сэргийлнэ үү // Хайлтын параметрүүдийг эхлүүлнэ count = 0; dipFound = худал; // Одоогийн гаралтын хүчдэлийг уншиж, баримтжуулах dipIn = analogRead (dipPin); Serial.print ("хуваагчийн гаралт"); Serial.print (dipIn); // Одоогийн утгыг харьцуулах жагсаалтаас хайж байхдаа Serial.print ("ороход олдсон"); Цуваа.хэвлэх (тоолох); Serial.println ("утга" + мөр (харьцуулагч [тоо])); завсарлага; } тоолох ++; } if (! dipFound) {// утга хүснэгтэд байхгүй; болохгүй байх ёстой Serial.println ("OOPS! Олдоогүй; Ghost Busters руу залгах нь дээр"); }}

Алхам 3: Харьцуулагчийн хүснэгт

Зураг
Зураг

Харьцуулах 16 утгын тооцоог дээр үзүүлсэн хүснэгтэд өгсөн болно. Дагалдах Excel файлыг энэ хэсгийн доод хэсэгт татаж авах боломжтой.

Хүснэгтийн баганууд A-D нь уналтын унтраалгын эсэргүүцэгчийн утгууд болон шилжих боломжтой 16 тохиргоог бүртгэдэг. Fritzing дизайны диаграммд үзүүлсэн тоног төхөөрөмжийн DIP унтраалга нь хүснэгтэд үзүүлсэн баруунаас зүүн тийш дугаарлахын оронд зүүнээс баруун тийш дугаарласан болохыг анхаарна уу. Энэ нь надад ойлгомжгүй санагдсан боловч өөр хувилбар нь "1" тохиргоог (0, 0, 0, 1) жагсаалтын эхний хэсэгт оруулаагүй болно. Е багана нь өмнөх хэсгийн 2 -р томъёог ашиглан хүчдэл хуваагчийн эквивалент эсэргүүцэл R -ийг тооцоолно1 тохиргооны хувьд. F багана нь энэ үр дүнг ашиглан RATIO эсэргүүцлийг тооцоолох бөгөөд эцэст нь G багана нь RATIO -ийг analogRead хамгийн их утгаар (1023) үржүүлж харьцуулсан утгыг олж авна. Төгсгөлийн 2 багана нь демо програмын гүйлтийн бодит утгуудыг, урьдчилан таамагласан болон бодит утгуудын ялгааг агуулдаг.

Өмнөх хэсэгт эсэргүүцлийн утга мэдэгдэхүйц өөрчлөгдсөн эсвэл илүү олон унтраалга нэмсэн тохиолдолд энэхүү хүснэгтийг өргөтгөх зэрэг харьцуулах утгуудын багцыг олж авах гурван аргыг дурдсан болно. Резисторын утгын бага ялгаа нь эцсийн үр дүнд төдийлөн нөлөөлдөггүй (энэ нь сайн, учир нь эсэргүүцлийн үзүүлэлтүүд хүлцэл өгдөг, 5%гэж хэлдэг бөгөөд эсэргүүцэл нь түүний бодит утгатай тэнцэх нь ховор байдаг).

Алхам 4: Аяыг тоглуулах

Аяыг тоглуулах
Аяыг тоглуулах

Аппликешн дээр олон сэлгэн залгах техникийг хэрхэн ашиглаж болохыг харуулахын тулд "Аргын тайлбар" хэсгийн харьцуулах демо програмыг хөгжмийн хайрцагны програмын аяыг сонгох процессыг хэрэгжүүлэх зорилгоор өөрчилсөн болно. Шинэчлэгдсэн програмын тохиргоог дээр харуулав. Тоног төхөөрөмжийн цорын ганц нэмэлт бол сонгосон аяыг тоглуулах идэвхгүй пьезо дуугаралт юм. Програм хангамжийн үндсэн өөрчлөлт бол дуут дохио, Arduino аяыг ашиглан дууг тоглуулах горимыг нэмж оруулах явдал юм.

Боломжит тааруулах хэсгүүдийг Tunes.h толгой файлд, шаардлагатай дэмжлэгийн бүтцийн тодорхойлолтын хамт оруулсан болно. Дуу бүрийг тэмдэглэлийн давтамж, үргэлжлэх хугацааг агуулсан тэмдэглэлтэй холбоотой бүтэц хэлбэрээр тодорхойлдог. Тэмдэглэлийн давтамжийг Pitch.h гэсэн тусдаа толгой файлд оруулсан болно. Програм болон толгой файлуудыг энэ хэсгийн төгсгөлд татаж авах боломжтой. Бүх гурван файлыг нэг санд байрлуулах ёстой.

Сонголт ба таних ажиллагаа дараах байдлаар явагдана.

  1. "Хэрэглэгч" нь хүссэн аятай холбоотой тохиргоонд дүрэх унтраалгыг тохируулдаг
  2. програмын цикл бүрийн мөчлөгт одоогийн уналтын унтраалгын тохиргоог analogRead -ээр дамжуулан олж авдаг
  3. 2 -р алхам тохиргооны танигчийг боломжтой тааруулах жагсаалт дахь харьцуулагч тус бүртэй харьцуулж үздэг
  4. Хэрэв тохирох зүйл олдвол тааруулах жагсаалтад хандахын тулд playTune горимыг дуудна

    Arduino аяны функцийг ашиглан тэмдэглэл бүрийг дуут дохиогоор тоглуулдаг

  5. Хэрэв тохирох зүйл олдохгүй бол ямар ч арга хэмжээ авахгүй
  6. 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
Шувууны толгод 1 0 1 1

Пьезо дуугаралтын дууны чанар нь тийм ч сайн биш боловч үүнийг таних боломжтой. Үнэн хэрэгтээ хэрэв аяыг хэмждэг бол тэдгээр нь давтамжийн тэмдэглэлд маш ойрхон байдаг. Хөтөлбөрт ашиглагддаг нэг сонирхолтой арга бол тааруулах өгөгдлийг PROGMEM удирдамжийг ашиглан өгөгдлийн санах ойн үндсэн хэсгийн оронд флаш/програмын санах ойн хэсэгт хадгалах явдал юм. Өгөгдлийн хэсэг нь програмын боловсруулалтын хувьсагчдыг агуулдаг бөгөөд үүнээс хамаагүй бага бөгөөд ATtiny микроконтроллеруудын хувьд ойролцоогоор 512 байт байдаг.

Зөвлөмж болгож буй: