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

Алгоритмын машин: 13 алхам (зурагтай)
Алгоритмын машин: 13 алхам (зурагтай)

Видео: Алгоритмын машин: 13 алхам (зурагтай)

Видео: Алгоритмын машин: 13 алхам (зурагтай)
Видео: Картирование потока создания ценности. Бережливое производство. Управление изменениями 2024, Долдугаар сарын
Anonim
Image
Image
LED Bar: Маскийг 3D хэвлэх
LED Bar: Маскийг 3D хэвлэх

Би 15 жилийн турш коллежийн түвшинд компьютерийн шинжлэх ухааны хичээл заадаг байсан боловч миний туршлага програмчлалын тал дээр илүү байгаа ч гэсэн хайж олох, эрэмбэлэх стандарт алгоритмыг судлахад маш их цаг зарцуулдаг. Сургалтын үүднээс авч үзвэл гол асуудал бол тооцооллын нарийн төвөгтэй байдал юм: тодорхой хэмжээтэй оролт өгвөл алгоритм бүрт хичнээн их хугацаа шаардагддаг вэ? Гэхдээ олон тооны нюансууд байдаг. Жишээлбэл, алгоритмууд нь тодорхой оролтын утгуудаас хамаарч өөр өөр ажиллах хугацаатай байдаг (хэмжээнээс ялгаатай)? Ямар тохиолдолд та нэг алгоритмыг нөгөөгөөс нь сонгох вэ? Хэдийгээр бид эдгээр асуудлыг хийсвэр байдлаар хэлэлцдэг боловч өөр өөр алгоритмууд янз бүрийн нөхцөлд хэрхэн ажилладагийг харах хялбар арга байдаггүй нь намайг үргэлж зовоож байдаг.

Зорилго

Энэхүү төслийн гол зорилго бол оюутнуудад алгоритмыг дүрслэх, судлах интерактив дэлгэцийг бий болгох явдал байв. Би утгын массив (бүхэл тоо) дээр ажилладаг алгоритмуудаар өөрийгөө хязгаарласан тул массивын агуулгыг дүрслэн харуулахын тулд RGB LED зурвасыг ашиглаж болно. Массив нь 100 элементтэй бөгөөд бүхэл тоо тус бүрийг солонгын өнгийн дарааллаар өнгөөр дүрсэлсэн байдаг тул массивыг эрэмбэлэх, хэсэгчлэн эрэмбэлэх эсвэл санамсаргүй байдлаар сонгох нь шууд мэдэгддэг. Гэхдээ утгуудаас гадна би алгоритмын хяналтын талыг дүрслэн харуулах арга замыг хүсч байсан, жишээлбэл, массивын аль элементүүдийг одоогоор харьцуулж эсвэл сольж байна.

Тодорхой зорилтууд нь:

- Төрөл бүрийн хайлт, эрэмбэлэх алгоритмыг өгөх

- Массив дахь утгыг алгоритмын явцыг тодруулах байдлаар төсөөлөх

- Алгоритмын хяналтыг төсөөлөх; Ялангуяа авч үзэх элементүүд.

- Хэрэглэгчдэд санамсаргүй утга үүсгэхээс илүү оролтын өгөгдлийн загварыг сонгохыг зөвшөөрөх

- Хэрэглэгчдэд хурдыг хянах, алгоритмыг түр зогсоох боломжийг олгох

-Хэрэглэгчдэд хамгийн сайн, хамгийн муу, дундаж тохиолдлын зан үйлийг хүчээр хийхийг зөвшөөрөх (алгоритмын онцлог)

- Алгоритмыг үргэлжлүүлэх явцад алхамуудын тоог харуул

Дүрслэл

