Мазмуну:

Колибри детектору/Сүрөт тартуучу: 12 кадам (Сүрөттөр менен)
Колибри детектору/Сүрөт тартуучу: 12 кадам (Сүрөттөр менен)

Video: Колибри детектору/Сүрөт тартуучу: 12 кадам (Сүрөттөр менен)

Video: Колибри детектору/Сүрөт тартуучу: 12 кадам (Сүрөттөр менен)
Video: Эффект колибри / Hummingbird (2012) / Джейсон Стэйтем в остросюжетном криминальном экшне 2024, Июль
Anonim
Колибри детектору/Сүрөт тартуучу
Колибри детектору/Сүрөт тартуучу

Биздин арткы палубада колибри бар, ал эми акыркы эки жылдан бери мен аларды сүрөткө тартып келем. Колибри - укмуштай кичинекей жандыктар, абдан аймактык жана алардын кармаштары шайыр жана укмуштуудай болушу мүмкүн. Бирок мен аларды сүрөткө тартуу үчүн үйүмдүн арт жагындагы айкелдей болуп туруп чарчадым. Мага үйдүн артында көпкө күтпөй туруп сүрөткө тартуунун жолу керек болчу. Мен алыстан башкарылуучу жапкычты колдонушум мүмкүн экенин билем, бирок мен жок жерде сүрөттөрдүн автоматтык түрдө тартылышын каалачумун. Ошондуктан колибрлерди аныктоочу жана автоматтык түрдө сүрөткө тартуучу аппаратты жасоону чечтим.

Мен бул үчүн дайыма микроконтроллерди колдонууну ойлогом. Микроконтроллер камеранын жапкычын программалык камсыздоонун астында башкара алат. Бирок сенсор кичинекей колибри аныктоо үчүн башка нерсе болчу. Мен кыймыл сенсорун колдонсо болмок, бирок уникалдуу нерсени сынап көргүм келди. Мен үндү триггер катары колдонууну чечтим.

1 -кадам: Микроконтроллерди тандоо

Микроконтроллерди тандоо
Микроконтроллерди тандоо

Мен тандаган микроконтроллер PJRC Teensy болчу. Teensy ARM микроконтроллерин, тактап айтканда ARM Cortex M4 колдонот. Cortex M4 табууну камсыздай турган FFT (Fast Fourier Transform) аткаруучу жабдыктарды камтыйт. PJRC ошондой эле өспүрүмдөргө музыканы ойнотууга, ошондой эле тышкы киргизүү менен аудиону жаздырууга же тактага кошо турган кичинекей микрофонго мүмкүнчүлүк берген аудио тактаны сатат. Менин планым Teensy'ге микрофондогу аудиодо FFT жасатуу болчу.

2 -кадам: FFT?

FFT?
FFT?

FFT - бул убакыттын доменинен сигналды жыштык доменине которуучу математикалык формула/алгоритм. Бул эмнени билдирет, ал микрофондон алынган үлгүдөгү аудиону алат жана аны баштапкы толкунда болгон жыштыктардын чоңдугуна айлантат. Көрдүңүзбү, кандайдыр бир ээнбаш, үзгүлтүксүз толкун кандайдыр бир базалык жыштыктын бүтүн эсеби болгон синус же косинус толкундарынын сериясынан түзүлүшү мүмкүн. FFT тескерисинче кылат: ал ээнбаш толкунду алат жана аны жалпылаштырганда баштапкы ээнбаш толкунду жаратуучу толкундардын чоңдугуна айландырат. Муну айтуунун дагы жөнөкөй жолу, мен канаттуулардын пайда болгон жыштыкта колибри канатынын кагылышын "угуп жатканын" аныктоо үчүн Teensyдеги программалык камсыздоону жана FFT жабдууларын колдонууну пландадым. Эгер колибри "укпаса", мен камерага сүрөт тартууга буйрук жөнөтөм.

Ал иштеген! Ошентип, мен муну кантип кылдым, сен муну кантип жасай аласың жана андан да жакшырта аласың?

3 -кадам: Калкып бараткан колибри кандай угулат?

Hovering Hummingbird кандай угулат?
Hovering Hummingbird кандай угулат?

