Lasītāji zina skautus - mūsu pionieru analogus, bet izrādās, ka ir arī mazuļi - mūsu oktobra analogi. Tajās pieņemts no piecu gadu vecuma. Autora dēls Instructsbles ar segvārdu mr_fid jau ir adoptēts, un viņam būs jāapmeklē nozīmīgs kabīņu un skautu pasākums, no kuriem viens būs Morzes kods. Lai vēl vairāk ieinteresētu bērnu, meistars viņam uzdāvināja neparastu rotaļlietu.
Tas tiek izpildīts
Arduino Nano un ģenerē 12 dažādus vārdus, kas tiek atskaņoti pīkstienim ar iebūvētu ģeneratoru (pārslēdzamu ar mehānisku slēdzi) un RGB gaismas diodi. Ciklu var noregulēt no 100 līdz 1100 milisekundēm. Lai pārslēgtu vārdus, tiek nodrošināts tinkeris. Dizainu darbina 1000 mAh litija polimēru akumulators. Uzlādes kontrolieris ir iebūvēts. Bet šeit tas vēl nav:
Mr_fid pateicas Simon Monk par grāmatu Arduino Programming, kuru viņš nopirka pirms vairākiem gadiem. Izstrādājot skici, viņš paļāvās uz šīs grāmatas piemēriem.
Sākot darbu pie
mājās gatavots, kapteinis par Morzes kodu zināja tikai to, ka ir SOS signāls. Man nācās iemācīties materiālu un uzzināt, ka punkts ir viens mērs, domuzīme ir trīs, intervāls starp burta burtiem ir viens mērs, starp burtiem ir trīs, starp vārdiem ir septiņi.
Marķējot plastmasu, mr_fid izmanto maskēšanas lenti. Pateicoties tam, marķiera pēdas ir labāk redzamas, ja plastmasa ir tumša. Turklāt šī līmlente ir matēta, un urbis neslīd, kad to “mērķē”.
Iepriekš ir jānovērtē, kurš no konstrukcijas komponentiem atradīsies, lai viss derētu, un nevis kāds no komponentiem pieskaras blakus esošajiem, ieskaitot izvirzītās daļas. Mr_fid neko nav aizmirsis, bet ... akumulatoru. Nu lieta ir diezgan ietilpīga, un tad tam tika atrasta vieta. Pa to laiku ...
Kaut arī meistaram ir mazs stendu urbis, pat ar to ērtības labad viņš izmantoja pakāpju urbi, tas ir arī “siļķu kauls” vai “burkāns”.
Kad kloķa slēdža vārpstu pagriež ar rokturi, pašam slēdzim jāpaliek nekustīgam. Šim nolūkam papildus vārpstai priekšā ir maza tapa, kurai priekšējā panelī ir nepieciešams papildu caurums.
Tāpēc mr_fid vispirms urbja vārpstas caurumu, pēc tam līmēja maskēšanas lenti aizmugurē, ielika atslēgas slēdzi vietā un nospieda. Tapa atstāja atzīmi uz maskēšanas lentes, paliek tur urbt caurumu.
Shēma, neņemot vērā akumulatoru, uzlādes kontrolieri un pārveidotāju, izskatās šādi:
Priekšējā panelī, kur atrodas vadu slēdzis un mainīgs rezistors, meistars apvienoja šos secinājumus par šiem komponentiem, kas ir savienoti ar tiem pašiem ķēdes punktiem lietā (šajā gadījumā plus un kopējais vads). Tas ļāva novilkt tikai četrus vadus starp priekšējo paneli un korpusu.
Uzgriežņu atslēgas slēdzis ir arī pārveidots par sava veida mainīgu rezistoru, tikai vienu soli, kuram tam ir pielodēti 11 rezistori uz 1 kOhm, kā parādīts fotoattēlos. Arduino nosaka savu stāvokli ar pakāpeniski mainīgu spriegumu, kuram pietiek ar vienu analogo ieeju.
Lielāks:
Lai kontrolētu RGB gaismas diodi, mr_fid izvēlējās Arduino piespraudes ar cipariem 9, 10 un 11. Tās ir PWM izejas, kas nākamajā programmaparatūrā ļaus iegūt vairāk bitu vienā krāsā nekā trīs.
Viņš savienoja plusu un kopēju vadu ar apgrieztu polaritāti ar mainīgu rezistoru tā, lai minimālā pozīcija atbilstu maksimālā ilguma ciklam, tas ir, minimālajam ātrumam.
Simona Monka mācību grāmatas piemērs ir vienkāršs un funkcionāls: tas ņem datus, kas ienāk caur seriālo portu, un pārveido tos Morzes kodā ar pulksteņa ciklu 200 milisekundēs. Vedņa pievienotās papildu funkcijas nodrošina perioda pielāgošanu atkarībā no sprieguma, kas nāk no mainīgā rezistora motora, kā arī seriālā porta atteikumu par labu 12 fiksētu vārdu saglabāšanai, kurus izvēlas iezvanes slēdzis. Pievienotas arī kārtības, kā kontrolēt RGB-LED režīma pārslēgšanas pogu, labi, un ar tviteri ar iebūvētu ģeneratoru programma sākotnēji varētu kontrolēt.
Programmējot Arduino, mr_fid pilnībā aizmirsa, ka rotaļlieta ir jābaro no kaut kā, jo tā dēlis visu šo laiku ir bijis barots no USB. Kad viņš atcerējās, pirmā doma bija to visu ieslēgt no “Kronas” caur stabilizatoru. Bet tas nederēja, un sākumā kapteinis gribēja to novietot ārpusē, bet pēc tam nolēma izmantot plānu litija-polimēra akumulatoru ar 3,7 V un 1000 mAh.
Ar svaigi uzlādētu akumulatoru spriegums sasniedz 4,2 V, kas ir pietiekams visiem RGB LED kristāliem, ieskaitot zilo. Bet, izlādējoties, tas nokrīt, un, kaut arī pietiek ar 3,3 V, zilās gaismas spilgtums var ievērojami samazināties. Man bija jāizmanto pastiprināšanas stabilizators ar stabilu piecu voltu pie izejas. Un, lai uzlādes laikā neizņemtu akumulatoru no korpusa, autore pievienoja uzlādes kontrolieri un divpolu atpakaļgaitas slēdzi, kas akumulatoru ar abiem poliem savieno ar Arduino vai šo kontrolieri. Tagad rotaļlietu var uzlādēt no USB.
Viņš to visu savienoja tādā veidā, neaizmirstot par polaritāti un īssavienojuma novēršanu:
Mainot cepumu pārslēga pozīciju, jūs varat izvēlēties Morzes kodu šādām burtu kombinācijām: HHH (viens punkts), OOO (viens domuzīme), CAT (kaķis), SUNS (suns), ANT (skudra), LIDOJUMS (muša), RAT (žurka), OWL (pūce), PIG (cūka), HEN (vistas), FOX (lapsa) un EMS (emu). Poga ļauj pārslēgt gredzena RGB gaismas diodes darbības režīmus: nemainīgas krāsas - sarkana, zila, zaļa, zili zaļa, dzeltena, aveņu, balta, kā arī sarkans punkts un zaļa svītra, krāsas maiņa pēc katra vārda, krāsas maiņa pēc katra burta .
Arduino, mr_fid augšupielādēja šādu skici:int dotDelay = 200;
int ledPinRed = 11; // sarkans
int ledPinBlue = 10; // zils
int ledPinGreen = 9; // zaļš
int oldAI = 15;
int pat;
int i = 1;
int j = 0;
bool toggle = nepatiess;
int poga = 8;
int skaņas signāls = 7;
int karogs = 1;
int selectWord;
int dzīvnieks = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
const int pot = A4;
const int rotaryInput = A5;
char ch;
char * burti [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * skaitļi [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
iestatīšana nav spēkā ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (katls, INPUT);
pinMode (rotaryInput, INPUT);
pinMode (poga, INPUT);
pinMode (skaņas signāls, OUTPUT);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, LOW);
kavēšanās (500);
digitalWrite (ledPinRed, HIGH);
kavēšanās (100);
digitalWrite (ledPinBlue, LOW);
kavēšanās (500);
digitalWrite (ledPinBlue, HIGH);
kavēšanās (100);
digitalWrite (ledPinGreen, LOW);
kavēšanās (500);
digitalWrite (ledPinGreen, HIGH);
kavēšanās (100);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (100);
digitalWrite (skaņas signāls, LOW);
int buttonValue = digitalRead (poga);
if (buttonValue == 1)
{
selectWord = analogRead (rotaryInput);
selectorSwitch1 (selectWord);
}
cits
{
karogs = 1;
}
}
tukšs cilpa ()
{
pagaidīt_for_enter ();
selectWord = analogRead (rotaryInput);
selectorSwitch (selectWord);
potValue = analogRead (pot);
dotDelay = potValue + 100;
i = (dzīvnieks * 3) -3;
kamēr (j & lt; 3)
{
ch = dzīvnieki3 [i];
if (ch & gt; = 'a' && ch & lt; = 'z')
{
flashSequence (burti [ch - 'a']);
}
citādi, ja (ch & gt; = '0' && ch & lt; = '9')
{
flashSequence (burti [ch - '0']);
}
cits, ja (ch == '')
{
kavēšanās (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
kavēšanās (dotDelay * 7);
// pārslēgt =! pārslēgt; // katra vārda pārslēgšana (nav nepieciešama)
j ir 0;
}
anulēt nogaidīšanas_formu ()
{
int buttonValue = digitalRead (poga);
kamēr (buttonValue == 0)
{
buttonValue = digitalRead (poga);
}
}
void flashSequence (char * secība)
{
int k = 0;
kamēr (secība [k]! = '\ 0')
{
flashDotOrDash (secība [k]);
k = k + 1;
}
//Serial.print ("");
kavēšanās (dotDelay * 3);
pārslēgt =! pārslēgt; // pārslēgt krāsu starp burtiem
}
anulēt flashDotOrDash (char dotOrDash)
{
if (dotOrDash == '.')
{
if (karodziņš == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
}
cits, ja (karodziņš == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinBlue, HIGH);
}
cits, ja (karodziņš == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinGreen, HIGH);
}
cits, ja (karodziņš == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
cits, ja (karodziņš == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
cits, ja (karodziņš == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
cits, ja (karodziņš == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
cits, ja (karodziņš == 8)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
}
cits, ja (karodziņš == 9)
{
if (pārslēgt! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
}
cits
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
cits
{
if (karodziņš == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
}
cits, ja (karodziņš == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinBlue, HIGH);
}
cits, ja (karodziņš == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinGreen, HIGH);
}
cits, ja (karodziņš == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
cits, ja (karodziņš == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
cits, ja (karodziņš == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
cits, ja (karodziņš == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
cits, ja (karodziņš == 8)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinGreen, HIGH);
}
cits, ja (karodziņš == 9)
{
if (pārslēgt! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinRed, HIGH);
}
cits
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (skaņas signāls, AUGSTS);
kavēšanās (dotDelay * 3);
digitalWrite (skaņas signāls, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
kavēšanās (dotDelay); // starp burtiem
// pārslēgšana =! pārslēgšana; // pārslēgšana starp karatoriem
}
tukšs atlasītājsSlēdzis1 (int. AI)
{
if ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // apskatiet, vai vērtība ir mainījusies?
{
if (AI> 11 * splitBits) // jābūt 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // jābūt 10,11,12.
{
if (AI> 21 * splitBits) // jābūt 12.
{
karogs = 12;
}
cits // jābūt vai nu 10.11.
{
if (AI> 19 * splitBits) // jābūt 11.
{
karogs = 11;
}
cits // jābūt 10.
{
karogs = 10;
}
}
}
cits // jābūt 7,8,9.
{
if (AI> 15 * splitBits) // jābūt 9.
{
karogs = 9;
}
cits // jābūt 7.8.
{
if (AI> 13 * splitBits) // jābūt 8.
{
karogs = 8;
}
cits // jābūt 7.
{
karogs = 7;
}
}
}
}
cits // jābūt 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // jābūt 4,5,6.
{
if (AI> 9 * splitBits) // jābūt 6.
{
karogs = 6;
}
cits // jābūt 4,5.
{
if (AI> 7 * splitBits) // jābūt 5
{
karogs = 5;
}
cits // jābūt 4.
{
karogs = 4;
}
}
}
cits // jābūt 1,2,3.
{
if (AI> 3 * splitBits) // jābūt 3.
{
karogs = 3;
}
cits // jābūt 1,2.
{
if (AI> splitBits) // jābūt 2.
{
karogs = 2;
}
cits // jābūt 1.
{
karogs = 1;
}
}
}
}
}
oldAI = AI;
// kavēšanās (500);
//Serial.println ();
}
tukšs atlasītājsSlēdzis (int AI)
{
if ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // apskatiet, vai vērtība ir mainījusies?
{
if (AI> 11 * splitBits) // jābūt 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // jābūt 10,11,12.
{
if (AI> 21 * splitBits) // jābūt 12.
{
dzīvnieks = 12;
}
cits // jābūt vai nu 10.11.
{
if (AI> 19 * splitBits) // jābūt 11.
{
dzīvnieks = 11;
}
cits // jābūt 10.
{
dzīvnieks = 10;
}
}
}
cits // jābūt 7,8,9.
{
if (AI> 15 * splitBits) // jābūt 9.
{
dzīvnieks = 9;
}
cits // jābūt 7.8.
{
if (AI> 13 * splitBits) // jābūt 8.
{
dzīvnieks = 8;
}
cits // jābūt 7.
{
dzīvnieks = 7;
}
}
}
}
cits // jābūt 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // jābūt 4,5,6.
{
if (AI> 9 * splitBits) // jābūt 6.
{
dzīvnieks = 6;
}
cits // jābūt 4,5.
{
if (AI> 7 * splitBits) // jābūt 5
{
dzīvnieks = 5;
}
cits // jābūt 4.
{
dzīvnieks = 4;
}
}
}
cits // jābūt 1,2,3.
{
if (AI> 3 * splitBits) // jābūt 3.
{
dzīvnieks = 3;
}
cits // jābūt 1,2.
{
if (AI> splitBits) // jābūt 2.
{
dzīvnieks = 2;
}
cits // jābūt 1.
{
dzīvnieks = 1;
}
}
}
}
}
oldAI = AI;
// kavēšanās (500);
//Serial.println ();
}
Ja jūs atkārtojāt pēc kapteiņa, tagad jūsu rokās ir tā pati rotaļlieta, ar kuru jūs varat ieinteresēt savus bērnus Morzes kodā. Un, kad viņi izaug, ar vienkāršu programmaparatūras pārtaisīšanu jūs varat iegūt standarta automātiskās "lapsas" pamatu, pārraidot izvēli MOE, MOI, MOS, MOH vai MO5, ieslēdzot vienu minūti ik pēc četrām minūtēm.
P.S. īpaši garlaicīgiem cilvēkiem, kuri vaino virsrakstus: dzīvnieki ir kopīgs dzīvnieku, putnu un kukaiņu nosaukums.