Физик дизайны үүднээс авч үзвэл энэ төслийн хамгийн сонирхолтой хэсэг бол массивыг дүрслэх явдал юм. Өгөгдөл, хяналтыг хэрхэн харуулах, дэлгэцийн төхөөрөмжийг өөрөө бүтээх талаар би тэмцсэн. Миний зорилго бол өгөгдлийн утгыг өнгөт дугуйлан, хяналтын цэгүүдийг өгөгдлийн утгыг зааж буй өнгөт сумаар харуулах явдал байв. Туршилт хийсний дараа би 100 RGB LED (WS2812) хоёр зэрэгцээ тууз бүхий өгөгдлийн LED тус бүр дээр дугуй маск, хяналтын LED тус бүр дээр гурвалжин маск бүхий загварыг шийдсэн. Би 10 хос тойрог, гурвалжин бүхий маскны 3D загварыг хийж, дараа нь эдгээр модулиудын 10 -ийг нийт 100 тойрог, 100 гурвалжин хэлбэрээр 3D хэвлэв. Миний маскын хэмжээ, зай нь метр тутамд 100 LED бүхий туузанд зориулагдсан болно. 3D загварын файлуудыг энэ тайлбарын сүүлд өгсөн болно.

Цахилгаан хэрэгсэл ба хаалт

Үлдсэн төхөөрөмж нь электроникийн үүднээс авч үзвэл маш энгийн юм. Хоёр LED туузаас гадна түр зуурын товчлуурууд, эргэдэг кодлогч (хурдыг хянах зориулалттай), 7 сегментийн дэлгэц (алхамуудыг харуулах) байдаг. Маш олон товчлуур, хяналттай тул би маш олон тээглүүрийг ил гаргадаг бөгөөд нэлээд хүчирхэг учраас ESP32 микроконтроллер ашиглахаар шийдсэн. Би утастай холбох стратегийг авч үзэх болно, гэхдээ энэ нь маш энгийн зүйл юм. Хэрэв та цөөн тооны тээглүүр ашиглахыг хүсч байвал ээлжийн бүртгэлтэй ухаалаг зүйл хийж магадгүй юм.

Та энэ төхөөрөмжийн хаалтыг янз бүрийн хэлбэрээр барьж болно. Эхэндээ би үүнийг дээд талд нь LED зурвас бүхий том тэгш өнцөгт самбар, дунд нь товчлууруудын тор гэж төсөөлж байсан. Миний дуусгасан хэлбэр нь 1960-аад оны сансрын үеийн технологийн талаархи үзэл бодлоос үүдэлтэй юм. Та мөн LED туузыг босоо чиглэлд барьж болно. Эсвэл LED хэсгийг илүү том болгож, бүхэл бүтэн ханыг дүүргэж, тусдаа хяналтын самбараар хий.

Програм хангамж

Энэ төхөөрөмжийн кодыг GitHub дээр чөлөөтэй авах боломжтой бөгөөд энэ нь хэрхэн ажилладаг, хэрхэн тохируулах талаар баримтжуулахын тулд би чадах бүхнээ хийсэн. Танд хэрэгтэй цорын ганц гадаад номын сан бол WS2812 туузыг жолоодох FastLED юм.

Хангамж

Электроник