Биринчиден, мен колибри канатынын канаттарын кандай жыштыкта угушум керек экенин түшүнүшүм керек болчу. Муну аныктоо үчүн мен iPhone'умду колдондум. Мен iPhoneду штативге туташтырдым жана палубабыздагы колибри фидеринин алдында жай кыймыл видеосун жаздырдым. Бир аз убакыттан кийин мен камераны алып салдым жана видеону жүктөп алдым. Мен андан кийин фидердин алдында колибри издеп видеону көрдүм. Мен жакшы ырааттуулукту тапканымда, колибри канаттарын бир позициядан кайра ошол позицияга кайтаруу үчүн керектүү жеке кадрлардын санын санадым. IPhone'догу жай кыймыл секундасына 240 кадрды түзөт. Мен фидердин алдында сүзүп жүргөн колибрди байкадым жана анын канаттарын алдыга карай арткы абалга жылдырып, анан алдыга карай кайтуу үчүн 5 кадрды санадым. Бул 240 кадрдын 5 кадры. Эсиңизде болсун, биз канаттуулардын канаттарынын ар бир соккусунда бир үндү угабыз (бири алдыга, экинчиси арткы соккуга). Цикл же мезгил үчүн 5 кадр үчүн биз жыштыкту мезгилге бөлүү менен эсептей алабыз, башкача айтканда 1 / (5/240) же 48 Гц. Демек, бул колибри учуп баратканда, биз уккан үн эки эсе же 96 Гцке жакын болушу керек. Балким, алар учуп бара жатышканда жыштык жогору болот. Буга алардын массасы да таасир этиши мүмкүн, бирок мен ойлойм, биз бир эле түрдөгү канаттуулардын көпчүлүгүнүн массасы бирдей деп болжолдой алабыз.

4 -кадам: Фурье сериясы жана өспүрүмдөр

Фурье сериясы жана өспүрүм
Фурье сериясы жана өспүрүм

Teensy (I Teensy 3.2 колдонгон) PJRC тарабынан даярдалган (www.pjrc.com). FFT үн үлгүсү боюнча эсептелет. Үн алуу үчүн, PJRC Teensy үчүн аудио адаптер тактасын сатат (TEENSY3_AUDIO - $ 14.25). Алар ошондой эле аудио адаптер тактасына ширетиле турган кичинекей микрофонду сатышат (МИКРОФОН - $ 1.25). Аудио адаптер тактасында Teensy сериялык автобус (I2S) аркылуу сүйлөшө турган чип (SGTL5000) колдонулат. Teensy SGTL5000ди микрофондогу аудионун үлгүсүн алуу жана аны санариптештирүү үчүн колдонот, башкача айтканда, микрофон угуп жаткан үндү чагылдырган сандар топтомун түзөт.

FFT - бул дискреттүү Фурье трансформациясы (DFT) деп аталган нерсенин тез версиясы. DFT каалаган сандагы үлгүлөр боюнча жүргүзүлүшү мүмкүн, бирок FFT үлгүлөрдү экилик эселенген топтомдордо сакташы керек. Teensy жабдуулары FFTти 1024 үлгүлөр топтомунда аткара алат (1024 = 2^10), ошондуктан биз муну колдонобуз.

Адатта, FFT ар кандай толкундар ортосундагы чоңдуктарды жана фазалык мамилелерди өндүрүш катары чыгарат. Бул колдонмо үчүн биз фазалык мамилелерге кызыкпайбыз, бирок биз чоңдуктарга жана алардын жыштыгына кызыкдарбыз.

Teensy аудио тактасы 44, 100 Гц жыштыкта аудионун үлгүлөрүн алат. Ошентип, бул жыштыкта 1024 үлгү 1024/44100 же болжол менен 23.2 миллисекунд убакыт аралыгын билдирет. Бул учурда, FFT 43 Гц үлгүдөгү мезгилдин бүтүн эселенген чоңдуктарын чыгаруу катары чыгарат (дагы 1/0.0232 43 Гцке барабар). Биз бул жыштыктан эки эсе чоң болгон чоңдуктарды издегибиз келет: 86 Гц. Бул биздин эсептелген колибри канаттарынын жыштыгы эмес, бирок биз көрө тургандай эле жакын.

5 -кадам: Фурье маалыматтарын колдонуу

Фурье маалыматтарын колдонуу
Фурье маалыматтарын колдонуу

