Læserne kender spejdere - analoger af vores pionerer, men det viser sig, at der også er unger - analoger fra vores oktober. Accepteret i dem fra femårsalderen. Sønnen til forfatteren Instructsbles under kaldenavnet mr_fid er allerede blevet vedtaget, og han bliver nødt til at deltage i en større begivenhed for førerhuse og spejdere, hvoraf den ene er Morse-kode. For yderligere at interessere barnet gav masteren ham et usædvanligt legetøj.
Det henrettes den
Arduino Nano og genererer 12 forskellige ord, der udsendes til bipperen med en indbygget generator (kan skiftes med en mekanisk afbryder) og en RGB LED. Cyklussen kan justeres mellem 100 og 1100 millisekunder. For at skifte ord leveres en opkaldskontakt. Designet drives af et 1000 mAh lithium-polymerbatteri. Ladestyringen er indbygget. Men her er det endnu ikke:
Mr_fid takker Simon Monk for bogen Arduino Programming, som han købte for flere år siden. Ved udarbejdelsen af skitsen stolte han på eksempler fra denne bog.
Start arbejde med
homebrew kvist, mesteren vidste kun om morskode, at der var et SOS-signal. Jeg var nødt til at lære materialet og finde ud af, at punktet er et mål, bindestreget er tre, intervallet mellem tegnene i brevet er et mål, mellem bogstaverne er tre, mellem ordene er syv.
Ved mærkning af plast bruger mr_fid maskeringstape. Takket være dette ses markørsporingen bedre, hvis plasten er mørk. Derudover er dette klæbebånd mat, og boret glider ikke, når det “sigtes”.
Det er nødvendigt på forhånd at estimere, hvor komponenten i strukturen vil være placeret, så alt passer, og ikke en af komponenterne berører de nærliggende, inklusive de fremspringende dele. Mr_fid har ikke glemt andet end ... batteriet. Sagen er ganske rummelig, og derefter blev der fundet et sted til det. I mellemtiden ...
Selvom skibsføreren har en lille bænkboremaskine, selv med den brugte han en trinboremaskine til større bekvemmelighed, men det er også en "sildeben" eller "gulerod".
Når drejekontakten drejes af håndtaget, skal selve kontakten forblive stille. Til dette er der ud over skaftet en lille stift, der kræver et ekstra hul på frontpanelet.
Derfor bor mr_fid først et hul til skaftet, limede derefter maskeringstapen på bagsiden, satte skruenøglen på plads og pressede den. Stiften efterlod et mærke på maskeringsbåndet, det gjenstår at bore et hul der.
Ordningen uden at tage hensyn til batteriet, ladningskontrolleren og konverteren ser sådan ud:
På frontpanelet, hvor kiksafbryderen og den variable modstand er placeret, kombinerede masteren disse konklusioner af disse komponenter, der er forbundet til de samme punkter i kredsløbet i sagen (i dette tilfælde plus og fælles ledning). Dette gjorde det kun muligt at trække fire ledninger mellem frontpanelet og huset.
Skiftenøglen er også omdannet til en slags variabel modstand, kun et trin, hvor 11 modstande pr. 1 kOhm er loddet til, som vist på fotografierne. Arduino bestemmer sin position ved en trinvis skiftende spænding, til hvilken en analog indgang er nok.
større:
For at kontrollere RGB-LED valgte mr_fid Arduino-stifterne med numrene 9, 10 og 11. Dette er PWM-udgange, som i den næste firmware gør det muligt at få flere bit pr. Farve end tre.
Han tilsluttede et plus og en fælles ledning i omvendt polaritet til en variabel modstand, så minimumspositionen svarer til cyklussen med maksimal varighed, det vil sige minimumhastigheden.
Et eksempel fra Simon Monks lærebog er enkel og enkeltfunktionel: den tager data, der kommer ind gennem en seriel port og oversætter dem til morskode med en urcyklus på 200 millisekunder. Yderligere funktioner tilføjet af guiden giver justering af perioden afhængigt af spændingen, der kommer fra den variable modstandsmotor, samt afvisning af den serielle port til fordel for at gemme 12 faste ord valgt af opkaldskontakten. Der blev også tilføjet rutiner til styring af switchknappen RGB-LED-tilstand, godt, og med en tweeter med en indbygget generator kunne programmet først styre.
Når man programmerer Arduino, glemte mr_fid helt, at legetøjet skal fodres fra noget, fordi brættet har været drevet fra USB hele denne tid. Da han huskede, var den første tanke at drive det hele fra “Krona” gennem stabilisatoren. Men det passede ikke, og først ville mesteren placere det udenfor, men besluttede derefter at bruge et tyndt lithium-polymerbatteri med 3,7 V og 1000 mAh.
Med et frisk opladet batteri når spændingen 4,2 V, hvilket er nok til alle krystaller i RGB LED, inklusive blå. Men når det løber ud, falder det, og selv om 3,3 V er nok, kan lysstyrken i blåt lys reduceres meget. Jeg var nødt til at bruge en booststabilisator med stabile fem volt ved output. Og for ikke at fjerne batteriet fra sagen ved opladning tilføjede forfatteren en opladningskontrol og en to-polet omskifter, der forbinder batteriet med begge poler til enten Arduino eller denne controller. Nu kan du oplade legetøjet fra USB.
Han forbandt alt dette sammen på en sådan måde og ikke glemte polariteten og forebyggelsen af kortslutning:
Ved at ændre placering af kiksomskifteren kan du vælge morskode for følgende bogstavkombinationer: HHH (en prik), OOO (et strejf), KAT (kat), HUND (hund), ANT (ant), FLY (flyve), RAT (rotte), UGL (ugle), PIG (svin), HEN (kylling), FOX (ræv) og EMU (emu). Knappen giver dig mulighed for at skifte driftsformer for RGB LED på ringen: konstante farver - rød, blå, grøn, blå-grøn, gul, hindbær, hvid samt en rød prik og en grøn strejf, farveændring efter hvert ord, farveændring efter hvert bogstav .
I Arduino uploadede mr_fid en sådan skitse:int dotDelay = 200;
int ledPinRed = 11; // rød
int ledPinBlue = 10; // blå
int ledPinGreen = 9; // grønt
int oldAI = 15;
int pat;
int i = 1;
int j = 0;
bool toggle = falsk;
int-knap = 8;
int summer = 7;
int flag = 1;
int selectWord;
int dyr = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
const int pot = A4;
const int rotaryInput = A5;
char ch;
char * bogstaver [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-."
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * numre [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
ugyldig opsætning ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (pot, INPUT);
pinMode (rotaryInput, INPUT);
pinMode (knap, INPUT);
pinMode (summer, OUTPUT);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HØJ);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, LOW);
forsinkelse (500);
digitalWrite (ledPinRed, HIGH);
forsinkelse (100);
digitalWrite (ledPinBlue, LOW);
forsinkelse (500);
digitalWrite (ledPinBlue, HØJ);
forsinkelse (100);
digitalWrite (ledPinGreen, LOW);
forsinkelse (500);
digitalWrite (ledPinGreen, HIGH);
forsinkelse (100);
digitalWrite (summer, HØJT);
forsinkelse (100);
digitalWrite (summer, LAV);
int buttonValue = digitalRead (knap);
if (knapværdi == 1)
{
selectWord = analogRead (rotaryInput);
selectorSwitch1 (selectWord);
}
andet
{
flag = 1;
}
}
void loop ()
{
wait_for_enter ();
selectWord = analogRead (rotaryInput);
selectorSwitch (selectWord);
potValue = analogRead (pot);
dotDelay = potValue + 100;
i = (dyr * 3) -3;
mens (j & lt; 3)
{
ch = dyr3 [i];
if (ch & gt; = 'a' && ch & lt; = 'z')
{
flashSequence (bogstaver [ch - 'a']);
}
ellers hvis (ch & gt; = '0' && ch & lt; = '9')
{
flashSequence (bogstaver [ch - '0']);
}
ellers hvis (ch == '')
{
forsinkelse (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
forsinkelse (dotDelay * 7);
// toggle =! toggle; // skift farve hvert ord (ikke nødvendigt)
j er 0;
}
void wait_for_enter ()
{
int buttonValue = digitalRead (knap);
mens (buttonValue == 0)
{
buttonValue = digitalRead (knap);
}
}
void flashSequence (char * -sekvens)
{
int k = 0;
while (rækkefølge [k]! = '\ 0')
{
flashDotOrDash (sekvens [k]);
k = k + 1;
}
//Serial.print ("");
forsinkelse (dotDelay * 3);
toggle =! toggle; // veksle farve mellem bogstaver
}
void flashDotOrDash (char dotOrDash)
{
if (dotOrDash == '.')
{
if (flag == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
}
ellers hvis (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinBlue, HØJ);
}
ellers hvis (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinGreen, HIGH);
}
ellers hvis (flag == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HØJ);
}
ellers hvis (flag == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
ellers hvis (flag == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HØJ);
}
ellers hvis (flag == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HØJ);
digitalWrite (ledPinGreen, HIGH);
}
ellers hvis (flag == 8)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
}
ellers hvis (flag == 9)
{
hvis (skift! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
}
andet
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay);
digitalWrite (summer, LAV);
digitalWrite (ledPinBlue, HØJ);
}
}
}
andet
{
if (flag == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
}
ellers hvis (flag == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinBlue, HØJ);
}
ellers hvis (flag == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinGreen, HIGH);
}
ellers hvis (flag == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HØJ);
}
ellers hvis (flag == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
ellers hvis (flag == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HØJ);
}
ellers hvis (flag == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HØJ);
digitalWrite (ledPinGreen, HIGH);
}
ellers hvis (flag == 8)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinGreen, HIGH);
}
ellers hvis (flag == 9)
{
hvis (skift! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinRed, HIGH);
}
andet
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (summer, HØJT);
forsinkelse (dotDelay * 3);
digitalWrite (summer, LAV);
digitalWrite (ledPinBlue, HØJ);
}
}
}
forsinkelse (dotDelay); // mellem bogstaver
// toggle =! toggle; // veksle mellem caractors
}
void selectorSwitch1 (int AI)
{
hvis ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // // se om værdien er ændret?
{
hvis (AI & gt; 11 * deltBits) // skal være 7,8,9,10,11,12.
{
hvis (AI & gt; 17 * deltBits) // skal være 10,11,12.
{
hvis (AI & gt; 21 * deltBits) // skal være 12.
{
flag = 12;
}
andet // skal være 10.11.
{
hvis (AI & gt; 19 * deltBits) // skal være 11.
{
flag = 11;
}
andet // skal være 10.
{
flag = 10;
}
}
}
andet // skal være 7,8,9.
{
hvis (AI & gt; 15 * deltBits) // skal være 9.
{
flag = 9;
}
andet // skal være 7,8.
{
hvis (AI & gt; 13 * deltBits) // skal være 8.
{
flag = 8;
}
andet // skal være 7.
{
flag = 7;
}
}
}
}
ellers // skal være 1,2,3,4,5,6.
{
hvis (AI & 5; deltBits) // skal være 4,5,6.
{
hvis (AI & gt; 9 * deltBits) // skal være 6.
{
flag = 6;
}
andet // skal være 4,5.
{
hvis (AI & gt; 7 * deltBits) // skal være 5
{
flag = 5;
}
andet // skal være 4.
{
flag = 4;
}
}
}
andet // skal være 1,2,3.
{
hvis (AI & gt; 3 * deltBits) // skal være 3.
{
flag = 3;
}
andet // skal være 1,2.
{
hvis (AI & delt; bit) // skal være 2.
{
flag = 2;
}
ellers // skal være 1.
{
flag = 1;
}
}
}
}
}
oldAI = AI;
// forsinkelse (500);
//Serial.println ();
}
void selectorSwitch (int AI)
{
hvis ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // // se om værdien er ændret?
{
hvis (AI & gt; 11 * deltBits) // skal være 7,8,9,10,11,12.
{
hvis (AI & gt; 17 * deltBits) // skal være 10,11,12.
{
hvis (AI & gt; 21 * deltBits) // skal være 12.
{
dyr = 12;
}
andet // skal være 10.11.
{
hvis (AI & gt; 19 * deltBits) // skal være 11.
{
dyr = 11;
}
andet // skal være 10.
{
dyr = 10;
}
}
}
andet // skal være 7,8,9.
{
hvis (AI & gt; 15 * deltBits) // skal være 9.
{
dyr = 9;
}
andet // skal være 7,8.
{
hvis (AI & gt; 13 * deltBits) // skal være 8.
{
dyr = 8;
}
andet // skal være 7.
{
dyr = 7;
}
}
}
}
ellers // skal være 1,2,3,4,5,6.
{
hvis (AI & 5; deltBits) // skal være 4,5,6.
{
hvis (AI & gt; 9 * deltBits) // skal være 6.
{
dyr = 6;
}
andet // skal være 4,5.
{
hvis (AI & gt; 7 * deltBits) // skal være 5
{
dyr = 5;
}
andet // skal være 4.
{
dyr = 4;
}
}
}
andet // skal være 1,2,3.
{
hvis (AI & gt; 3 * deltBits) // skal være 3.
{
dyr = 3;
}
andet // skal være 1,2.
{
hvis (AI & delt; bit) // skal være 2.
{
dyr = 2;
}
ellers // skal være 1.
{
dyr = 1;
}
}
}
}
}
oldAI = AI;
// forsinkelse (500);
//Serial.println ();
}
Hvis du gentog efter mesteren, er nu i dine hænder det samme legetøj, som du kan interessere dine børn i Morse-kode. Og når de vokser op, med en simpel firmwareændring, kan du få grundlaget for en standard automatisk "ræv", der sender et valg af MOE, MOI, MOS, MOH eller MO5, tændes i et minut hvert fjerde minut.
P. S. især for kedelige mennesker, der finder fejl med overskrifter: dyr er et samlet navn på dyr, fugle og insekter.