Čitatelia poznajú skautov - analógov našich priekopníkov, ale ukázalo sa, že existujú aj mláďatá - analógy nášho októbra. Prijaté v nich od piatich rokov. Syn autora Instructsbles pod prezývkou mr_fid už bol prijatý a bude sa musieť zúčastniť významnej udalosti pre kabíny a skautov, z ktorých jednou bude Morseov kód. Aby ho dieťa ešte viac zaujalo, majster mu dal neobvyklú hračku.
Vykonáva sa dňa
Arduino Nano a generuje výstup 12 rôznych slov na bzučiak so vstavaným generátorom (prepínateľným pomocou mechanického spínača) a RGB LED. Cyklus je možné nastaviť v rozsahu 100 až 1100 milisekúnd. Na prepínanie slov je k dispozícii drotárový prepínač. Konštrukcia je napájaná lítium-polymérovou batériou s kapacitou 1 000 mAh. Regulátor nabíjania je zabudovaný. Ale tu to ešte nie je:
Pán_fid ďakuje Simonovi Monkovi za knihu Arduino Programming, ktorú kúpil pred niekoľkými rokmi. Pri zostavovaní náčrtu vychádzal z príkladov z tejto knihy.
Začatie práce
homebrew vetvička, pán vedel o Morseovom kóde iba to, že bol signál SOS. Musel som sa naučiť materiál a zistiť, že bod je jedno opatrenie, pomlčka je tri, interval medzi znakmi v liste je jedno opatrenie, medzi písmenami sú tri, medzi slovami je sedem.
Pri označovaní plastov používa mr_fid maskovaciu pásku. Vďaka tomu je stopa markera lepšie viditeľná, ak je plast tmavý. Táto lepiaca páska je navyše matná a pri „mierení“ vŕtačka nekĺzava.
Je potrebné vopred odhadnúť, ktorá zo zložiek konštrukcie bude umiestnená tak, aby sa všetko zmestilo a žiadna zo zložiek sa nedotýkala susedných prvkov vrátane vyčnievajúcich častí. Mr_fid nezabudol nič iné ako ... batériu. Prípad je dosť priestranný a potom bolo nájdené miesto. Medzitým ...
Aj keď má majster malú vŕtačku na lavičke, aj keď s ňou pre pohodlie používal stupňovú vŕtačku, je to tiež „rybia kosť“ alebo „mrkva“.
Keď sa hriadeľ otočného gombíka otáča za rukoväť, samotný spínač musí zostať nehybný. Na tento účel je okrem hriadeľa pred ním malý kolík, ktorý vyžaduje ďalší otvor na prednom paneli.
Preto mr_fid najprv vyvŕtala otvor pre hriadeľ, potom nalepila maskovaciu pásku na chrbát, nasadila kľúčový kľúč na miesto a stlačila ho. Čap zanechal na maskovacej páske značku, zostáva tam vyvŕtať otvor.
Schéma bez ohľadu na batériu, ovládač nabíjania a prevodník vyzerá takto:
Na prednom paneli, kde je umiestnený spínač sušienok a variabilný odpor, Master kombinoval tie závery týchto komponentov, ktoré sú pripojené k rovnakým bodom obvodu v prípade (v tomto prípade plus a spoločný drôt). To umožnilo, aby medzi predným panelom a krytom boli natiahnuté iba štyri drôty.
Kľúčový prepínač sa tiež zmení na istý druh premenlivého rezistora, iba na krokový, pre ktorý sa na neho pripája 11 rezistorov na 1 kOhm, ako je to znázornené na fotografiách. Arduino určuje svoju polohu postupne sa meniacim napätím, pre ktoré stačí jeden analógový vstup.
zväčšiť:
Na ovládanie RGB LED si mr_fid vybral piny Arduino s číslami 9, 10 a 11. Jedná sa o výstupy PWM, ktoré v ďalšom firmvéri umožnia získať viac bitov na farbu ako tri.
Pripojil kladný a spoločný drôt v opačnej polarite k premenlivému odporu, takže minimálna poloha zodpovedá cyklu maximálnej doby, to znamená minimálnej rýchlosti.
Príklad z učebnice Simona Monka je jednoduchý a funkčný: berie údaje prichádzajúce cez sériový port a prevádza ich do Morseovho kódu s hodinovým cyklom 200 milisekúnd. Ďalšie funkcie pridané sprievodcom poskytujú úpravu periódy v závislosti od napätia prichádzajúceho z motora s premenlivým odporom, ako aj odmietnutie sériového portu v prospech uloženia 12 pevných slov vybratých prepínačom. Tiež boli pridané rutiny na ovládanie prepínacieho tlačidla režimu RGB-LED a pomocou tweetera so vstavaným generátorom mohol program pôvodne ovládať.
Pri programovaní Arduino mr_fid úplne zabudol, že hračka musí byť kŕmená niečím, pretože doska bola stále napájaná z USB. Keď si spomenul, prvou myšlienkou bolo napájať všetko od „Krona“ cez stabilizátor. Ale to sa nezmestilo a majster ho najprv chcel umiestniť von, ale potom sa rozhodol použiť tenkú lítium-polymérovú batériu s 3,7 V a 1000 mAh.
S čerstvo nabitou batériou napätie dosiahne 4,2 V, čo je dostatočné pre všetky kryštály LED RGB vrátane modrej. Keď sa však vybíja, klesá a aj keď je dosť 3,3 V, jas modrého svetla sa môže výrazne znížiť. Musel som použiť stabilizátor zosilnenia so stabilným päť voltov na výstupe. A aby sa pri nabíjaní nevybrala batéria z puzdra, autor pridal regulátor nabíjania a dvojpólový prepínač, ktorý spája batériu s oboma pólami buď s Arduino, alebo s týmto ovládačom. Teraz môžete nabíjať hračku z USB.
Toto všetko spojil tak, že nezabudol na polaritu a zabránenie skratu:
Zmenou polohy biscuitovho prepínača môžete zvoliť Morseov kód pre nasledujúce kombinácie písmen: HHH (jedna bodka), OOO (jedna pomlčka), CAT (mačka), DOG (pes), ANT (mravec), FLY (lietať), RAT (potkan), OWL (sova), PIG (ošípané), HEN (kurča), FOX (líška) a EMU (emu). Tlačidlo umožňuje prepínať prevádzkové režimy RGB LED na krúžku: konštantné farby - červená, modrá, zelená, modrozelená, žltá, malinová, biela, ako aj červená bodka a zelená pomlčka, zmena farby po každom slove, zmena farby po každom písmene ,
V Arduino, mr_fid nahral takúto 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čidlo int = 8;
int bzučiak = 7;
int flag = 1;
int selectWord;
int zviera = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
konštantný hrnec = A4;
const int rotačnýVstup = A5;
char ch;
char * letter [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-."
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * number [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-...", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
neplatné nastavenie ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (pot, INPUT);
pinMode (rotačný vstup, INPUT);
pinMode (tlačidlo, VSTUP);
pinMode (bzučiak, VÝSTUP);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, LOW);
oneskorenie (500);
digitalWrite (ledPinRed, HIGH);
oneskorenie (100);
digitalWrite (ledPinBlue, LOW);
oneskorenie (500);
digitalWrite (ledPinBlue, HIGH);
oneskorenie (100);
digitalWrite (ledPinGreen, LOW);
oneskorenie (500);
digitalWrite (ledPinGreen, HIGH);
oneskorenie (100);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (100);
digitalWrite (bzučiak, LOW);
int buttonValue = digitalRead (button);
if (buttonValue == 1)
{
selectWord = analogRead (rotačný vstup);
selectorSwitch1 (selectWord);
}
inak
{
vlajka = 1;
}
}
prázdna slučka ()
{
wait_for_enter ();
selectWord = analogRead (rotačný vstup);
selectorSwitch (selectWord);
potValue = analogRead (pot);
dotDelay = potValue + 100;
i = (zviera * 3) -3;
zatiaľ čo (j <3)
{
ch = zvieratá3 [i];
ak (ch & gt; = 'a' && ch <= 'z')
{
flashSequence (písmená [ch - 'a']);
}
inak ak (ch & gt = = '0' && ch <= '9')
{
flashSequence (písmená [ch - '0']);
}
inak ak (ch == '')
{
oneskorenie (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
oneskorenie (dotDelay * 7);
// toggle =! toggle; // prepínať farbu každého slova (nie je potrebné)
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 (sekvencia [k]! = '\ 0')
{
flashDotOrDash (sekvencia [k]);
k = k + 1;
}
//Serial.print ("");
oneskorenie (dotDelay * 3);
toggle =! toggle; // prepínať farbu medzi písmenami
}
void flashDotOrDash (char dotOrDash)
{
if (dotOrDash == '.')
{
if (flag == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
}
inak ak (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinBlue, HIGH);
}
inak ak (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinGreen, HIGH);
}
inak ak (flag == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
inak ak (flag == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
inak ak (flag == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
inak ak (flag == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
inak ak (flag == 8)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
}
inak ak (flag == 9)
{
if (prepnúť! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
}
inak
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
inak
{
if (flag == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
}
inak ak (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinBlue, HIGH);
}
inak ak (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinGreen, HIGH);
}
inak ak (flag == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
inak ak (flag == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
inak ak (flag == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
inak ak (flag == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
inak ak (flag == 8)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinGreen, HIGH);
}
inak ak (flag == 9)
{
if (prepnúť! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinRed, HIGH);
}
inak
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (bzučiak, VYSOKÝ);
oneskorenie (dotDelay * 3);
digitalWrite (bzučiak, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
oneskorenie (dotDelay); // medzi písmenami
// toggle =! toggle; // prepínať medzi karikatúrami
}
selektor voliebSwitch1 (int AI)
{
ak ((AI> (oldAI + 10)) || (AI <(oldAI - 10))) // // zistiť, či sa hodnota zmenila?
{
ak (AI> 11 * splitBits) // musí byť 7,8,9,10,11,12.
{
ak (AI> 17 * splitBits) // musí byť 10,11,12.
{
ak (AI> 21 * splitBits) // musí byť 12.
{
vlajka = 12;
}
else // musí byť buď 10.11.
{
ak (AI> 19 * splitBits) // musí byť 11.
{
vlajka = 11;
}
inak // musí byť 10.
{
vlajka = 10;
}
}
}
inak // musí byť 7,8,9.
{
ak (AI> 15 * splitBits) // musí byť 9.
{
vlajka = 9;
}
inak // musí byť 7,8.
{
ak (AI> 13 * splitBits) // musí byť 8.
{
vlajka = 8;
}
inak // musí byť 7.
{
vlajka = 7;
}
}
}
}
inak musí byť 1,2,3,4,5,6.
{
ak (AI> 5 * splitBits) // musí byť 4,5,6.
{
ak (AI> 9 * splitBits) // musí byť 6.
{
vlajka = 6;
}
inak // musí byť 4,5.
{
ak (AI> 7 * splitBits) // musí byť 5
{
vlajka = 5;
}
inak // musia byť 4.
{
vlajka = 4;
}
}
}
inak // musí byť 1,2,3.
{
ak (AI> 3 * splitBits) // musí byť 3.
{
vlajka = 3;
}
inak // musí byť 1,2.
{
ak (AI> splitBits) // musí byť 2.
{
vlajka = 2;
}
inak // musí byť 1.
{
vlajka = 1;
}
}
}
}
}
oldAI = AI;
// oneskorenie (500);
//Serial.println ();
}
selektor voliebSwitch (int AI)
{
ak ((AI> (oldAI + 10)) || (AI <(oldAI - 10))) // // zistiť, či sa hodnota zmenila?
{
ak (AI> 11 * splitBits) // musí byť 7,8,9,10,11,12.
{
ak (AI> 17 * splitBits) // musí byť 10,11,12.
{
ak (AI> 21 * splitBits) // musí byť 12.
{
zviera = 12;
}
else // musí byť buď 10.11.
{
ak (AI> 19 * splitBits) // musí byť 11.
{
zviera = 11;
}
inak // musí byť 10.
{
zviera = 10;
}
}
}
inak // musí byť 7,8,9.
{
ak (AI> 15 * splitBits) // musí byť 9.
{
zviera = 9;
}
inak // musí byť 7,8.
{
ak (AI> 13 * splitBits) // musí byť 8.
{
zviera = 8;
}
inak // musí byť 7.
{
zviera = 7;
}
}
}
}
inak musí byť 1,2,3,4,5,6.
{
ak (AI> 5 * splitBits) // musí byť 4,5,6.
{
ak (AI> 9 * splitBits) // musí byť 6.
{
zviera = 6;
}
inak // musí byť 4,5.
{
ak (AI> 7 * splitBits) // musí byť 5
{
zviera = 5;
}
inak // musia byť 4.
{
zviera = 4;
}
}
}
inak // musí byť 1,2,3.
{
ak (AI> 3 * splitBits) // musí byť 3.
{
zviera = 3;
}
inak // musí byť 1,2.
{
ak (AI> splitBits) // musí byť 2.
{
zviera = 2;
}
inak // musí byť 1.
{
zviera = 1;
}
}
}
}
}
oldAI = AI;
// oneskorenie (500);
//Serial.println ();
}
Ak ste opakovali po majstrovi, teraz je vo vašich rukách rovnaká hračka, s ktorou môžete svoje deti zaujímať o Morseov kód. A keď vyrastú, jednoduchým prepracovaním firmvéru môžete získať základ pre štandardný automatický „líška“, prenášajúci výber MOE, MOI, MOS, MOH alebo MO5, ktorý sa zapína na jednu minútu každé štyri minúty.
PS: najmä pre nudných ľudí, ktorí nájdu chybu v titulkoch: zvieratá sú spoločným názvom pre zvieratá, vtáky a hmyz.