1 ESP32 хөгжүүлэх самбар (жишээ нь, 2 WS2812 эсвэл ижил төстэй LED тууз, нягтрал нэг метр тутамд 100 LED (жишээ нь, 1 "эхлүүлэх" гурвалжин товч (жишээ нь, Түр зуурын 12 товчлуур (жишээ нь https://amzn.com/B01N4D4750) - хэрэв хүсвэл өөр өөр хэлбэртэй болно.

1 багц (20) урьдчилан товчлууртай холбогч (жишээ нь, 1 багц JST холбогч (жишээ нь, 1 Ротари кодлогч (жишээ нь, Эргэдэг кодлогчын 1 бариул (жишээ нь, 1 Dupont холбогчийг багцлах (жишээ нь, https://amzn.com/B014YTPFT8) - хавчих хэрэгслийг авах нь зүйтэй.

1 баррель үүр (тэжээлийн хувьд) (жишээ нь, 1 TM1637 7 сегментийн тоон дэлгэц (жишээ нь, Гагнах ба утас холбох хэрэгсэл

3D загварын файлууд

Та Thingiverse дээрээс 10 гэрэлтэй модулийн 3D загварыг олох боломжтой.

www.thingiverse.com/thing:4178181

Та энэ загварыг нийтдээ 10 модулийг 5 удаа хэвлэх шаардлагатай болно.

Програм хангамж

github.com/samguyer/AlgorithmMachine

Хашаа

Мод, plexiglass, зэвэрдэггүй ган боолт, эрэг

Тархалтын материал. Миний дуртай зүйл бол Lee Filters #216 бүрэн цагаан тархалт боловч бусад сонголтууд байдаг. Энгийн цагаан цаас ч гэсэн сайн ажил хийдэг.

Алхам 1: Алгоритм 101

Олон хүмүүс компьютерийн шинжлэх ухаан нь үндсэндээ програмчлалыг судалдаг гэж боддог. Гэхдээ энэ талбайн жинхэнэ зүрх сэтгэл бол алгоритм юм: асуудлыг шийдвэрлэх системчилсэн журам, түүний өртөг (ихэвчлэн хэр удаан үргэлжлэхийг судлах) юм. Алан Тьюринг, Алонзо Сүм, Эдсгер Дейкстра зэрэг салбарын гол хүмүүс эдгээр санаануудыг компьютерууд байхаас өмнө бодож байсан.

Тодорхой асуудлыг шийдвэрлэх алгоритмын гол шинж чанар нь нарийвчилсан бөгөөд нарийвчлалтай байдаг тул хэн нэгэн үүнийг хэрхэн яаж ажилладагийг огт ойлголгүйгээр шийдлийг олж авах боломжтой болгодог. Зүгээр л механик алхмуудыг дагана уу, та зөв хариултыг авах болно. Энэ нь компьютерийн програмчлалын ажилд хэрхэн тусалж байгааг харж болно, учир нь тэдэнд ийм нарийн мэдээлэл хэрэгтэй байна. Компьютер дутагдаж буй мэдээллийг бөглөх, дүгнэлт хийх боломжгүй байдаг.

Хэр удах вэ?

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

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

Жишээлбэл, N утасны дугаарын жагсаалтыг үзэхэд N алхам шаардлагатай болно. Жагсаалтыг хоёр удаа үзэхэд 2N алхам шаардлагатай. Эдгээрийг хоёуланг нь шугаман цагийн алгоритм гэж нэрлэдэг бөгөөд нийт алхамуудын тоо нь оролтын хэмжээнээс хэд дахин их байдаг. Бусад алгоритмууд нь квадрат (N квадрат цаг) эсвэл куб (N куб) эсвэл логарифм (лог N) эсвэл тэдгээрийн зарим хослол юм. Тооцооллын хамгийн хэцүү асуудлуудын зарим нь экспоненциал хугацааны алгоритм шаарддаг (2^N).

За яах вэ?

Өгөгдлийн элементүүдийн тоо N бага байх нь тийм ч чухал биш юм. Жишээлбэл, N = 10 -ийн хувьд 10N нь N квадрат гэсэн нэр юм. Гэхдээ N = 1000 яах вэ? эсвэл N = 1000000 уу? Сая квадрат бол маш том тоо. Маш хурдан компьютер дээр ч гэсэн оролт хангалттай том байвал квадрат алгоритм нь удаан хугацаа шаардагдана. Экспоненциал алгоритм нь илүү төвөгтэй байдаг: N = 50 хувьд экспоненциал алгоритм нь алхам бүр нь нэг наносекунд (секундын 1 тэрбумны нэг) байдаг компьютер дээр ч гэсэн дуусахад хоёр долоо хоног шаардагдана. Өө!

Хэмжээний нөгөө төгсгөлд бид логарифмын цагийн алгоритмтай бөгөөд маш хурдан ажилладаг. Бүртгэлийн цаг нь экспоненциал хугацааны эсрэг байна: оролтын хэмжээг N өгөгдсөн бол алхмын тоо нь 2^T = N томъёоны экспонент T болно. алхмууд, 2^30 = 1, 000, 000, 000 оноос хойш. Энэ ямар хөөрхөн юм бэ?! ??!

Сая сая эсвэл тэрбум оролтын хэмжээ хэнд хамаатай вэ гэж та гайхаж байж магадгүй юм. Бодоод үз дээ: Фэйсбүүк дээр хичнээн олон хэрэглэгч байдаг вэ? Google хэдэн веб хуудсыг индексжүүлдэг вэ? Хүний геномд хэдэн үндсэн хос байдаг вэ? Цаг агаарын симуляцид хэдэн хэмжилт хийдэг вэ?

Алхам 2: Алгоритмууд

Алгоритмын машин одоогоор дараах алгоритмыг хэрэгжүүлж байна. Тэдгээрийн хоёр нь хайлтын алгоритм (жагсаалтаас тодорхой утгыг олох), бусад нь эрэмбэлэх алгоритм (утгыг дарааллаар нь байрлуулах) юм.

Шугаман хайлт

Үнэт зүйлсийн жагсаалтыг эхнээс нь нэг нэгээр нь хай. Шугаман цаг шаардлагатай.

Хоёртын хайлт

Жагсаалтыг хоёр дахин хувааж хайлт хий. Бүртгэлийн цаг шаардлагатай боловч ажиллахын тулд жагсаалтыг эрэмбэлсэн байх ёстой.

Бөмбөлөг ангилах

Жагсаалтыг дарааллаар нь сольж хөрш зэргэлдээ элементүүдийг эрэмбэлэх. Квадрат цаг шаардагдана.

Оруулах төрөл

Элемент бүрийг аль хэдийн эрэмбэлсэн утгуудын жагсаалтад зохих байрлалд байрлуулснаар жагсаалтыг эрэмбэлэх. Квадрат цаг шаардагдана.

Quicksort

Жагсаалтыг хоёр дахин хувааж, медианаас доогуур бүх утгыг эхний хагаст, медианаас их бүх утгыг хоёрдугаар хагаст шилжүүлснээр жагсаалтыг эрэмбэл. Практик дээр бид медианыг үр дүнтэй олж чадахгүй байгаа тул утгыг санамсаргүй байдлаар сонгож авдаг. Үүний үр дүнд энэ алгоритм нь хамгийн муу тохиолдолд квадрат хэлбэртэй байж болох боловч ихэвчлэн N * logN цаг шаарддаг.

Эрэмбэлэх

Жагсаалтыг хоёр хэсэгт хувааж, хоёр талыг нь тусад нь эрэмбэлж (нэгтгэх эрэмбийг ашиглан), дараа нь утгуудыг хооронд нь холбож нэгтгэн нэгтгэнэ. Үргэлж N * logN цаг шаарддаг.

Нуруулдан ангилах

Бүртгэлийн хугацаанд хамгийн бага утгыг олох боломжийг олгодог овоолго хэмээх өгөгдлийн бүтцийг байгуулснаар жагсаалтыг эрэмбэлэх. Үргэлж N * logN цаг шаарддаг.

Битоник төрөл

Эрэмбэлэх ба хурдан сортыг нэгтгэхтэй адил жагсаалтыг хоёр хувааж, талыг нь ангилж, дахин нэгтгэнэ. Энэ алгоритмд N * logN * logN хугацаа шаардагдах боловч зэрэгцүүлэхэд хялбар байдаг давуу талтай.

Алхам 3: LED бар: Маскийг 3D хэвлэх

LED баар: Маскийг 3D хэвлэх
LED баар: Маскийг 3D хэвлэх
LED баар: Маскийг 3D хэвлэх
LED баар: Маскийг 3D хэвлэх

LED барыг бүтээх эхний алхам бол гэрлийг хэлбэр дүрсийг нь өгөх маскыг 3D хэвлэх явдал юм. Модуль бүр массивын 10 элемент, 10 утга (тойрог), 10 индикатор (гурвалжин) -ийг хамардаг тул танд нийт 10 модуль хэрэгтэй болно. Энд миний өгч буй STL файл нь модулийн хоёр тохиолдлыг агуулдаг тул та таван хэвлэх цикл хийх шаардлагатай болно. Надад хамгийн сайн 3D принтер байхгүй тул файл, зүлгүүр ашиглан гараар цэвэрлэх шаардлагатай болсон. Хамгийн гол нь дугуй ба гурвалжин нүх нь цэвэрхэн байх ёстой.

Зураг дээр та миний туршилтын тохиргоог харах болно: Би хоёр LED туузыг наагаад микроконтроллер бүхий талхны тавцан дээр холбосон. Энэ алхам шаардлагагүй, гэхдээ би хашлага угсрахаасаа өмнө хэрхэн харагдахыг харахыг хүссэн юм. Би маскны модулийг хоёр LED туузан дээр байрлуулж, санамсаргүй өнгө бүхий энгийн ноорог хийв. Диффузийн материалын туузаар хэлбэр, өнгө үнэхээр гарч ирдэг.

Алхам 4: LED баарны өөр хувилбарууд

LED баарны өөр хувилбарууд
LED баарны өөр хувилбарууд
LED баарны өөр хувилбарууд
LED баарны өөр хувилбарууд
LED баарны өөр хувилбарууд
LED баарны өөр хувилбарууд

Би энэ төслийг анх эхлүүлэхдээ LED маск хийх бусад аргыг туршиж үзсэн. Хэрэв танд 3D принтер байхгүй бол та эдгээр сонголтуудын аль нэгийг авч үзэх боломжтой. Би шударгаар хэлье: эдгээр хэсгүүдийг хийх нь маш том зовлон юм.

Тойргийн хувьд би бараг 1см диаметртэй 13/32 хэмжээтэй гуулин хоолой худалдаж авсан. Би үүнийг 1 см хэмжээтэй сегмент болгон хувааж, дараа нь шүршиж цагаан будгаар будсан.

Гурвалжингийн хувьд би нэг удаагийн жигнэх савнаас зүсэгдсэн хүнд жинтэй хөнгөн цагаан тугалган цаасыг ашигласан. Би модоор гурвалжин хэлбэр хийж, дараа нь богино тугалган цаасыг хэлбэрт ороож, наажээ. Дахин хэлэхэд танд эдгээр хэдэн зуун зүйл хэрэгтэй болно, тиймээс хэсэг хугацаа, тэвчээр шаардагдана.

Алхам 5: LED баарны хаалт

LED баарны хаалт
LED баарны хаалт
LED баарны хаалт
LED баарны хаалт
LED баарны хаалт
LED баарны хаалт

Миний хашлага нь маш энгийн: хажуу талдаа хоёр ширхэг модон тууз, дээд ба доод хэсэгт хоёр тууз бүхий plexiglass. Бүх эд анги нь ойролцоогоор 102 см урттай (LED -ийн хувьд 1 метр, утас холбоход бага зэрэг нэмэлт). LED туузыг байрлуулахын тулд талууд нь 1 см -ээс бага зэрэг өндөр байх ёстой. Тууз хайчилсны дараа би plexiglass -ийн өргөнийг хэмжихийн тулд 3D хэвлэсэн маск хэсгүүдийг хооронд нь хавчуулав. Баарны өргөн ба уртыг хоёр ширхэг plexiglass хайчилж ав. Эцэст нь маск дээр тааруулахын тулд сарниулах материалын тууз хайчилж ав.

Тархалтын хувьд надад Lee Filters #216 (бүтэн цагаан тархалт) үнэхээр таалагддаг. Энэ бол маш их гэрэл алдалгүйгээр тархалтыг өгдөг нимгэн хуванцар хуудас юм. Гэхдээ энэ нь үнэтэй зүйл юм. Заримдаа та онлайнаар борлуулах жижиг хуудас олж болно, гэхдээ бүхэлд нь өнхрөх нь танд ойролцоогоор 125 доллар буцааж өгөх болно. Бусад сонголтууд бол цагаан цаас эсвэл бусад төрлийн торго эсвэл царцсан хуванцар юм. Хамгийн түгээмэл сонголт бол нимгэн хуванцар хайчлах дэвсгэр юм.

LED баарыг угсрахаасаа өмнө LED туузан дээр гагнасан тохирох холбогч байгаа эсэхийг шалгаарай. Маш олон туузыг урьдчилан гагнасан хар тугалга дагалддаг тул та үүнийг зүгээр л ашиглаж болно.

Би угсралтын ажлыг plexiglass -ийн дээд хэсгийг модон тал руу шургуулж эхлэв (зургийг үз). Дараа нь би түүнийг эргүүлж, тархалтын туузыг байрлуулсны дараа 10 ширхэг маск оруулав. Нэгэнт би зайнд баяртай байсан тул тэдгээрийг хэдэн цэг халуун цавуугаар бэхлэв.

Дараа нь хоёр LED туузыг маскны дээд талд зэрэгцүүлэн тавь. LED -ууд доошоо харсан байх ёстой бөгөөд LED бүр маскны харгалзах нүхтэй эгнээнд байгаа эсэхийг шалгаарай. LED туузыг байрлуулахын тулд бага зэрэг халуун цавуу эсвэл соронзон хальс нэмнэ үү. Эцэст нь plexiglass -ийн арын хэсгийг шургуул.

Туршилтын загварыг ажиллуулна уу. Сайхан ажил! Та хамгийн хэцүү хэсгийг хийсэн!

Алхам 6: Хяналтын самбар

Хяналтын самбар
Хяналтын самбар
Хяналтын самбар
Хяналтын самбар
Хяналтын самбар
Хяналтын самбар
Хяналтын самбар
Хяналтын самбар

Хяналтын самбар нь хамгийн бүтээлч эрх чөлөөг өгдөг хэсэг юм. Энэ нь бүх удирдлага, цахилгаан хэрэгслийг LED баарны хамт барихад л хангалттай. Хамгийн энгийн загвар бол тэгш өнцөгт самбар юм: товчлуур ба удирдлагын цооног өрөмдөж, LED баарыг хавсаргана. Би мод, плексигласс болон бусад материалыг хослуулан steampunk / retro орчин үеийн дүр төрхийг өгөх дуртай. Энэ тохиолдолд би үндсэн алгоритмын сонголтын товчлууруудыг барихын тулд хүнд даацын plexiglass-ийг хайчилж, үлдсэн электроникуудыг барих модон баарыг хайчилж авлаа. Би аркад товчлууруудын хэмжээтэй таарч нүх өрөмдсөн. Утаснууд нь ар талд харагдаж байна, гэхдээ надад таалагдаж байна!

Би бас 7 сегментийн дэлгэц, эргэлтэт кодлогч, арын зарим утаснуудын зайг өрөмдсөн. Би LED бариулыг барихын тулд дээд хэсгийг нь огтолсон.

Алхам 7: Товчны бэхэлгээ

Товчны бэхэлгээ
Товчны бэхэлгээ
Товчны бэхэлгээ
Товчны бэхэлгээ
Товчны бэхэлгээ
Товчны бэхэлгээ

Олон товчлуурыг холбох нь жинхэнэ өвдөлт байж магадгүй юм. Аз болоход, аркад машин хийдэг хүмүүс таны ашиглаж болох зарим стандарт холбогчийг гаргаж ирсэн. Товчлуурын холбогч кабель бүр нь хоёр утастай бөгөөд нэг нь VCC, нөгөө нь газардуулгатай байдаг. Нэг үзүүр нь товчлуурын арын хэсэгт холбосон хүрд холбогчтой бөгөөд "ердийн нээлттэй" утсыг газардуулж, "нийтлэг" тугалган дээр VCC холбоно. Энэхүү тохиргоонд хэрэглэгч товчлуурыг дарахад хэлхээ дуусч, микроконтроллер харгалзах оролтын зүү дээр HIGH гэж уншина.

Кабелийн нөгөө үзүүр нь JST холбогчтой (цагаан зүйл). Эдгээр холбогчдын хамгийн гоё зүйл бол тэд зөвхөн нэг л байдлаар саванд ордог тул санамсаргүйгээр VCC болон газардуулгыг буцаах арга байхгүй.

Миний хийсэн зүйл бол эдгээр холбогчдод зориулж бага зэрэг бэхэлгээ хийх явдал юм. Би хэд хэдэн JST савыг протобоард дээр гагнаж, дараа нь утсыг микроконтроллерт залгах Dupont холбогч руу буцааж хийнэ. Улаан утас нь VCC шугам бөгөөд энэ нь бүх JST саванд холбогддог. Цэнхэр утаснууд нь товчлуур бүрт тусдаа байдаг.

Алхам 8: Ротари кодлогч

Ротари кодлогч
Ротари кодлогч

Ротари кодлогч нь хэрэглэгчид алгоритмын хурдыг хянах боломжийг олгодог. Би хоёр өгөгдлийн шугам (шар утас) татах эсэргүүцэл бүхий таслагч самбар хэлбэрээр ирдэг модулийг ашигладаг. Энэ нь бас товчлуур байх болно, гэхдээ би энэ боломжийг ашиглахгүй байна. Нөгөө хоёр утас нь VCC ба газардуулга юм. Надад бас сайхан өөхний товчлуур байна.

Потенциометрээс ялгаатай нь эргэлддэг кодлогчийн надад таалагддаг зүйл бол энэ нь микроконтроллер руу эргэлтийг (цагийн зүүний эсрэг, цагийн зүүний эсрэг) дохио өгдөг тул утгыг хэрхэн тайлбарлахыг өөрчлөхөд хялбар байдаг. Жишээлбэл, хэрэглэгч үүнийг хурдан эргүүлж байх үед үүнийг хурдасгах (хулгана шиг) мэдрэмжийг өгч болно.

Алхам 9: 7 сегмент бүхий дэлгэц

7 сегментийн дэлгэц
7 сегментийн дэлгэц

Энд нэг их хэлэх зүйл алга. Эдгээр зүйлс хаа сайгүй байдаг. LED нь TM1637 нэртэй чипээр хянагддаг бөгөөд энэ нь микроконтроллертой энгийн цуваа протоколоор холбогддог. Би одоо байгаа номын санг ашигладаг бөгөөд энэ нь надад ямар дугаар харуулахыг хүсч байгаагаа хэлэх боломжийг олгодог бөгөөд үлдсэн хэсгийг нь өгдөг.

Ар талд нь дөрвөн зүү байдаг: VCC, газардуулга, цуваа протоколын хоёр утас. Би микроконтроллерт холбогдсон харгалзах Dupont холбогчтой холбогддог 4 зүү толгой хэсгийг гагнав.

Алхам 10: Үндсэн хянагчийн самбар

Үндсэн хянагчийн самбар
Үндсэн хянагчийн самбар
Үндсэн хяналтын самбар
Үндсэн хяналтын самбар
Үндсэн хянагчийн самбар
Үндсэн хянагчийн самбар

Үндсэн хянагчийн самбар нь микроконтроллер өөрөө болон удирдлагын бүх холбогчийг (товчлуур, дэлгэц, LED) байрлуулдаг. Микроконтроллер нь ESP32 бөгөөд тооцоолох чадвар, санах ойг ихээр хангаж, олон тооны тээглүүдийг ил гаргадаг. Утасны холболт нь нэлээд стандарт боловч би хэд хэдэн сонирхолтой хэсгүүдийг тодруулах болно.

ТАЙЛБАР: Та үндсэн самбарыг холбож эхлэхээсээ өмнө кодыг (https://github.com/samguyer/AlgorithmMachine) үзэхийг хүсч магадгүй бөгөөд ингэснээр таны зүү тохиргоо минийхтэй тохирч магадгүй юм.

Би баррель үүрийг самбар дээр гагнаж, хоёр ширхэг зэс утсыг самбарын цахилгаан болон газардуулгатай холбосон. Үүний шалтгаан нь гэрэлтүүлгийг өндөр түвшинд тохируулсан тохиолдолд LED зурвас нь маш их хүч авах боломжтой бөгөөд би энэ бүх хүчийг микроконтроллер дээрх USB холбогчоор татахыг хүсэхгүй байна.

Товчлуурын утсыг хялбарчлахын тулд би эрэгтэй, эмэгтэй зөв өнцгөөр толгойн туузыг микроконтроллерийн бүх талаас доош нь гагнав. Товчлуурын бэхэлгээний Dupont холбогч нь энэ толгой руу шууд холбогддог.

ЧУХАЛ: товчлууруудын хүч (улаан утас) нь микроконтроллер дээрх 3.3V цахилгаан шугамд холбогдсон байх ёстой. ESP32 нь 3.3V чип тул өгөгдлийн тээглүүрт зөвхөн 3.3V эх үүсвэрийг хавсаргасан байх ёстой.

Микроконтроллер нь 5V USB зүү болон газардуулгаар төмөр зам руу (самбарын доод талд) цахилгаан татаж (эсвэл хүчийг нь түлхдэг). Бусад бүх улаан/хар утаснууд нь VCC ба газардуулга юм.

Хоёр цэнхэр утас нь LED туузны өгөгдлийн шугам юм (WS2812s). Шар/ногоон хос нь эргэлдэх кодлогчын өгөгдлийн шугам бөгөөд шар хос нь 7 сегментийн дэлгэцтэй цуваа холболт юм.

Алхам 11: Чуулган

Чуулган
Чуулган
Чуулган
Чуулган
Чуулган
Чуулган
Чуулган
Чуулган

Энэхүү цуврал гэрэл зургууд нь эцсийн угсралт, утсыг харуулав. Би мөн үндсэн хянагчийн самбарыг дээд талд нь ар талд нь хавсаргасан.

Цахилгаан асаахаасаа өмнө гэнэтийн зүйлээс зайлсхийхийн тулд хэд хэдэн шалгалт хийсэн. Ялангуяа, надад хүчдэл/газардуулгын холбогч байхгүй, мөн богино холболт байхгүй байгаа эсэхийг шалгах. Тасралтгүй байдлыг шалгахын тулд мультиметрээ тохируулаарай - хоёр дамжуулагчийн хооронд цахилгаан зам байгаа үед дуугарах болно. VCC -ийн нийтлэг шугамын нэг утсыг товчлууруудад холбоно уу. Дараа нь нөгөө утсыг бэхэлгээний зүү бүрт нэг нэгээр нь холбоно. Мультиметр нь зөвхөн товчлуурыг дарахад л дуугарах ёстой. Хэрэв та өөр дохио авбал энэ нь урвуу эсвэл богино гэсэн үг юм. Эрчим хүчээ асаахаасаа өмнө үүнийг хянаж, засаарай!

Алхам 12: Код

Нэгдүгээрт, Arduino IDE -ээ нээгээд FastLED номын сан суулгасан эсэхээ шалгаарай.

Алгоритмын машины кодыг GitHub дээрээс татаж авна уу.

github.com/samguyer/AlgorithmMachine.git

Та үүнийг Arduino хавтсанд шууд хуулбарлах эсвэл гараар хуулж болно.

Үүнийг байршуулахаасаа өмнө зүү тохиргоо нь таны тоног төхөөрөмжийн тохиргоонд нийцэж байгаа эсэхийг шалгаарай. Би бүх зүү тохиргоог файлын дээд хэсэгт байрлуулсан.

Байршуулж, таашаал аваарай!

Алхам 13: Хэрхэн ашиглах

Алгоритмын машиныг ашиглахад хялбар бөгөөд бараг бүх товчлуурын хослол нь зүгээр юм!

Нэгдүгээрт, өгөгдлийн товчлууруудыг ашиглан массив дахь утгыг эхлүүлнэ үү. (1) санамсаргүй байдлаар, (2) нэг санамсаргүй утга нэмэх, (3) массивыг буцаах гэсэн гурван сонголт байна. Утга нь тогтмол байдаг тул та эхлээд тэдгээрийг эрэмбэлэх, дараа нь чимээ шуугиан нэмэх, дараа нь өөр эрэмбэлэх эсвэл хайх алгоритмыг ажиллуулах боломжтой болно.

Бусад товчлуурын сонголтуудаас хайх эсвэл эрэмбэлэх алгоритмыг сонгоно уу. Одоогийн байдлаар та энэ сонголтыг хийх үед ямар ч санал хүсэлт байхгүй байна (ирээдүйн ажилд хэрэгтэй зүйл). Дараа нь "тоглох" товчийг дарна уу.

Товчлуур нь хурдыг хянадаг. Алгоритмыг түр зогсоох, түр зогсоохын тулд та "тоглох" дээр дарж болно.

Үүнийг хийсний дараа автоматаар зогсох болно. Та хүссэн үедээ өөр алгоритмын товчлуурыг дарж болно. Машин нь одоогийн алгоритмыг зогсоож, шинэ алгоритмыг эхлүүлэх боловч өгөгдлийг өмнөх алгоритмын дагуу үлдээсэн хэвээр хадгална.

STEM тэмцээн
STEM тэмцээн
STEM тэмцээн
STEM тэмцээн

STEM тэмцээний том шагнал

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