Skaitytojai žino skautus - mūsų pionierių analogus, tačiau paaiškėja, kad yra ir jauniklių - mūsų spalio analogų. Juose priimama nuo penkerių metų. Autoriaus sūnus „Instructsbles“, pravarde mr_fid, jau buvo įvaikintas, ir jis turės dalyvauti dideliame kabinų ir skautų renginyje, iš kurių vienas bus Morzės kodas. Norėdami dar labiau sudominti vaiką, meistras padovanojo jam neįprastą žaislą.
Jis vykdomas
Arduino „Nano“ ir generuoja 12 skirtingų žodžių, perduodamų pyptelėjimui, su įmontuotu generatoriumi (perjungiamu mechaniniu jungikliu) ir RGB šviesos diodu. Ciklą galima reguliuoti nuo 100 iki 1100 milisekundžių. Norėdami perjungti žodžius, yra numatytas jungiklis. Dizainas maitinamas 1000 mAh ličio polimero akumuliatoriumi. Įtaisytas įkroviklio valdiklis. Bet čia to dar nėra:
Mr_fid dėkoja Simonui Monkui už knygą „Arduino programavimas“, kurią jis nusipirko prieš keletą metų. Rengdamas eskizą jis rėmėsi šios knygos pavyzdžiais.
Pradėti darbai nuo
naminis, kapitonas apie Morzės kodą žinojo tik tiek, kad yra SOS signalas. Turėjau išmokti medžiagą ir sužinoti, kad taškas yra vienas matas, brūkšnys yra trys, intervalas tarp raidės simbolių yra vienas matas, tarp raidžių yra trys, tarp žodžių yra septyni.
Ženklindamas plastiką, „mr_fid“ naudoja maskavimo juostą. Dėl šios priežasties žymeklio pėdsakai yra geriau matomi, jei plastikas yra tamsus. Be to, ši lipni juosta yra matinė, o grąžtas neslysta „nukreipdamas“.
Būtina iš anksto įvertinti, kur kuris konstrukcijos komponentas bus išdėstytas, kad viskas tilptų, o ne vienas iš komponentų paliestų kaimyninius, įskaitant išsikišančias dalis. Mr_fid nepamiršo nieko, išskyrus ... akumuliatorių. Na, atvejis yra gana erdvus, tada buvo rasta vieta jam. Tuo tarpu ...
Nors meistras turi nedidelį grąžtą suoliuku, net ir didesniam patogumui jis naudojo pakopinį grąžtą, jis taip pat yra „silkės kauliukas“ arba „morka“.
Kai rankenėlės pasukamas rankenėlės jungiklio velenas, pats jungiklis turi likti nejudamas. Tam, be veleno, priešais jį yra mažas kaištis, kuriam reikia papildomos skylės priekiniame skydelyje.
Todėl „mr_fid“ pirmiausia išgręžė skylę velenui, tada klijavo užmaskavimo juostą ant nugaros, padėjo veržliarakčio jungiklį ir paspaudė. Smeigtukas paliko žymę ant maskavimo juostos, belieka ten išgręžti skylę.
Grandinė be akumuliatoriaus, įkrovimo valdiklio ir keitiklio atrodo taip:
Priekiniame skydelyje, kur yra laidinis jungiklis ir kintamasis rezistorius, meistras sujungė tas išvadas apie šias sudedamąsias dalis, kurios yra prijungtos prie tų pačių grandinės taškų byloje (šiuo atveju pliuso ir bendrojo laido). Tai leido tarp priekinio skydo ir korpuso nutempti tik keturis laidus.
Veržliarakčio jungiklis taip pat yra paverstas savotišku kintamuoju rezistoriumi, tik vienu žingsniu, į kurį, kaip parodyta nuotraukose, prie jo yra sudedama 11 varžų 1 kOhm. Arduino nustato savo padėtį laipsniškai kintančia įtampa, kuriai užtenka vieno analoginio įėjimo.
Didesnis:
RGB šviesos diodui valdyti „mr_fid“ pasirinko „Arduino“ kaiščius su skaičiais 9, 10 ir 11. Tai yra PWM išėjimai, kurie kitoje programinėje įrangoje leis gauti daugiau bitų nei viena spalva.
Jis prijungė pliusą ir bendrą laidą atvirkštiniu poliškumu prie kintamo rezistoriaus, kad minimali padėtis atitiktų maksimalios trukmės ciklą, tai yra, mažiausią greitį.
Simono Monko vadovėlyje pateiktas pavyzdys yra paprastas ir vienkartinis: jis paima duomenis, gaunamus per nuoseklųjį prievadą, ir paverčia juos Morzės kodu su 200 milisekundžių ciklu. Vedlio pridėtos papildomos funkcijos suteikia laikotarpio koregavimą atsižvelgiant į įtampą, gaunamą iš kintamo rezistoriaus variklio, taip pat atsisako nuosekliojo prievado saugoti 12 fiksuotų žodžių, pasirinktų rinkimo jungikliu. Taip pat pridėta RGB-LED režimo perjungimo mygtuko valdymo rutina, gerai, o su garsiakalbiu su įmontuotu generatoriumi programa iš pradžių galėtų valdyti.
Programuodamas „Arduino“, „mr_fid“ visiškai pamiršo, kad žaislą reikia tiekti iš ko nors, nes plokštė visą tą laiką buvo maitinama iš USB. Kai jis prisiminė, pirma mintis buvo visa tai įjungti iš „Kronos“ per stabilizatorių. Bet jis netinka, ir iš pradžių meistras norėjo jį pastatyti lauke, bet paskui nusprendė naudoti ploną ličio polimero akumuliatorių, kurio galia būtų 3,7 V ir 1000 mAh.
Su šviežiai įkrauta baterija įtampa siekia 4,2 V, kurios pakanka visiems RGB LED kristalams, įskaitant mėlyną. Bet išsikrovus jis sumažėja ir, nors ir pakanka 3,3 V, mėlynos šviesos ryškumas gali smarkiai sumažėti. Aš turėjau naudoti padidinimo stabilizatorių, kurio išėjimas buvo stabilus penkiais voltais. Ir tam, kad kraunant akumuliatorių neišimtų iš dėklo, autorius pridėjo įkrovimo valdiklį ir dviejų polių atbulinės eigos jungiklį, jungiantį akumuliatorių abiem poliais prie „Arduino“ arba šio valdiklio. Dabar galite įkrauti žaislą iš USB.
Jis visa tai sujungė taip, nepamiršdamas poliškumo ir trumpojo jungimo prevencijos:
Keisdami sausainių jungiklio padėtį, galite pasirinkti Morzės kodą šiems raidžių deriniams: HHH (vienas taškas), OOO (vienas brūkšnys), CAT (katė), DOG (šuo), ANT (skruzdė), FLY (musė), RAT (žiurkė), OWL (pelėda), PIG (kiaulė), HEN (vištiena), FOX (lapė) ir EMU (emu). Mygtukas leidžia perjungti RGB šviesos diodo darbo režimus ant žiedo: pastovios spalvos - raudona, mėlyna, žalia, mėlynai žalia, geltona, avietinė, balta, taip pat raudonas taškas ir žalia brūkšnelis, spalvos pasikeitimas po kiekvieno žodžio, spalvos pasikeitimas po kiekvienos raidės .
Arduino mieste mr_fid įkėlė tokį eskizą:int dotDelay = 200;
int ledPinRed = 11; // raudona
int ledPinBlue = 10; // mėlyna
int ledPinGreen = 9; // žalia
int oldAI = 15;
int pat;
int i = 1;
int j = 0;
bool toggle = klaidinga;
int mygtukas = 8;
vidinis garsinis signalas = 7;
int vėliava = 1;
int selectWord;
int gyvūnas = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
const int puodas = A4;
const int rotaryInput = A5;
char ch;
char * raidės [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. “,
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * skaičiai [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
negaliojanti sąranka ()
{
„pinMode“ (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
„pinMode“ (ledPinGreen, OUTPUT);
pinMode (puodas, INPUT);
pinMode (rotaryInput, INPUT);
pinMode (mygtukas, INPUT);
pinMode (garsinis signalas, OUTPUT);
„digitalWrite“ (ledPinRed, HIGH);
„digitalWrite“ (ledPinBlue, HIGH);
„digitalWrite“ (ledPinGreen, HIGH);
„digitalWrite“ (ledPinRed, LOW);
vėlavimas (500);
„digitalWrite“ (ledPinRed, HIGH);
vėlavimas (100);
„digitalWrite“ (ledPinBlue, LOW);
vėlavimas (500);
„digitalWrite“ (ledPinBlue, HIGH);
vėlavimas (100);
„digitalWrite“ (ledPinGreen, LOW);
vėlavimas (500);
„digitalWrite“ (ledPinGreen, HIGH);
vėlavimas (100);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (100);
„digitalWrite“ (garsinis signalas, žemas);
int buttonValue = digitalRead (mygtukas);
if (buttonValue == 1)
{
selectWord = analogRead (rotaryInput);
selectorSwitch1 (pasirinkite žodį);
}
dar
{
vėliava = 1;
}
}
tuščia kilpa ()
{
laukti_for_enter ();
selectWord = analogRead (rotaryInput);
selectorSwitch (pasirinktiŽodis);
potValue = analogRead (puodas);
dotDelay = potValue + 100;
i = (gyvūnas * 3) -3;
tuo tarpu (j & 3; 3)
{
ch = gyvūnai3 [i];
if (ch & gt; = 'a' && ch & lt; = 'z')
{
„flashSequence“ (raidės [ch - 'a']);
}
dar jei if (ch & gt; = '0' && ch & lt; = '9')
{
„flashSequence“ (raidės [ch - '0']);
}
kitu atveju jei (ch == '')
{
vėlavimas (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
vėlavimas (dotDelay * 7);
// perjungti =! perjungti; // perjungti kiekvieno žodžio spalvą (nereikia)
j yra 0;
}
void wait_for_enter ()
{
int buttonValue = digitalRead (mygtukas);
tuo tarpu (buttonValue == 0)
{
buttonValue = digitalRead (mygtukas);
}
}
void flashSequence (char * seka)
{
int k = 0;
o (seka [k]! = '\ 0')
{
„flashDotOrDash“ (seka [k]);
k = k + 1;
}
//Serial.print ("");
vėlavimas (dotDelay * 3);
perjungti =! perjungti; // perjungti spalvą tarp raidžių
}
negaliojantis „flashDotOrDash“ („char dotOrDash“)
{
if (dotOrDash == '.')
{
if (vėliava == 1)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
}
else if (vėliava == 2)
{
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinBlue, HIGH);
}
else if (vėliava == 3)
{
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinGreen, HIGH);
}
else if (vėliava == 4)
{
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinGreen, HIGH);
„digitalWrite“ (ledPinBlue, HIGH);
}
else if (vėliava == 5)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
„digitalWrite“ (ledPinGreen, HIGH);
}
else if (vėliava == 6)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
„digitalWrite“ (ledPinBlue, HIGH);
}
else if (vėliava == 7)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
„digitalWrite“ (ledPinBlue, HIGH);
„digitalWrite“ (ledPinGreen, HIGH);
}
else if (vėliava == 8)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
}
dar jei (vėliava == 9)
{
if (perjungti! = 0)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
}
dar
{
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinBlue, HIGH);
}
}
}
dar
{
if (vėliava == 1)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
}
else if (vėliava == 2)
{
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinBlue, HIGH);
}
else if (vėliava == 3)
{
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinGreen, HIGH);
}
else if (vėliava == 4)
{
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinGreen, HIGH);
„digitalWrite“ (ledPinBlue, HIGH);
}
else if (vėliava == 5)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
„digitalWrite“ (ledPinGreen, HIGH);
}
else if (vėliava == 6)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
„digitalWrite“ (ledPinBlue, HIGH);
}
else if (vėliava == 7)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
„digitalWrite“ (ledPinBlue, HIGH);
„digitalWrite“ (ledPinGreen, HIGH);
}
else if (vėliava == 8)
{
„digitalWrite“ (ledPinGreen, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinGreen, HIGH);
}
dar jei (vėliava == 9)
{
if (perjungti! = 0)
{
„digitalWrite“ (ledPinRed, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinRed, HIGH);
}
dar
{
„digitalWrite“ (ledPinBlue, LOW);
„digitalWrite“ (garsinis signalas, AUKŠTAS);
vėlavimas (dotDelay * 3);
„digitalWrite“ (garsinis signalas, žemas);
„digitalWrite“ (ledPinBlue, HIGH);
}
}
}
delsimas (dotDelay); // tarp raidžių
// perjungimas =! perjungimas; // perjungimas tarp veikėjų
}
void selectorSwitch1 (vidinė AI)
{
if ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // pažiūrėkite, ar pasikeitė vertė?
{
if (AI> 11 * splitBits) // turi būti 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // turi būti 10,11,12.
{
if (AI> 21 * splitBits) // turi būti 12.
{
vėliava = 12;
}
kitur // turi būti arba 10.11.
{
if (AI> 19 * splitBits) // turi būti 11.
{
vėliava = 11;
}
kitur // turi būti 10.
{
vėliava = 10;
}
}
}
kitur // turi būti 7,8,9.
{
if (AI> 15 * splitBits) // turi būti 9.
{
vėliava = 9;
}
kitur // turi būti 7,8.
{
if (AI> 13 * splitBits) // turi būti 8.
{
vėliava = 8;
}
kitur // turi būti 7.
{
vėliava = 7;
}
}
}
}
kitur // turi būti 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // turi būti 4,5,6.
{
if (AI> 9 * splitBits) // turi būti 6.
{
vėliava = 6;
}
kitur // turi būti 4,5.
{
if (AI> 7 * splitBits) // turi būti 5
{
vėliava = 5;
}
kitur // turi būti 4.
{
vėliava = 4;
}
}
}
kitur // turi būti 1,2,3.
{
if (AI> 3 * splitBits) // turi būti 3.
{
vėliava = 3;
}
kitur // turi būti 1,2.
{
if (AI> splitBits) // turi būti 2.
{
vėliava = 2;
}
kitur // turi būti 1.
{
vėliava = 1;
}
}
}
}
}
oldAI = AI;
// vėlavimas (500);
//Serial.println ();
}
void selectorSwitch (int AI)
{
if ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // pažiūrėkite, ar pasikeitė vertė?
{
if (AI> 11 * splitBits) // turi būti 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // turi būti 10,11,12.
{
if (AI> 21 * splitBits) // turi būti 12.
{
gyvūnas = 12;
}
kitur // turi būti arba 10.11.
{
if (AI> 19 * splitBits) // turi būti 11.
{
gyvūnas = 11;
}
kitur // turi būti 10.
{
gyvūnas = 10;
}
}
}
kitur // turi būti 7,8,9.
{
if (AI> 15 * splitBits) // turi būti 9.
{
gyvūnas = 9;
}
kitur // turi būti 7,8.
{
if (AI> 13 * splitBits) // turi būti 8.
{
gyvūnas = 8;
}
kitur // turi būti 7.
{
gyvūnas = 7;
}
}
}
}
kitur // turi būti 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // turi būti 4,5,6.
{
if (AI> 9 * splitBits) // turi būti 6.
{
gyvūnas = 6;
}
kitur // turi būti 4,5.
{
if (AI> 7 * splitBits) // turi būti 5
{
gyvūnas = 5;
}
kitur // turi būti 4.
{
gyvūnas = 4;
}
}
}
kitur // turi būti 1,2,3.
{
if (AI> 3 * splitBits) // turi būti 3.
{
gyvūnas = 3;
}
kitur // turi būti 1,2.
{
if (AI> splitBits) // turi būti 2.
{
gyvūnas = 2;
}
kitur // turi būti 1.
{
gyvūnas = 1;
}
}
}
}
}
oldAI = AI;
// vėlavimas (500);
//Serial.println ();
}
Jei kartojote paskui meistrą, dabar jūsų rankose yra tas pats žaislas, su kuriuo galite sudominti savo vaikus Morzės kodu. O kai jie užauga, atlikę paprastą programinės aparatinės įrangos perdarymą, galite gauti pagrindą standartiniam automatiniam „lapės“ perdavimui, pasirinkdami MOE, MOI, MOS, MOH ar MO5, įjungdami vieną minutę kas keturias minutes.
P.S. ypač nuobodiems žmonėms, kurie randa klaidą antraštėse: gyvūnai yra bendras gyvūnų, paukščių ir vabzdžių pavadinimas.