Читаоци познају извиђаче - аналоге наших пионира, али испада да постоје и младунци - аналози нашег октобра. Прихваћени у њима од пете године. Син аутора Подуке под надимком мр_фид је већ усвојен, а он ће морати да присуствује великом догађају за таксије и извиђаче, од којих ће један бити Морсеов код. Да би додатно заинтересовао дете, мајстор му је поклонио необичну играчку.
Изводи се на
Ардуино Нано и генерише 12 различитих речи на звучни сигнал помоћу уграђеног генератора (може се пребацивати механичким прекидачем) и РГБ ЛЕД. Циклус се може подесити између 100 и 1100 милисекунди. За пребацивање речи обезбеђен је прекидач за ситничар. Дизајн напаја литијум-полимерном батеријом капацитета 1000 мАх. Уграђени је регулатор за пуњење. Али овде још није:
Мр_фид захваљује Симон Монк-у на књизи Ардуино програмирање, коју је купио пре неколико година. Приликом израде скице ослањао се на примере из ове књиге.
Почетак рада на
домаће, мајстор је за Морсеов код знао само да постоји СОС сигнал. Морао сам научити материјал и сазнати да је поента једна мера, цртица три, интервал између знакова у писму једна мера, између слова три, између речи седам.
Код означавања пластике мр_фид користи траку за маскирање. Захваљујући томе траг маркера се боље види ако је пластика тамна. Поред тога, ова лепљива трака је мат, а бушилица не клизи када „циља“.
Потребно је унапред проценити где ће се која компонента конструкције налазити тако да се све уклапа, а ниједна компонента не додирује суседне, укључујући и избочене делове. Мр_фид није заборавио ништа осим ... батерије. Па, случај је прилично простран и тада је пронађено место за то. У међувремену ...
Иако мајстор има малу бушилицу за клупе, чак је и за њега користио степеничну бушилицу за практичност, такође је и „кокош“ или „шаргарепа“.
Када се осовина прекидача закрета ручицом, сам прекидач мора остати непомичан. За то је, поред осовине, испред ње мали штанц који захтева додатни отвор на предњој плочи.
Стога је мр_фид прво избушио рупу за осовину, затим залепио маскирну траку на задњу страну, ставио кључ на место и притиснуо га. Пин је оставио траг на траци за маскирање, остаје да се тамо избуши рупа.
Шема без узимања у обзир батерије, контролера и претварача изгледа овако:
На предњој плочи, где се налазе прекидач кекса и променљиви отпорник, мастер је комбиновао оне закључке ових компоненти које су повезане у исте тачке круга у овом случају (у овом случају плус и заједничка жица). То је омогућило да се између предњег панела и кућишта повуку само четири жице.
Кључ за кључеве такође је претворен у неку врсту променљивог отпора, само корак, за који је на њега лемљено 11 отпорника по 1 кОхм, као што је приказано на фотографијама. Ардуино одређује свој положај степенасто променљивим напоном, за који је довољан један аналогни улаз.
Веће:
За контролу РГБ ЛЕД-а, мр_фид је одабрао Ардуино игле са бројевима 9, 10 и 11. Ово су ПВМ излази, који ће на следећем фирмверу омогућити добијање више бита по боји од три.
Спојио је плус и заједничку жицу у обрнутом поларитету на променљиви отпорник, тако да минимални положај одговара циклусу максималног трајања, то јест минималној брзини.
Пример из уџбеника Симон Монк је једноставан и једнофункционалан: узима податке који долазе кроз серијски порт и преводи их у Морсеов код са циклусом од 200 милисекунди. Додатне функције које је додао чаробњак омогућавају подешавање периода у зависности од напона који долази од мотора променљивог отпора, као и одбијање серијског порта у корист смештања 12 фиксних речи изабраних прекидачем. Такође су додате рутине за управљање дугметом за пребацивање режима РГБ-ЛЕД, а помоћу високотонца са уграђеним генератором програм би могао иницијално да контролише.
Када је програмирао Ардуино, мр_фид је потпуно заборавио да играчку треба хранити из нечега, јер је плоча све време напајана са УСБ-а. Кад се сетио, прва помисао била је да све то покренем из „Кроне“ преко стабилизатора. Али то му није одговарало, и мајстор је испрва хтео да га постави напољу, али је онда одлучио да користи танку литијум-полимерну батерију са 3,7 В и 1000 мАх.
Напон са свеже напуњеном батеријом достиже 4,2 В, што је довољно за све кристале РГБ ЛЕД, укључујући и плаву. Али како се празни, он опада, и иако је довољно 3,3 В, светлина плаве светлости може знатно да се смањи. Морао сам да користим појачани стабилизатор са стабилних пет волти на излазу. А да не би извадио батерију из кућишта приликом пуњења, аутор је додао регулатор пуњења и двополни преокретни прекидач који повезује батерију са оба пола на Ардуино или овај регулатор. Сада можете напунити играчку са УСБ-а.
Све је то повезао на такав начин, не заборављајући поларитет и спречавање кратког споја:
Променом положаја прекидача за кексе можете одабрати Морсеов код за следеће комбинације слова: ХХХ (једна тачкица), ООО (једна цртица), ЦАТ (мачка), ДОГ (пас), АНТ (мрав), ФЛИ (летеће), РАТ (пацов), ОВЛ (сова), ПИГ (свиња), ХЕН (пилетина), ФОКС (лисица) и ЕМУ (ему). Дугме вам омогућава пребацивање начина рада РГБ ЛЕД на прстен: сталне боје - црвена, плава, зелена, плаво-зелена, жута, малина, бела, као и црвена тачка и зелена цртица, промена боје након сваке речи, промена боје после сваког слова .
У Ардуину је мр_фид пренео такву скицу:инт дотДелаи = 200;
инт ледПинРед = 11; // црвени
инт ледПинБлуе = 10; // плава
инт ледПинГреен = 9; // зелена
инт олдАИ = 15;
инт пат;
инт и = 1;
инт ј = 0;
боол тоггле = фалсе;
инт тастер = 8;
инт звук = 7;
инт флаг = 1;
инт селецтВорд;
инт животиња = 1;
инт потВалуе = 0;
инт макВолтагеБитс = 1023;
инт подијељеноБитс = макВолтагеБитс / 22;
цонст инт пот = А4;
цонст инт ротариИнпут = А5;
цхар цх;
цхар * слова [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
цхар * бројеви [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
цхар * анимал3 = "хххоооцатдогантфлиратовлпигхенфокему";
подешавање празнине ()
{
пинМоде (ледПинБлуе, ОУТПУТ);
пинМоде (ледПинРед, ОУТПУТ);
пинМоде (ледПинГреен, ОУТПУТ);
пинМоде (пот, ИНПУТ);
пинМоде (ротацијски улаз, улаз);
пинМоде (тастер, улаз);
пинМоде (зујање, ИЗЛАЗ);
дигиталВрите (ледПинРед, ХИГХ);
дигиталВрите (ледПинБлуе, ХИГХ);
дигиталВрите (ледПинГреен, ХИГХ);
дигиталВрите (ледПинРед, ЛОВ);
кашњење (500);
дигиталВрите (ледПинРед, ХИГХ);
кашњење (100);
дигиталВрите (ледПинБлуе, ЛОВ);
кашњење (500);
дигиталВрите (ледПинБлуе, ХИГХ);
кашњење (100);
дигиталВрите (ледПинГреен, ЛОВ);
кашњење (500);
дигиталВрите (ледПинГреен, ХИГХ);
кашњење (100);
дигиталВрите (зујање, ХИГХ);
кашњење (100);
дигиталВрите (зујање, ЛОВ);
инт буттонВалуе = дигитално читање (дугме);
ако (буттонВалуе == 1)
{
селецтВорд = аналогРеад (ротарски улаз);
селецторСвитцх1 (селецтВорд);
}
друго
{
флаг = 1;
}
}
воид петља ()
{
ваит_фор_ентер ();
селецтВорд = аналогРеад (ротарски улаз);
селецторСвитцх (селецтВорд);
потВалуе = аналогРеад (пот);
дотДелаи = потВалуе + 100;
и = (животиња * 3) -3;
док је (ј <3)
{
цх = животиње3 [и];
иф (цх & гт; = 'а' && цх & лт; = 'з')
{
фласхСекуенце (слова [цх - 'а']);
}
друго ако (цх & гт; = '0' && цх & лт; = '9')
{
фласхСекуенце (слова [цх - '0']);
}
друго ако (цх == '')
{
кашњење (дотДелаи * 7);
}
и = и + 1;
ј = ј + 1;
}
кашњење (дотДелаи * 7);
// тоггле =! пребацивање; // пребацује боју сваке речи (није потребно)
ј је 0;
}
воид ваит_фор_ентер ()
{
инт буттонВалуе = дигитално читање (дугме);
док (буттонВалуе == 0)
{
буттонВалуе = дигитално читање (дугме);
}
}
воид фласхСекуенце (цхар * слијед)
{
инт к = 0;
вхиле (низ [к]! = '\ 0')
{
фласхДотОрДасх (слијед [к]);
к = к + 1;
}
//Сериал.принт ("");
кашњење (дотДелаи * 3);
тоггле =! тоггле; // пребацује боју између слова
}
воид фласхДотОрДасх (цхар дотОрДасх)
{
иф (дотОрДасх == '.')
{
иф (застава == 1)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
}
друго ако (флаг == 2)
{
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
друго ако (флаг == 3)
{
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинГреен, ХИГХ);
}
друго ако (флаг == 4)
{
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинГреен, ХИГХ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
друго ако (флаг == 5)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
дигиталВрите (ледПинГреен, ХИГХ);
}
друго ако (флаг == 6)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
друго ако (флаг == 7)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
дигиталВрите (ледПинБлуе, ХИГХ);
дигиталВрите (ледПинГреен, ХИГХ);
}
друго ако (флаг == 8)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
}
друго ако (флаг == 9)
{
иф (пребаци! = 0)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
}
друго
{
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
}
}
друго
{
иф (застава == 1)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
}
друго ако (флаг == 2)
{
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
друго ако (флаг == 3)
{
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинГреен, ХИГХ);
}
друго ако (флаг == 4)
{
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинГреен, ХИГХ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
друго ако (флаг == 5)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
дигиталВрите (ледПинГреен, ХИГХ);
}
друго ако (флаг == 6)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
друго ако (флаг == 7)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
дигиталВрите (ледПинБлуе, ХИГХ);
дигиталВрите (ледПинГреен, ХИГХ);
}
друго ако (флаг == 8)
{
дигиталВрите (ледПинГреен, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинГреен, ХИГХ);
}
друго ако (флаг == 9)
{
иф (пребаци! = 0)
{
дигиталВрите (ледПинРед, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинРед, ХИГХ);
}
друго
{
дигиталВрите (ледПинБлуе, ЛОВ);
дигиталВрите (зујање, ХИГХ);
кашњење (дотДелаи * 3);
дигиталВрите (зујање, ЛОВ);
дигиталВрите (ледПинБлуе, ХИГХ);
}
}
}
кашњење (дотДелаи); // између слова
// тоггле =! пребацивање; // пребацивање између карактора
}
воид селецторСвитцх1 (инт АИ)
{
иф ((АИ & гт; (олдАИ + 10)) || (АИ <(олдАИ - 10)) // // види да ли се вредност променила?
{
ако (АИ> 11 * подијељени битови) // мора бити 7,8,9,10,11,12.
{
ако (АИ> 17 * подијељени битови) // мора бити 10,11,12.
{
ако (АИ> 21 * подијељени битови) // мора бити 12.
{
флаг = 12;
}
// мора бити или 10.11.
{
ако (АИ> 19 * подијељени битови) // мора бити 11.
{
флаг = 11;
}
// мора бити 10.
{
флаг = 10;
}
}
}
остало // мора бити 7,8,9.
{
ако (АИ> 15 * подијељени битови) // мора бити 9.
{
флаг = 9;
}
остало // мора бити 7.8.
{
ако (АИ> 13 * подијељени битови) // мора бити 8.
{
флаг = 8;
}
// мора бити 7.
{
флаг = 7;
}
}
}
}
остало // мора бити 1,2,3,4,5,6.
{
ако (АИ> 5 * подијељени битови) // мора бити 4,5,6.
{
ако (АИ> 9 * подијељени битови) // мора бити 6.
{
флаг = 6;
}
остало // мора бити 4,5.
{
ако (АИ> 7 * подијељени битови) // мора бити 5
{
флаг = 5;
}
// мора бити 4.
{
флаг = 4;
}
}
}
// мора бити 1,2,3.
{
ако (АИ> 3 * подијељени битови) // мора бити 3.
{
флаг = 3;
}
остало // мора бити 1,2.
{
ако (АИ & гт; схаредБитс) // мора бити 2.
{
флаг = 2;
}
// мора бити 1.
{
флаг = 1;
}
}
}
}
}
олдАИ = АИ;
// кашњење (500);
//Сериал.принтлн ();
}
неважећи селектор (инт АИ)
{
иф ((АИ & гт; (олдАИ + 10)) || (АИ <(олдАИ - 10)) // // види да ли се вредност променила?
{
ако (АИ> 11 * подијељени битови) // мора бити 7,8,9,10,11,12.
{
ако (АИ> 17 * подијељени битови) // мора бити 10,11,12.
{
ако (АИ> 21 * подијељени битови) // мора бити 12.
{
животиња = 12;
}
// мора бити или 10.11.
{
ако (АИ> 19 * подијељени битови) // мора бити 11.
{
животиња = 11;
}
// мора бити 10.
{
животиња = 10;
}
}
}
остало // мора бити 7,8,9.
{
ако (АИ> 15 * подијељени битови) // мора бити 9.
{
животиња = 9;
}
остало // мора бити 7.8.
{
ако (АИ> 13 * подијељени битови) // мора бити 8.
{
животиња = 8;
}
// мора бити 7.
{
животиња = 7;
}
}
}
}
остало // мора бити 1,2,3,4,5,6.
{
ако (АИ> 5 * подијељени битови) // мора бити 4,5,6.
{
ако (АИ> 9 * подијељени битови) // мора бити 6.
{
животиња = 6;
}
остало // мора бити 4,5.
{
ако (АИ> 7 * подијељени битови) // мора бити 5
{
животиња = 5;
}
// мора бити 4.
{
животиња = 4;
}
}
}
// мора бити 1,2,3.
{
ако (АИ> 3 * подијељени битови) // мора бити 3.
{
животиња = 3;
}
остало // мора бити 1,2.
{
ако (АИ & гт; схаредБитс) // мора бити 2.
{
животиња = 2;
}
// мора бити 1.
{
животиња = 1;
}
}
}
}
}
олдАИ = АИ;
// кашњење (500);
//Сериал.принтлн ();
}
Ако сте поновили за господарем, сада је у вашим рукама иста играчка којом можете заинтересовати своју децу у Морсеовом коду. А кад одрасту, једноставном променом управљачког софтвера можете добити основу за стандардну аутоматску "лисицу", одашиљући избор МОЕ, МОИ, МОС, МОХ или МО5, укључивањем на један минут сваке четири минуте.
П.С. посебно за досадне људе који погријеше са насловима: животиње су колективно име животиња, птица и инсеката.