Čtenáři znají skauty - analogy našich průkopníků, ale ukázalo se, že existují i mláďata - analogy našeho října. Přijato v nich od pěti let. Syn autora Instructsbles pod přezdívkou mr_fid již byl přijat a bude se muset zúčastnit významné akce pro kabiny a skauty, z nichž jednou bude Morseův kód. Pro další zájem o dítě mu pán dal neobvyklou hračku.
Je vykonán
Arduino Nano také generuje 12 různých slovních výstupů na bzučák s vestavěným generátorem (přepínatelným mechanickým spínačem) a RGB LED. Cyklus lze nastavit mezi 100 a 1100 milisekundami. Pro přepínání slov je k dispozici přepínač drcení. Konstrukce je napájena lithium-polymerovou baterií 1000 mAh. Vestavěný regulátor nabíjení. Ale tady to ještě není:
Děkuji panu Simonovi Monkovi za knihu Arduino Programming, kterou si koupil před několika lety. Při sestavování náčrtu se spoléhal na příklady z této knihy.
Zahájení práce na
domácí, mistr věděl o Morseově kódu jen to, že tam byl signál SOS. Musel jsem se naučit materiál a zjistit, že bodem je jedno měřítko, pomlčka je tři, interval mezi znaky v dopise je jedno měřítko, mezi písmeny je tři, mezi slovy je sedm.
Při označení plastu mr_fid používá maskovací pásku. Díky tomu je stopa značek lépe vidět, pokud je plast tmavý. Tato lepicí páska je navíc matná a vrták neklouže, když „míří“.
Je nutné předem odhadnout, která ze složek struktury bude umístěna, aby se vše hodilo, a ani jedna ze složek se nedotkla sousedních, včetně vyčnívajících částí. Mr_fid nezapomněl nic než ... na baterii. Případ je poměrně prostorný a poté bylo nalezeno místo. Mezitím ...
Ačkoli má mistr malý stolní vrták, i když pro pohodlí použil stupňovitý vrták, je to také „rybí kost“ nebo „mrkev“.
Když se hřídel otočného knoflíku otočí rukojetí, musí samotný spínač zůstat v klidu. K tomu je vedle hřídele před ním malý kolík, který vyžaduje další otvor na čelním panelu.
Proto mr_fid nejprve vyvrtal otvor pro hřídel, pak nalepil maskovací pásku na zadní stranu, nasadil klíčový klíč na místo a přitiskl jej. Čep nechal na maskovací pásku stopu, zbývá tam vyvrtat otvor.
Obvod bez baterie, regulátoru nabíjení a převodníku vypadá takto:
Na předním panelu, kde je umístěn sušenkový spínač a variabilní rezistor, master kombinoval ty závěry těchto komponent, které jsou připojeny ke stejným bodům obvodu v případě (v tomto případě plus a společný vodič). To umožnilo natáhnout pouze čtyři dráty mezi přední panel a pouzdro.
Klíčový klíč je také přeměněn na jakýkoli variabilní rezistor, jen na krokový, pro který se k němu připájí 11 rezistorů na 1 kOhm, jak je znázorněno na fotografiích. Arduino určuje svou polohu postupně se měnícím napětím, pro které stačí jeden analogový vstup.
Větší:
Pro ovládání RGB LED si mr_fid vybral Arduino piny s čísly 9, 10 a 11. Jedná se o PWM výstupy, které v dalším firmwaru umožní získat více bitů na barvu než tři.
Připojil kladný a společný vodič v obrácené polaritě k proměnnému odporu, takže minimální poloha odpovídá cyklu maximální doby trvání, tj. Minimální rychlosti.
Příklad z učebnice Simona Monka je jednoduchý a funkční: bere data přicházející přes sériový port a převádí je do Morseova kódu s hodinovým cyklem 200 milisekund. Další funkce přidané průvodcem poskytují úpravu doby v závislosti na napětí přicházejícím z motoru s proměnným odporem, jakož i odmítnutí sériového portu ve prospěch uložení 12 pevných slov vybraných přepínačem. Také byly přidány rutiny pro ovládání přepínacího tlačítka režimu RGB-LED as programem tweeter se zabudovaným generátorem mohl program zpočátku ovládat.
Při programování Arduino mr_fid úplně zapomněl, že hračka musí být krmena z něčeho, protože deska byla celou dobu napájena z USB. Když si vzpomněl, první myšlenkou bylo, že to všechno pohne z „Krony“ prostřednictvím stabilizátoru. Ale to se nehodilo, a nejprve ho chtěl pán umístit venku, ale pak se rozhodl použít tenkou lithium-polymerovou baterii s 3,7 V a 1000 mAh.
U čerstvě nabité baterie dosahuje napětí 4,2 V, což je dostatečné pro všechny krystaly LED RGB, včetně modré. Ale jak se vybíjí, klesá ai když je dost 3,3 V, jas modrého světla se může výrazně snížit. Musel jsem použít stabilizátor zesílení se stabilními pěti volty na výstupu. A aby nedošlo k vyjmutí baterie z pouzdra při nabíjení, autor přidal řadič nabíjení a dvoupólový přepínač, který spojuje baterii s oběma póly k Arduino nebo k tomuto řadiči. Nyní můžete nabíjet hračku z USB.
To vše spojil dohromady tak, že nezapomněl na polaritu a zabránění zkratu:
Změnou polohy sušenkového spínače můžete vybrat Morseův kód pro následující kombinace písmen: HHH (jedna tečka), OOO (jedna pomlčka), KOC (kočka), DOG (pes), ANT (mravenec), FLY (létat), RAT (krysa), OWL (sova), PIG (prasete), HEN (kuře), FOX (liška) a EMU (emu). Tlačítko umožňuje přepínat provozní režimy LED RGB na kroužku: konstantní barvy - červená, modrá, zelená, modrozelená, žlutá, malinová, bílá, stejně jako červená tečka a zelená pomlčka, změna barvy po každém slovu, změna barvy po každém písmenu .
V Arduino, mr_fid nahrál takovou skicu:int dotDelay = 200;
int ledPinRed = 11; // červená
int ledPinBlue = 10; // modrá
int ledPinGreen = 9; // zelená
int oldAI = 15;
int pat;
int i = 1;
int j = 0;
bool toggle = false;
tlačítko int = 8;
int bzučák = 7;
int flag = 1;
int selectWord;
int zvíře = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
const int pot = A4;
const int rotačníVstup = A5;
char ch;
char * dopisy [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * čísla [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
neplatné nastavení ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (pot, INPUT);
pinMode (rotační vstup, INPUT);
pinMode (tlačítko, INPUT);
pinMode (bzučák, VÝSTUP);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, LOW);
zpoždění (500);
digitalWrite (ledPinRed, HIGH);
zpoždění (100);
digitalWrite (ledPinBlue, LOW);
zpoždění (500);
digitalWrite (ledPinBlue, HIGH);
zpoždění (100);
digitalWrite (ledPinGreen, LOW);
zpoždění (500);
digitalWrite (ledPinGreen, HIGH);
zpoždění (100);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (100);
digitalWrite (bzučák, LOW);
int buttonValue = digitalRead (button);
if (buttonValue == 1)
{
selectWord = analogRead (rotační vstup);
selectorSwitch1 (selectWord);
}
jinde
{
příznak = 1;
}
}
prázdná smyčka ()
{
wait_for_enter ();
selectWord = analogRead (rotační vstup);
selectorSwitch (selectWord);
potValue = analogRead (pot);
dotDelay = potValue + 100;
i = (zvíře * 3) -3;
zatímco (j <3)
{
ch = zvířata3 [i];
if (ch & gt; = 'a' && ch <= 'z')
{
flashSequence (písmena [ch - 'a']);
}
jinak pokud (ch & gt; = '0' && ch <= '9')
{
flashSequence (písmena [ch - '0']);
}
jinak pokud (ch == '')
{
zpoždění (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
zpoždění (dotDelay * 7);
// toggle =! toggle; // přepíná barvu každého slova (není potřeba)
j je 0;
}
void wait_for_enter ()
{
int buttonValue = digitalRead (button);
while (buttonValue == 0)
{
buttonValue = digitalRead (button);
}
}
void flashSequence (char * sequence)
{
int k = 0;
while (posloupnost [k]! = '\ 0')
{
flashDotOrDash (sekvence [k]);
k = k + 1;
}
//Serial.print ("");
zpoždění (dotDelay * 3);
toggle =! toggle; // přepíná barvu mezi písmeny
}
void flashDotOrDash (char dotOrDash)
{
if (dotOrDash == '.')
{
if (flag == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
}
jinak pokud (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinBlue, HIGH);
}
jinak pokud (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinGreen, HIGH);
}
jinak pokud (flag == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
jinak pokud (příznak == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
jinak pokud (flag == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
jinak pokud (flag == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
jinak pokud (flag == 8)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
}
jinak pokud (příznak == 9)
{
if (přepnout! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
}
jinde
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
jinde
{
if (flag == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
}
jinak pokud (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinBlue, HIGH);
}
jinak pokud (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinGreen, HIGH);
}
jinak pokud (flag == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
jinak pokud (příznak == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
jinak pokud (flag == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
jinak pokud (flag == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
jinak pokud (flag == 8)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinGreen, HIGH);
}
jinak pokud (příznak == 9)
{
if (přepnout! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinRed, HIGH);
}
jinde
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučák, VYSOKÝ);
zpoždění (dotDelay * 3);
digitalWrite (bzučák, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
zpoždění (dotDelay); // mezi písmeny
// toggle =! toggle; // přepínání mezi caractors
}
selektor selháníSwitch1 (int AI)
{
if ((AI> (oldAI + 10)) || (AI <(oldAI - 10))) // // jestli se hodnota změnila?
{
if (AI> 11 * splitBits) // musí být 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // musí být 10,11,12.
{
if (AI> 21 * splitBits) // musí být 12.
{
vlajka = 12;
}
else // musí být buď 10.11.
{
if (AI> 19 * splitBits) // musí být 11.
{
příznak = 11;
}
else // musí být 10.
{
příznak = 10;
}
}
}
else // musí být 7,8,9.
{
if (AI> 15 * splitBits) // musí být 9.
{
vlajka = 9;
}
else // musí být 7.8.
{
if (AI> 13 * splitBits) // musí být 8.
{
příznak = 8;
}
else // musí být 7.
{
příznak = 7;
}
}
}
}
else // musí být 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // musí být 4,5,6.
{
if (AI> 9 * splitBits) // musí být 6.
{
příznak = 6;
}
jinak // musí být 4,5.
{
if (AI> 7 * splitBits) // musí být 5
{
příznak = 5;
}
else // musí být 4.
{
příznak = 4;
}
}
}
else // musí být 1,2,3.
{
if (AI> 3 * splitBits) // musí být 3.
{
příznak = 3;
}
else // musí být 1,2.
{
if (AI> splitBits) // musí být 2.
{
příznak = 2;
}
else // musí být 1.
{
příznak = 1;
}
}
}
}
}
oldAI = AI;
// zpoždění (500);
//Serial.println ();
}
selektor selháníSwitch (int AI)
{
if ((AI> (oldAI + 10)) || (AI <(oldAI - 10))) // // jestli se hodnota změnila?
{
if (AI> 11 * splitBits) // musí být 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // musí být 10,11,12.
{
if (AI> 21 * splitBits) // musí být 12.
{
zvíře = 12;
}
else // musí být buď 10.11.
{
if (AI> 19 * splitBits) // musí být 11.
{
zvíře = 11;
}
else // musí být 10.
{
zvíře = 10;
}
}
}
else // musí být 7,8,9.
{
if (AI> 15 * splitBits) // musí být 9.
{
zvíře = 9;
}
else // musí být 7.8.
{
if (AI> 13 * splitBits) // musí být 8.
{
zvíře = 8;
}
else // musí být 7.
{
zvíře = 7;
}
}
}
}
else // musí být 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // musí být 4,5,6.
{
if (AI> 9 * splitBits) // musí být 6.
{
zvíře = 6;
}
jinak // musí být 4,5.
{
if (AI> 7 * splitBits) // musí být 5
{
zvíře = 5;
}
else // musí být 4.
{
zvíře = 4;
}
}
}
else // musí být 1,2,3.
{
if (AI> 3 * splitBits) // musí být 3.
{
zvíře = 3;
}
else // musí být 1,2.
{
if (AI> splitBits) // musí být 2.
{
zvíře = 2;
}
else // musí být 1.
{
zvíře = 1;
}
}
}
}
}
oldAI = AI;
// zpoždění (500);
//Serial.println ();
}
Pokud jste po mistrovi opakovali, nyní je ve vašich rukou stejná hračka, se kterou můžete své děti zajímat o Morseův kód. A když vyrostou, s jednoduchým předěláním firmwaru, můžete získat základ pro standardní automatický „liška“, přenášet výběr MOE, MOI, MOS, MOH nebo MO5 a zapínat každou minutu jednu minutu.
P.S. zejména pro nudné lidi, kteří najdou chybu v titulcích: zvířata jsou kolektivní název pro zvířata, ptáky a hmyz.