Китепканалар PJRC Teensy үлгүлөрдү иштетет жана чоңдуктун маанилеринин массивин кайтарып берет. Биз кайтарылган массивдеги ар бир чоңдукту бин катары карайбыз. Биринчи бин (биз кайтарып алган маалыматтардын массивинде нөлгө барабар) толкундун DC ордун ээлейт. Биз бул баалуулукту этибарга албай кое алабыз. Экинчи контейнер (1 -орунга) 43 Гц компонентинин чоңдугун билдирет. Бул биздин базалык мезгил. Кийинки кутуча (2 -офсет боюнча) 86 Гц компонентинин чоңдугун билдирет ж.б. Ар бир кийинки кутуча базалык мезгилдин бүтүн санына (43 Гц) кирет.

Эми бул жерде бир аз кызыктай болуп калды. Эгерде биз 43 Гц кемчиликсиз бир үндү талдоо үчүн FFT колдонгон болсок, анда FFT биринчи урнаны кандайдыр бир чоңдукта кайтарат жана калган урналар нөлгө барабар болмок (дагы, кемчиликсиз бир дүйнөдө). Эгерде биз тартып алган жана талдаган үн 86 Гц болсо, анда офсеттеги урна нөлгө барабар, ал эми офс 2деги урна (экинчи гармоник) кандайдыр бир чоңдукта болмок, ал эми бинкалардын калган бөлүгү нөлгө барабар болмок ж.б. Бирок, эгерде биз колибрдин үнүн тартып алсак, анда ал 96 Гц (мен бир канаттуум боюнча өлчөгөм), анда 2 бин @ 86 Гц баллдын мааниси бир аз төмөн болмокчу (кемчиликсиз 86 Гц толкунуна караганда) жана анын айланасындагы урналар (бирөө төмөн жана бир нече жогору) ар бири нөлгө барабар эмес мааниге ээ болмок.

Эгерде биздин ФФТнын үлгүсүнүн өлчөмү 1024төн чоң болсо же аудио тандоо ылдамдыгы төмөн болсо, биз урналарыбыздын чечимин жакшырта алабыз (б.а. кичирээк). Бирок биз бул нерселерди FFT контейнерлерибизди 1 Гц базалык мезгилге көбөйтүү үчүн өзгөрткөн болсок дагы, бул таштанды челеги менен күрөшүүгө туура келет. Мунун себеби, биз эч качан, дайыма жана так, бир урнага түшүүчү канат жыштыгына ээ болмок эмеспиз. Бул биз колибрди аныктообузду 2 урнанын наркына негиздеп, калганын этибарга албайбыз дегенди билдирет. Муну түшүнүү үчүн, биз бир нече урналарга маалыматтарды талдоонун жолуна муктажбыз. Бул тууралуу кийинчерээк.

6 -кадам: Курулушту баштаңыз

Курулушту баштоо
Курулушту баштоо
Курулушту баштоо
Курулушту баштоо

Колибри детекторунун прототипи үчүн мен өспүрүмдөрдүн казыктарына туташкан кошумча узун эркек-эркек казыктарды колдондум. Мен муну Teensy'ди кичинекей ширеси жок нан табакка туташтыруу үчүн кылдым. Мен муну жасадым, анткени мен прототипке жана нан тактасына көп өзгөртүүлөрдү киргизем деп ойлогом, мен муну өзгөртө алчумун жана жөн эле секирүүчү зымдарды каалаган жериме. Мен аял тилкелерин аудио тактанын ылдый жагына кыстарып койгом, ал аны өспүрүмдүн үстүнө сайып коюуга мүмкүндүк берет. Микрофон аудио тактанын үстү жагына ширетилген (сүрөттөрдү караңыз). Чогуу жөнүндө көбүрөөк маалыматты PJRC сайтынан тапса болот:

(https://www.pjrc.com/store/teensy3_audio.html).

7 -кадам: Сүрөткө жабдуу

Сүрөт тартуу үчүн жабдыктар
Сүрөт тартуу үчүн жабдыктар
Сүрөт тартуу үчүн жабдыктар
Сүрөт тартуу үчүн жабдыктар

Менде (менин аялымда бар) Canon Rebel санарип камерасы бар. Камерада дистанция бар, ал кол менен алыстан жапкычты башкарууну туташтырат. Мен B&H Photo компаниясынан алыстан башкаруу пультун сатып алдым. Кабелдин туура учу камерага туура келет жана узундугу 6 фут. Мен кабелди аягында баскычты башкаруу кутусунун жанына кесип, зымдарды чечип, үч баш казыкка ширеттим, аларды нан тактасына сайсам болот. Жерге жылаңач зым жана башка эки сигнал бар: учу триггер (кызгылт) жана шакек (ак) фокус (сүрөттөрдү караңыз). Учту жана/же шакекти жерге кыскартуу жапкычты жана фокусту камерага иштетет.

Өткөргүч зымды колдонуп, мен өспүрүмдөрдөн тилкеде колдоно турган жерге чейин жалпы тилкеден өттүм. Мен ошондой эле LED анодун Teensy 2ге жана LED катодун жерге каршылыкка (100-220 ом) туташтырдым. Мен ошондой эле Teensy 2 -пин 10K каршылыгына жана NPN транзисторунун базасына туташкан резистордун экинчи тарабын туташтырдым (2N3904 бардык жерде кездешет). Мен транзистордун эмитентин жерге, ал эми коллекторду ак жана кызгылт зымдарга камерага кеткен кабелден туташтырдым. Жылаңач зым кайрадан жерге туташтырылган. LED Teensy тарабынан күйгүзүлгөндө, NPN транзистору дагы күйөт жана камераны (жана фокусту) иштетет. Схеманы караңыз.

8 -кадам: системанын дизайны

Системалык дизайн
Системалык дизайн

Колибри канатынын сүзүү жыштыктары, кыязы, бир нече жүз Гцтен ашпайт, андыктан биз, чынында, бир нече жүз Гцтен жогору болгон жыштыктарды жазуунун кажети жок. Бизге керектүү нерсе - биз каалаган жыштыктарды гана чыпкалоо. Бандпас же атүгүл төмөн өтмө чыпкасы сонун болмок. Адатта, биз OpAmpsти же конденсатордук чыпкаларды колдонуп аппараттык фильтрди ишке ашырмакпыз. Бирок санарип сигналдарды иштетүүнүн жана Teensy программалык китепканаларынын жардамы менен биз санарип чыпканы колдоно алабыз (эч кандай ширетүүнүн кереги жок … жөн гана программалык камсыздоо).

PJRCде улуу GUI бар, ал Teensy жана аудио тактасы үчүн аудио тутумуңузду сүйрөп жана таштап кетүүгө мүмкүндүк берет. Аны бул жерден таба аласыз:

www.pjrc.com/teensy/gui/

Мен микрофондун (фильтрдин) үн жыштыгын чектөө үчүн PJRC тарабынан берилген биквадрат каскаддуу чыпкалардын бирин колдонууну чечтим. Мен ушундай үч фильтрди каскаддаштырып, аларды 100 Гцте өткөрмө иштетүүгө койдум. Бул чыпка бизди кызыктырган жыштыктан бир аз жогору жана бир аз төмөн тутумдун жыштыгына мүмкүнчүлүк берет.

Блок -схемада (сүрөттү караңыз) i2s1 аудио тактасына аудио киргизүү болуп саналат. Мен эки аудио каналды миксерге, анан чыпкаларга туташтырдым (микрофон бир гана канал, бирок мен экөөнү тең аралаштырып койгом, кайсы канал экенин билбедим… мени жалкоо деп атаңыз). Мен чыпканын чыгарылышын аудио чыгарууга иштетем (эгер кааласам аудиону уга алам). Мен ошондой эле чыпкалардагы аудиону FFT блогуна туташтырдым. Блок -схемада sgtl5000_1 деп белгиленген блок аудио контроллеринин чипи. Диаграммада эч кандай байланыштын кереги жок.

Бул блоктун курулушун бүтүргөндөн кийин, Экспорттоону чыкылдатыңыз. Бул диалог кутучасын пайда кылат, анда сиз блок -схемадан түзүлгөн кодду көчүрүп, Teensy тиркемесине чаптай аласыз. Эгерде сиз кодду карасаңыз, анда бул компоненттердин ортосундагы "байланыштар" менен бирге ар бир башкаруунун мисалы экенин көрө аласыз.

9 -кадам: Код

Code
Code

Программаны деталдуу түрдө карап чыгуу бул Нускамада өтө көп орунду ээлемек. Мен эмне кылууга аракет кылам, коддун негизги биттерин бөлүп көрсөтүү. Бирок бул анча чоң колдонмо эмес. PJRCде Teensy жана аудио китепканаларын/куралдарын колдонуу боюнча сонун видео сабактары бар (https://www.youtube.com/embed/wqt55OAabVs).

Мен PJRCден кээ бир FFT мисал коддору менен баштадым. Аудио системанын дизайн инструментинен алган нерселеримди коддун үстүнө чаптадым. Эгер андан кийин кодду карасаңыз, анда сиз кандайдыр бир инициализацияны көрөсүз, андан кийин система микрофондон аудиону санариптей баштайт. Программалык камсыздоо "түбөлүк" циклине () кирет жана fft1024_1.available () функциясына чалуу аркылуу FFT маалыматтарынын жеткиликтүү болушун күтөт. FFT маалыматы болгондо, мен маалыматтын көчүрмөсүн кармап, аны иштетем. Белгилей кетчү нерсе, мен эң чоң урнанын чоңдугу белгиленген нарктан жогору болгондо гана маалыматтарды алам. Бул баа системанын сезгичтигин кантип орнотконум. Эгерде урналар белгиленген мааниден жогору болсо, анда мен толкунду нормалдаштырам жана аны иштетүү үчүн убактылуу массивге өткөрүп берем, антпесе, мен ага көңүл бурбайм жана башка FFT күтө берем. Мен дагы микрофондун пайда болушун контролдоо функциясын схеманын сезгичтигин жөнгө салуу үчүн колдонгонумду айта кетишим керек (sgtl5000_1.micGain (50)).

Толкунду нормалдаштыруу, мен бардык урналарды тууралап, эң чоң мааниси бар урна бирөөгө барабар экенин билдирет. Башка бардык урналар бирдей пропорцияда таразаланат. Бул маалыматтарды талдоону жеңилдетет.

Мен маалыматтарды талдоо үчүн бир нече алгоритмдерди колдондум, бирок мен экөөнү эле колдонуп калдым. Бир алгоритм бинктерден түзүлгөн ийри астындагы аянтты эсептейт. Бул жөн эле кызыккан аймак боюнча урналардын маанилерин кошкон жөнөкөй эсептөө. Мен бул аймакты босогодон жогору экендигин аныктоо үчүн салыштырам.

Башка алгоритмде нормалдаштырылган FFTди билдирген баалуулуктардын туруктуу массиви колдонулат. Бул маалыматтар реалдуу (оптималдуу) колибри колтамгасынын натыйжасы. Мен муну хедж деп атайм. Мен хеджирлөө маалыматтарын нормалдаштырылган FFT маалыматтары менен салыштырып, тийиштүү урналар бири -биринин 20% чегинде экенин билем. Мен 20% ды тандадым, бирок бул маани оңой жөнгө салынышы мүмкүн.

Мен ошондой эле жеке алгоритмдер канча жолу дал келет деп ойлошот, мааниси бар, колибри угушат деп ойлойм. Мен бул санды колибри аныктоонун бир бөлүгү катары колдоном, анткени жалган триггер пайда болушу мүмкүн. Мисалы, кандайдыр бир үн катуу болгондо же канаттуулардын канатынын жыштыгын камтыганда, кол чабуу сыяктуу, сиз триггерди алышыңыз мүмкүн. Бирок, эгерде эсептөө белгилүү бир сандан жогору болсо (мен тандаган номер), мен бул колибри деп айтам. Бул болгондо, бизде хит бар экенин көрсөтүү үчүн LEDди күйгүзөм жана ушул эле схема камераны NPN транзистору аркылуу иштетет. Программада мен камеранын иштөө убактысын 2 секундга коюп койгом (LED жана транзистор күйгөн убакыт).

10 -кадам: Монтаж

Монтаж
Монтаж

Сиз сүрөттө менин электрониканы кантип орнотконумду көрө аласыз. Мен Teensyди башка (колдонулбаган) Arduino менен шайкеш келген ташуучу тактага жабышып калган нандын тактайына туташтырдым (менин оюмча Arduino Zero). Мен бардыгын палубамдагы металл тентек мамыга зым менен байладым (камерага чуркаган кабелге штаммды басаңдатууну да коштум). Штанга колибри багуучунун жанында болгон. Мен электрониканы кичинекей LiPo кирпичинен иштеттим, аны өлгөн уюлдук телефонду толтурууга болот. Күч кирпичте USB туташтыргычы бар болчу, мен аны Teensyге өткөрүп берчүмүн. Мен алыскы триггер кабелин Камерага чуркап, сайдым. Мен канаттуулардын аракетине даяр элем!

11 -кадам: Жыйынтыктар

Жыйынтыктар
Жыйынтыктар

Камераны фидердин жанындагы штативге орноттум. Менде камера фидердин эң алдыңкы четине багытталган болчу жана аны Спорт режимине койдум, ал жапкыч басылганда бир нече тез сүрөттөрдү алат. 2 секунддук жапкычтын убактысы менен мен бир окуяга болжол менен 5 сүрөт тарттым.

Мен муну биринчи жолу сынап көргөндө бир нече саат программалык камсыздоо менен алек болдум. Мен сезимталдыкты жана ырааттуу алгоритмдин хит санын тууралашым керек болчу. Мен акыры оңдой баштадым жана даяр болдум.

Биринчи тартылган сүрөт-бул реактивдүү истребитель сыяктуу жогорку ылдамдыкта банктын бурулушун жасап жаткандай кадрга учкан куш. Кантип толкунданганымды айта албайм. Мен палубанын аркы өйүзүндө бир аз отуруп, системанын иштешине уруксат бердим. Мен көп сүрөттөрдү жаздырууга жетиштим, бирок бир канчасын ыргытып жибердим. Көрсө, кээде куштун башын же куйругун аласың. Ошондой эле, мен пайда болушу мүмкүн болгон жалган триггерлерди алдым. Жалпысынан менде 39 сүрөт сакталды деп ойлойм. Фотоаппараттын жапкыч үнүнө көнүү үчүн канаттууларга фидерге бир нече жолу баруу керек болгон, бирок алар акыры аны көрмөксөнгө салышты.

12 -кадам: Акыркы ойлор

Акыркы ойлор
Акыркы ойлор

Бул кызыктуу долбоор болду жана ал иштейт. Бирок, көпчүлүк нерселер сыяктуу эле, жакшыртуу үчүн көп мүмкүнчүлүктөр бар. Чыпка, албетте, башкача болушу мүмкүн (төмөн өтүү чыпкасы же түзүлүшкө жана/же параметрлерге өзгөртүүлөр сыяктуу) жана балким, бул анын жакшыраак иштешин шарттайт. Мен дагы жакшы алгоритмдер бар экенине ишенем. Мен муну жазында сынап көрөм.

Мага ачык булактан машина үйрөнүү коду бар деп айтышты … балким системаны колибрлерди аныктоого "үйрөтүшкөн" болушу мүмкүн! Мен муну сынап көрөрүмө ишенбейм, бирок, мүмкүн.

Бул долбоорго дагы кандай нерселерди кошсо болот? Эгерде камеранын датасы/убактысы стампер болсо, анда бул маалыматты сүрөттөргө кошо аласыз. Сиз кыла турган дагы бир нерсе - аудиону жазуу жана uSD картага сактоо (PJRC аудио тактасында бирөө үчүн слот бар). Сакталган аудио окуу алгоритмин үйрөтүү үчүн колдонулушу мүмкүн.

Балким, бир жерде Орнитология мектеби ушундай аппаратты колдонушу мүмкүн? Алар тамактануу убактысы, тамактануу жыштыгы сыяктуу маалыматтарды чогулта алышы мүмкүн жана сүрөттөр менен сиз тоютка кайтып келген белгилүү канаттууларды аныктай аласыз.

Менин үмүтүм башка бирөө бул долбоорду кеңейтет жана жасаган нерселерин башкалар менен бөлүшөт. Кээ бир адамдар мага бул кылган жумушумду продуктка айлантуу керектигин айтышты. Мен анчалык так эмесмин, бирок мен аны үйрөнүү платформасы жана илим үчүн колдонулганын көргүм келет.

Окуганыңыз үчүн рахмат!

Мен жазган кодду колдонуу үчүн сизге Arduino IDE керек (https://www.arduino.cc/en/Main/Software). Сизге PJRCден Teensyduino коду керек болот (https://www.pjrc.com/teensy/td_download.html).

Сунушталууда: