Alam ng mga mambabasa ang mga tagasubaybay - analogues ng aming mga payunir, ngunit lumiliko na mayroon ding mga cubs - analogues ng aming Oktubre. Tinanggap sa kanila mula sa limang taon. Ang anak ng may-akda na si Instructsbles sa ilalim ng palayaw na si mr_fid ay na-adopt na, at kakailanganin niyang dumalo sa isang pangunahing kaganapan para sa mga cab at scout, na kung saan ay magiging Morse code. Upang higit na maibahagi ang bata, binigyan siya ng panginoon ng isang hindi pangkaraniwang laruan.
Ito ay naisakatuparan sa
Arduino Nano at bumubuo ng 12 iba't ibang mga output ng salita sa beeper na may built-in na generator (maaaring ilipat ng isang mekanikal na switch) at isang RGB LED. Ang siklo ay maaaring nababagay sa pagitan ng 100 at 1100 millisecond. Upang magpalit ng mga salita, ibinigay ang isang switch ng tinker. Ang disenyo ay pinalakas ng isang baterya na 1000 mAh lithium-polimer. Ang tagapamahala ng singil ay built-in. Ngunit hindi pa ito:
Nagpasalamat si Mr_fid kay Simon Monk sa librong Arduino Programming, na binili niya ilang taon na ang nakalilipas. Sa pagguhit ng sketsa, umasa siya sa mga halimbawa mula sa librong ito.
Simula sa trabaho sa
gawang bahay, alam ng panginoon ang tungkol sa Morse code lamang na mayroong isang signal ng SOS. Kailangang malaman ko ang materyalel at alamin na ang punto ay isang sukatan, ang gitling ay tatlo, ang pagitan ng mga character sa liham ay isang sukatan, sa pagitan ng mga titik ay tatlo, sa pagitan ng mga salita ay pito.
Kapag nagmamarka ng plastic mr_fid ay gumagamit ng masking tape. Salamat sa ito, ang marka ng marker ay mas mahusay na nakikita kung madilim ang plastic. Bilang karagdagan, ang malagkit na tape na ito ay matte, at ang drill ay hindi madulas kapag "targeting".
Kinakailangan na matantya nang maaga kung saan matatagpuan ang mga bahagi ng istraktura, upang ang lahat ay magkasya, at hindi isa sa mga sangkap ang nakakaantig sa mga kapitbahay, kasama na ang mga nakausli na bahagi. Wala nang nakalimutan si Mr_fid kundi ... ang baterya. Sa gayon, ang kaso ay medyo maluwang, at pagkatapos ay isang lugar para sa ito ay natagpuan. Samantala ...
Bagaman ang master ay may isang maliit na bench drill, kahit na kasama niya ay ginamit niya ang isang hakbang na drill para sa kaginhawaan, ito rin ay isang "herringbone" o "carrot".
Kapag ang knob switch shaft ay pinaikot ng hawakan, ang switch mismo ay dapat manatiling nakatigil. Para sa mga ito, bilang karagdagan sa baras, sa harap nito ay isang maliit na pin na nangangailangan ng karagdagang butas sa harap panel.
Samakatuwid, unang nag-drill ng butas para sa baras ang mr_fid, pagkatapos ay nakadikit ang masking tape sa likuran, ilagay ang switch ng wrench at ilagay ito. Iniwan ng pin ang isang marka sa masking tape, nananatili itong mag-drill ng isang butas doon.
Ang scheme nang hindi isinasaalang-alang ang baterya, singil ng controller at converter ay ganito ang hitsura:
Sa harap na panel, kung saan matatagpuan ang switch ng biskwit at ang variable na risistor, pinagsama ng master ang mga konklusyon ng mga sangkap na ito na konektado sa parehong mga punto ng circuit sa kaso (sa kasong ito, ang plus at ang karaniwang wire). Pinapayagan lamang ang apat na mga wire na iguguhit sa pagitan ng front panel at ng pabahay.
Ang wrench switch ay naging isang uri ng variable na risistor, isang hakbang lamang, kung saan 11 mga resistors bawat 1 kOhm ay ibinebenta nito, tulad ng ipinapakita sa mga litrato. Tinutukoy ng Arduino ang posisyon nito sa pamamagitan ng isang sunud-sunod na pagbabago ng boltahe, kung saan sapat ang isang input ng analog.
Mas malaki:
Upang makontrol ang RGB LED, pinili ni mr_fid ang mga Arduino pin na may mga numero 9, 10 at 11. Ito ang mga output ng PWM, na sa susunod na firmware ay gagawing posible upang makakuha ng higit pang mga piraso bawat kulay kaysa sa tatlo.
Ikinonekta niya ang isang plus at isang karaniwang wire sa reverse polarity sa isang variable na risistor, upang ang minimum na posisyon ay tumutugma sa ikot ng maximum na tagal, iyon ay, ang pinakamababang bilis.
Ang isang halimbawa mula sa aklat-aralin ni Simon Monk ay simple at solong-andar: kinakailangan ang data na pumasok sa isang serial port at isinalin ito sa Morse code na may isang ikot ng orasan na 200 millisecond. Ang mga karagdagang pag-andar na idinagdag ng wizard ay nagbibigay ng pagsasaayos ng panahon depende sa boltahe na nagmula sa variable na risistor ng resistor, pati na rin ang pagtanggi ng serial port na pabor sa pag-iimbak ng 12 nakapirming mga salita na pinili ng dial switch. Idinagdag din ang mga gawain para sa pagkontrol sa pindutan ng paglipat ng RGB-LED mode, well, at sa isang tweeter na may built-in na generator, ang programa ay maaaring makontrol sa una.
Kapag nagprograma ng Arduino, ganap na nakalimutan ni mr_fid na ang laruan ay kailangang pakainin mula sa isang bagay, dahil ang board ay pinalakas mula sa USB sa lahat ng oras na ito. Kapag naalala niya, ang unang naisip ay ang kapangyarihan ng lahat mula sa "Krona" sa pamamagitan ng pampatatag. Ngunit hindi ito umangkop, at sa una ay nais ng master na ilagay ito sa labas, ngunit pagkatapos ay nagpasya na gumamit ng isang manipis na baterya ng lithium-polymer na may 3.7 V at 1000 mAh.
Sa isang bagong sisingilin na baterya, ang boltahe ay umaabot sa 4.2 V, na sapat para sa lahat ng mga crystals ng RGB LED, kabilang ang bughaw. Ngunit habang naglalabas ito, bumaba ito, at kahit na ang 3.3 V ay sapat na, ang ningning ng asul na ilaw ay maaaring bumaba nang malaki. Kailangan kong gumamit ng isang pampalakas ng pampalakas na may matatag na limang volts sa output. At upang hindi matanggal ang baterya sa kaso kapag nag-singil, nagdagdag ang may-akda ng isang singil na magsusupil at isang switch ng dalawang re-post na kumokonekta sa baterya na may parehong mga pole sa alinman sa Arduino o ang magsusupil na ito. Ngayon ay maaari mong singilin ang laruan mula sa USB.
Ikinonekta niya ang lahat ng ito nang sa gayon, hindi nakakalimutan ang polarity at ang pag-iwas sa short-circuit:
Sa pamamagitan ng pagpapalit ng posisyon ng switch ng biskwit, maaari mong piliin ang Morse code para sa mga sumusunod na kumbinasyon ng liham: HHH (isang tuldok), OOO (isang dash), CAT (pusa), DOG (aso), ANT (ant), FLY (fly), RAT (rat). OWL (kuwago), PIG (baboy), HEN (manok), FOX (fox) at EMU (emu). Ang pindutan ay nagbibigay-daan sa iyo upang ilipat ang mga operating mode ng RGB LED sa singsing: palagiang kulay - pula, asul, berde, asul-berde, dilaw, raspberry, puti, pati na rin ang isang pulang tuldok at isang berdeng dash, pagbabago ng kulay pagkatapos ng bawat salita, pagbabago ng kulay pagkatapos ng bawat titik .
Sa Arduino, in-upload ni mr_fid ang naturang sketch:int dotDelay = 200;
int ledPinRed = 11; // pula
int ledPinBlue = 10; // asul
int ledPinGreen = 9; // berde
int oldAI = 15;
int pat;
int i = 1;
int j = 0;
bool toggle = false;
int button = 8;
int buzzer = 7;
int flag = 1;
int selectWord;
int hayop = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
const int pot = A4;
const int rotaryInput = A5;
char ch;
char * titik [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * number [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
walang pag-setup ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (palayok, INPUT);
pinMode (rotaryInput, INPUT);
pinMode (pindutan, INPUT);
pinMode (buzzer, OUTPUT);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, LOW);
pagkaantala (500);
digitalWrite (ledPinRed, HIGH);
pagkaantala (100);
digitalWrite (ledPinBlue, LOW);
pagkaantala (500);
digitalWrite (ledPinBlue, HIGH);
pagkaantala (100);
digitalWrite (ledPinGreen, LOW);
pagkaantala (500);
digitalWrite (ledPinGreen, HIGH);
pagkaantala (100);
digitalWrite (buzzer, HIGH);
pagkaantala (100);
digitalWrite (buzzer, LOW);
int buttonValue = digitalRead (button);
kung (buttonValue == 1)
{
selectWord = analogRead (rotaryInput);
selectorSwitch1 (selectWord);
}
iba pa
{
watawat = 1;
}
}
walang bisa loop ()
{
wait_for_enter ();
selectWord = analogRead (rotaryInput);
selectorSwitch (selectWord);
potValue = analogRead (palayok);
dotDelay = potValue + 100;
i = (hayop * 3) -3;
habang (j & lt; 3)
{
ch = mga hayop3 [i];
kung (ch & gt; = 'a' && ch & lt; = 'z')
{
flashSequence (mga titik [ch - 'a']);
}
kung hindi man kung (ch & gt; = '0' && ch & lt; = '9')
{
flashSequence (mga titik [ch - '0']);
}
kung hindi man (ch == '')
{
pagkaantala (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
pagkaantala (dotDelay * 7);
// toggle =! toggle; // i-toggle ang kulay bawat salita (hindi kinakailangan)
j ay 0;
}
walang bisa wait_for_enter ()
{
int buttonValue = digitalRead (button);
habang (buttonValue == 0)
{
buttonValue = digitalRead (button);
}
}
walang bisa flashSequence (pagkakasunod-sunod ng char)
{
int k = 0;
habang (pagkakasunud-sunod [k]! = '\ 0')
{
flashDotOrDash (pagkakasunud-sunod [k]);
k = k + 1;
}
//Serial.print ("");
pagkaantala (dotDelay * 3);
toggle =! toggle; // toggle color beween letters
}
walang bisa flashDotOrDash (char dotOrDash)
{
kung (dotOrDash == '.')
{
kung (bandila == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
}
kung hindi man kung (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinBlue, HIGH);
}
kung hindi man kung (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinGreen, HIGH);
}
kung hindi man (watawat == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
kung hindi man (watawat == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
kung hindi man (flag flag 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
kung hindi man (flag flag 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
kung hindi man (flag flag 8)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
}
kung hindi man (flag flag 9)
{
kung (toggle! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
}
iba pa
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
iba pa
{
kung (bandila == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
}
kung hindi man kung (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinBlue, HIGH);
}
kung hindi man kung (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinGreen, HIGH);
}
kung hindi man (watawat == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
kung hindi man (watawat == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
kung hindi man (flag flag 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
kung hindi man (flag flag 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
kung hindi man (flag flag 8)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinGreen, HIGH);
}
kung hindi man (flag flag 9)
{
kung (toggle! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinRed, HIGH);
}
iba pa
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (buzzer, HIGH);
pagkaantala (dotDelay * 3);
digitalWrite (buzzer, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
pagkaantala (dotDelay); // sa pagitan ng mga titik
// toggle =! toggle; // toggle sa pagitan ng mga caractors
}
walang bisa selectorSwitch1 (int AI)
{
kung ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // tingnan kung nagbago ang halaga?
{
kung (AI & gt; 11 * nahahatiBits) // dapat 7,8,9,10,11,12.
{
kung (AI & gt; 17 * splitBits) // dapat 10,11,12.
{
kung (AI & gt; 21 * splitBits) // dapat 12.
{
watawat = 12;
}
kung hindi man ay dapat na alinman sa 10.11.
{
kung (AI & gt; 19 * nahahatiBits) // dapat 11.
{
watawat = 11;
}
kung hindi man // dapat maging 10.
{
watawat = 10;
}
}
}
kung hindi man // dapat ay 7,8,9.
{
kung (AI & gt; 15 * splitBits) // dapat 9.
{
watawat = 9;
}
kung hindi man ay dapat na 7.8.
{
kung (AI & gt; 13 * nahahatiBits) // dapat 8.
{
watawat = 8;
}
kung hindi man // dapat ay 7.
{
watawat = 7;
}
}
}
}
kung hindi man ay dapat na 1,2,3,4,5,6.
{
kung (AI & gt; 5 * splitBits) // dapat ay 4,5,6.
{
kung (AI & gt; 9 * nahahatiBits) // dapat 6.
{
watawat = 6;
}
kung hindi man ay dapat na 4,5.
{
kung (AI & gt; 7 * splitBits) // dapat 5
{
watawat = 5;
}
kung hindi man ay dapat na 4.
{
watawat = 4;
}
}
}
kung hindi man ay dapat na 1,2,3.
{
kung (AI & gt; 3 * splitBits) // dapat 3.
{
watawat = 3;
}
kung hindi man ay dapat na 1,2.
{
kung (AI & gt; nahahatiBits) // dapat 2.
{
watawat = 2;
}
kung hindi man ay dapat na 1.
{
watawat = 1;
}
}
}
}
}
oldAI = AI;
// pagkaantala (500);
//Serial.println ();
}
walang bisa selectorSwitch (int AI)
{
kung ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // tingnan kung nagbago ang halaga?
{
kung (AI & gt; 11 * nahahatiBits) // dapat 7,8,9,10,11,12.
{
kung (AI & gt; 17 * splitBits) // dapat 10,11,12.
{
kung (AI & gt; 21 * splitBits) // dapat 12.
{
hayop = 12;
}
kung hindi man ay dapat na alinman sa 10.11.
{
kung (AI & gt; 19 * nahahatiBits) // dapat 11.
{
hayop = 11;
}
kung hindi man // dapat maging 10.
{
hayop = 10;
}
}
}
kung hindi man // dapat ay 7,8,9.
{
kung (AI & gt; 15 * splitBits) // dapat 9.
{
hayop = 9;
}
kung hindi man ay dapat na 7.8.
{
kung (AI & gt; 13 * nahahatiBits) // dapat 8.
{
hayop = 8;
}
kung hindi man // dapat ay 7.
{
hayop = 7;
}
}
}
}
kung hindi man ay dapat na 1,2,3,4,5,6.
{
kung (AI & gt; 5 * splitBits) // dapat ay 4,5,6.
{
kung (AI & gt; 9 * nahahatiBits) // dapat 6.
{
hayop = 6;
}
kung hindi man ay dapat na 4,5.
{
kung (AI & gt; 7 * splitBits) // dapat 5
{
hayop = 5;
}
kung hindi man ay dapat na 4.
{
hayop = 4;
}
}
}
kung hindi man ay dapat na 1,2,3.
{
kung (AI & gt; 3 * splitBits) // dapat 3.
{
hayop = 3;
}
kung hindi man ay dapat na 1,2.
{
kung (AI & gt; nahahatiBits) // dapat 2.
{
hayop = 2;
}
kung hindi man ay dapat na 1.
{
hayop = 1;
}
}
}
}
}
oldAI = AI;
// pagkaantala (500);
//Serial.println ();
}
Kung paulit-ulit mong matapos ang panginoon, ngayon sa iyong mga kamay ay ang parehong laruan na maaari mong maakit ang iyong mga anak sa Morse code. At kapag sila ay lumaki, na may isang simpleng pagbabago ng firmware, maaari kang makakuha ng batayan para sa isang karaniwang awtomatikong "fox", na nagpapadala ng isang pagpipilian ng MOE, MOI, MOS, MOH o MO5, na lumiliko sa loob ng isang minuto tuwing apat na minuto.
P.S. lalo na para sa mga taong may pagbubutas na nagkakasala sa mga ulo ng ulo: ang mga hayop ay isang kolektibong pangalan para sa mga hayop, ibon at insekto.