Lukijat tietävät partiolaiset - edelläkävijöidemme analogit, mutta osoittautuu, että on olemassa myös pentuja - analogeja lokakuustamme. Hyväksytty heissä viiden vuoden iästä. Kirjailijan poika Instructsbles lempinimellä mr_fid on jo hyväksytty, ja hänen on osallistuttava ohjaamojen ja partiolaisten suuriin tapahtumiin, joista yksi on Morse-koodi. Lapsen kiinnostamiseksi mestari antoi hänelle epätavallisen lelun.
Se suoritetaan
Työläs Nano ja tuottaa 12 erilaista ääntä piippaukseen sisäänrakennetulla generaattorilla (kytkettävissä mekaanisella kytkimellä) ja RGB-LEDillä. Jakso voidaan säätää välillä 100 - 1100 millisekuntia. Sanojen vaihtamista varten on toimitettu valintakytkin. Suunnittelu toimii 1000 mAh: n litiumpolymeeriparistolla. Latausohjain on sisäänrakennettu. Mutta tässä se ei ole vielä:
Mr_fid kiittää Simon Monkia Arduino Programming -kirjasta, jonka hän osti useita vuosia sitten. Piirrosluonnoksessaan hän luotti esimerkkeihin tästä kirjasta.
Työn aloittaminen
homebrew oksa, isäntä tiesi Morse-koodista vain, että siellä oli SOS-signaali. Minun piti oppia materiaali ja selvittää, että piste on yksi mitta, viiva on kolme, kirjeen merkkien välinen väli on yksi mitta, kirjainten välillä on kolme, sanojen välillä on seitsemän.
Kun merkitset muovia, mr_fid käyttää peiteteippiä. Tämän ansiosta merkkijono näkyy paremmin, jos muovi on tummaa. Lisäksi tämä teippi on mattapintainen ja pora ei luista, kun sitä "kohdistetaan".
On tarpeen etukäteen arvioida, mitkä rakenteen komponentit sijaitsevat, niin että kaikki sopii, eikä mikään komponentti kosketa vierekkäisiä, mukaan lukien ulkonevat osat. Mr_fid ei ole unohtanut mitään muuta kuin ... akku. No, tapaus on melko tilava, ja sitten se löytyi paikalleen. Sillä välin ...
Vaikka päälliköllä on pieni penkkipora, vaikka se käytti porrasporaa helpottamiseksi, se on myös ”kalanruoto” tai “porkkana”.
Kun kahva kääntää nupin kytkimen akselia, kytkimen itsensä on pysyttävä paikallaan. Tätä varten akselin lisäksi sen edessä on pieni tappi, joka vaatii lisäreiän etupaneelissa.
Siksi mr_fid porsi ensin reiän akselille, liimaa sitten peiteteipin takaosaan, laittaa jakoavainkytkin paikoilleen ja puristi sen. Tappi jätti jäljen peiteteippiin, jäljelle jää reikä.
Kaavio ottamatta huomioon akkua, latausohjainta ja muunninta näyttää tältä:
Etupaneelissa, jossa keksintökytkin ja muuttuva vastus sijaitsevat, päällikkö yhdisti näiden komponenttien päätelmät, jotka on kytketty tapauksen piirin samoihin pisteisiin (tässä tapauksessa plus ja yhteinen johdin). Tämän ansiosta etulevyn ja rungon väliin oli mahdollista vetää vain neljä johtoa.
Jakoavainkytkin on myös muutettu eräänlaiseksi muuttuvaksi vastukseksi, vain vaiheeksi, jolle on juotettu 11 vastusta 1 kOhm: lle, kuten valokuvissa näkyy. Arduino määrittää asemansa asteittain vaihtuvalla jännitteellä, jolle yksi analogiatulo riittää.
suurempia:
RGB-LEDin ohjaamiseksi mr_fid valitsi Arduino-nastat numeroilla 9, 10 ja 11. Nämä ovat PWM-lähdöt, jotka seuraavassa laiteohjelmistossa mahdollistavat enemmän bittejä väriä kohti kuin kolme.
Hän yhdisti plus- ja yhteisen johtimen päinvastaisessa napaisuudessa muuttuvaan vastukseen, niin että minimiasento vastaa maksimikauden sykliä, ts. Miniminopeutta.
Esimerkki Simon Monkin oppikirjasta on yksinkertainen ja yksitoiminen: se vie sarjaportin kautta tulevat tiedot ja kääntää ne Morse-koodiksi 200 millisekunnin jaksolla. Ohjatun toiminnon lisäämät lisätoiminnot tarjoavat ajanjakson säätämisen muuttuvan vastuksen moottorista tulevan jännitteen mukaan, samoin kuin sarjaportin kieltäytymisen 12 valintakytkimen valitseman kiinteän sanan tallentamisen puolesta. Lisäsi myös rutiineja RGB LED-tilan kytkentäpainikkeen ohjaamiseksi, ja tweeterillä, jossa on sisäänrakennettu generaattori, ohjelma voisi ohjata aluksi.
Arduinoa ohjelmoidessaan mr_fid unohti kokonaan, että lelu on syötettävä jostakin, koska kortti on ollut koko ajan USB-virtalähteenä. Kun hän muisti, ensimmäinen ajatus oli saada se kaikki voimaan ”Kronasta” stabilisaattorin kautta. Mutta se ei sovi, ja aluksi mestari halusi sijoittaa sen ulkopuolelle, mutta päätti sitten käyttää ohutta litiumpolymeeriparistoa, jonka virta oli 3,7 V ja 1000 mAh.
Äskettäin ladatulla akulla jännite nousee 4,2 V: iin, mikä riittää kaikille RGB-LED-kiteille, mukaan lukien sininen. Mutta purkautuessaan se putoaa, ja vaikka 3,3 V riittää, sinisen valon kirkkaus voi vähentyä huomattavasti. Minun piti käyttää lisävakainta, jonka lähdössä vakaa viide volttia. Ja jotta akkua ei poisteta kotelosta latauksen aikana, kirjoittaja lisäsi latausohjaimen ja kaksinapaisen peruutuskytkimen, joka yhdistää akun molemmilla navoilla joko Arduinoon tai tähän ohjaimeen. Nyt voit ladata lelun USB: ltä.
Hän yhdisti kaiken tämän yhteen tavalla, unohtamatta napaisuutta ja oikosulun estämistä:
Vaihtamalla keksikytkimen asennon, voit valita Morkes-koodin seuraaville kirjainyhdistelmille: HHH (yksi piste), OOO (yksi viiva), CAT (kissa), DOG (koira), ANT (muurahainen), FLY (lentää), RAT (rotta), OWL (pöllö), PIG (sika), HEN (kana), FOX (kettu) ja EMU (emu). Painikkeen avulla voit vaihtaa renkaan RGB-LEDin toimintatapoja: vakiovärit - punainen, sininen, vihreä, sinivihreä, keltainen, vadelma, valkoinen, sekä punainen piste ja vihreä viiva, värimuutos jokaisen sanan jälkeen, värinvaihto jokaisen kirjaimen jälkeen .
Arduinossa mr_fid latasi tällaisen luonnoksen:int dotDelay = 200;
int ledPinRed = 11; // punainen
int ledPinBlue = 10; // sininen
int ledPinGreen = 9; // vihreä
int oldAI = 15;
int pat;
int i = 1;
int j = 0;
tyhjä;
int-painike = 8;
int summeri = 7;
int lippu = 1;
int selectWord;
int eläin = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
const int pot = A4;
const int rotaryInput = A5;
char ch;
char * kirjaimet [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-."
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * numerot [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
tyhjä asennus ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (potti, INPUT);
pinMode (rotaryInput, INPUT);
pinMode (painike, INPUT);
pinMode (summeri, OUTPUT);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, LOW);
viive (500);
digitalWrite (ledPinRed, HIGH);
viive (100);
digitalWrite (ledPinBlue, LOW);
viive (500);
digitalWrite (ledPinBlue, HIGH);
viive (100);
digitalWrite (ledPinGreen, LOW);
viive (500);
digitalWrite (ledPinGreen, HIGH);
viive (100);
digitalWrite (summeri, HIGH);
viive (100);
digitalWrite (summeri, LOW);
int buttonValue = digitalRead (painike);
if (buttonValue == 1)
{
selectWord = analogRead (rotaryInput);
selectorSwitch1 (selectWord);
}
muu
{
lippu = 1;
}
}
tyhjä silmukka ()
{
odota_enter ();
selectWord = analogRead (rotaryInput);
selectorSwitch (selectWord);
potValue = analogRead (pot);
dotDelay = potValue + 100;
i = (eläin * 3) -3;
kun taas (j <3)
{
ch = eläimet3 [i];
if (ch & gt; = 'a' && ch & =; z ')
{
flashSequence (kirjaimet [ch - 'a']);
}
muussa tapauksessa, jos (ch & gt; = '0' && ch & lt; = '9')
{
flashSequence (kirjaimet [ch - '0']);
}
muuten jos (ch == '')
{
viive (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
viive (dotDelay * 7);
// vaihtaa =! vaihtaa; // vaihda väri jokainen sana (ei tarvita)
j on 0;
}
void wait_for_enter ()
{
int buttonValue = digitalRead (painike);
while (buttonValue == 0)
{
buttonValue = digitalRead (painike);
}
}
tyhjä flashSequence (char * -järjestys)
{
int k = 0;
while (sekvenssi [k]! = '\ 0')
{
flashDotOrDash (sekvenssi [k]);
k = k + 1;
}
//Serial.print ("");
viive (dotDelay * 3);
vaihtaa =! vaihtaa; // vaihtaa väriä kirjaimien väliin
}
tyhjä flashDotOrDash (char dotOrDash)
{
if (dotOrDash == '.')
{
if (lippu == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
}
muuten jos (lippu == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinBlue, HIGH);
}
muuten jos (lippu == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinGreen, HIGH);
}
muuten jos (lippu == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
muuten jos (lippu == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
muuten jos (lippu == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
muuten jos (lippu == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
muuten jos (lippu == 8)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
}
muuten jos (lippu == 9)
{
if (vaihtaa! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
}
muu
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay);
digitalWrite (summeri, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
muu
{
if (lippu == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
}
muuten jos (lippu == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinBlue, HIGH);
}
muuten jos (lippu == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinGreen, HIGH);
}
muuten jos (lippu == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
muuten jos (lippu == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
muuten jos (lippu == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
muuten jos (lippu == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
muuten jos (lippu == 8)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinGreen, HIGH);
}
muuten jos (lippu == 9)
{
if (vaihtaa! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinRed, HIGH);
}
muu
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summeri, HIGH);
viive (dotDelay * 3);
digitalWrite (summeri, LOW);
digitalWrite (ledPinBlue, HIGH);
}
}
}
viive (dotDelay); // kirjainten välillä
// vaihtaa =! vaihtaa; // vaihtaa näytön välillä
}
tyhjä valitsinSwitch1 (int AI)
{
if ((AI> (oldAI + 10)) || (AI & lt; (oldAI - 10))) // katso, onko arvo muuttunut?
{
if (AI> 11 * splitBits) // on oltava 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // on oltava 10,11,12.
{
if (AI> 21 * splitBits) // on oltava 12.
{
lippu = 12;
}
else // on oltava joko 10.11.
{
if (AI> 19 * splitBits) // on oltava 11.
{
lippu = 11;
}
else // täytyy olla 10.
{
lippu = 10;
}
}
}
else // on oltava 7,8,9.
{
if (AI> 15 * splitBits) // on oltava 9.
{
lippu = 9;
}
else // on oltava 7.8.
{
if (AI> 13 * splitBits) // on oltava 8.
{
lippu = 8;
}
else // täytyy olla 7.
{
lippu = 7;
}
}
}
}
muuten // on oltava 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // on oltava 4,5,6.
{
if (AI> 9 * splitBits) // on oltava 6.
{
lippu = 6;
}
muuten // on oltava 4,5.
{
if (AI> 7 * splitBits) // on oltava 5
{
lippu = 5;
}
else // täytyy olla 4.
{
lippu = 4;
}
}
}
muuten // on oltava 1,2,3.
{
if (AI> 3 * splitBits) // on oltava 3.
{
lippu = 3;
}
muuten // on oltava 1,2.
{
if (AI> splitBits) // on oltava 2.
{
lippu = 2;
}
else // täytyy olla 1.
{
lippu = 1;
}
}
}
}
}
oldAI = AI;
// viive (500);
//Serial.println ();
}
tyhjä valitsinSwitch (int AI)
{
if ((AI> (oldAI + 10)) || (AI & lt; (oldAI - 10))) // katso, onko arvo muuttunut?
{
if (AI> 11 * splitBits) // on oltava 7,8,9,10,11,12.
{
if (AI> 17 * splitBits) // on oltava 10,11,12.
{
if (AI> 21 * splitBits) // on oltava 12.
{
eläin = 12;
}
else // on oltava joko 10.11.
{
if (AI> 19 * splitBits) // on oltava 11.
{
eläin = 11;
}
else // täytyy olla 10.
{
eläin = 10;
}
}
}
else // on oltava 7,8,9.
{
if (AI> 15 * splitBits) // on oltava 9.
{
eläin = 9;
}
else // on oltava 7.8.
{
if (AI> 13 * splitBits) // on oltava 8.
{
eläin = 8;
}
else // täytyy olla 7.
{
eläin = 7;
}
}
}
}
muuten // on oltava 1,2,3,4,5,6.
{
if (AI> 5 * splitBits) // on oltava 4,5,6.
{
if (AI> 9 * splitBits) // on oltava 6.
{
eläin = 6;
}
muuten // on oltava 4,5.
{
if (AI> 7 * splitBits) // on oltava 5
{
eläin = 5;
}
else // täytyy olla 4.
{
eläin = 4;
}
}
}
muuten // on oltava 1,2,3.
{
if (AI> 3 * splitBits) // on oltava 3.
{
eläin = 3;
}
muuten // on oltava 1,2.
{
if (AI> splitBits) // on oltava 2.
{
eläin = 2;
}
else // täytyy olla 1.
{
eläin = 1;
}
}
}
}
}
oldAI = AI;
// viive (500);
//Serial.println ();
}
Jos toistit mestarin jälkeen, nyt käsissäsi on sama lelu, jolla voit kiinnostaa lapsiasi Morse-koodissa. Ja kun ne kasvavat, yksinkertaisella laiteohjelmistomuutoksella, voit saada perustan tavalliselle automaattiselle kettulle, joka lähettää valinnan MOE, MOI, MOS, MOH tai MO5 ja kytkeytyy päälle minuutiksi joka neljäs minuutti.
Loppusanat etenkin tylsille ihmisille, jotka löytävät otsikoista virheitä: eläimet ovat eläinten, lintujen ja hyönteisten yhteinen nimi.