Priešgaisrinės saugos enciklopedija

Arduino: ką su juo galima padaryti. Neįprasti „Arduino Uno Designs“ projektai „Arduino“.

Kaip pasirinkti ArduinoŠis klausimas kyla visiems, kurie pirmą kartą nusprendė sukurti projektą naudodami Arduino. Apsisprendėme dėl reikalingų detalių: jutiklių, jutiklių, modulių ir t.t., susidūrėme su nemažu Arduino plokščių asortimentu, be to, kiekviena plokštė turi ir du ar tris analogus. Kai kurie žmonės mano, kad kuo brangesnis ir galingesnis, tuo geriau, jie gauna rimtus sprendimus, tokius kaip Arduino Due, ir tada supranta, kad ne visi eskizai tinka, ir jiems sunku susidoroti su visa to galia. įrenginį savarankiškai. Kiti eina priešingu keliu ir pritrūksta išteklių (atminties, kontaktų, prievadų, laikrodžio greičio, galios). Kaip rasti tą aukso vidurį“ Pabandykime tai išsiaiškinti...

Mokėti privalumus Minusai

Arduino Uno

tokias funkcijas kaip ProMini ir Nano
  • Lenta yra labiausiai paplitusi Arduino šeimoje, būtent jai sukurta daugiausiai pamokų.
  • Dėl DIP skydelio galite pakeisti mikrovaldiklį
  • Su tokiomis pačiomis funkcijomis kaip Arduino ProMini, Nano ir Micro, plokštė yra daug kartų didesnė

Arduino Mega 2560

  • Tinkamas skydas, sukurtas pagal Arduino UNO
  • Maksimalus išėmimų skaičius
  • Išplėstas visų tipų atminties kiekis
  • Neįmanoma įdiegti „Breadboard“ nenaudojant laidų

Arduino Leonardo

tokias funkcijas kaip MICRO

  • Tinkamas skydas, sukurtas pagal Arduino UNO
  • Plokštė yra patobulinta Arduino UNO versija ir veikia su dauguma jos eskizų.
  • Neįmanoma įdiegti „Breadboard“ nenaudojant laidų
  • Kai kurie eskizai, sukurti „Arduino Uno“, neveikia „Leonardo“. naudojami įvairūs mikrovaldikliai

Arduino Due


  • Smeigtukų, tokių kaip Arduino Mega, skaičius
  • Įdiegti du analoginiai išėjimai
  • Naudojamas galingas 32 bitų mikrovaldiklis, kurio laikrodžio dažnis yra 84 MHz
  • Neįmanoma įdiegti „Breadboard“ nenaudojant laidų
  • Didžiausias lentos dydis visoje Arduino šeimoje
  • Ne visi eskizai suteikia tokį aukštą laikrodžio dažnį
  • Ne visi skydai numatyti 3,3 V ribinės įtampos signalų perdavimą
  • Maitinimo įtampa 3,3V

Arduino ProMini 3.3V

tokias funkcijas kaip Nano ir UNO


  • Mažiausias mikrovaldiklio laikrodžio dažnis, tik 8 MHz
  • Maitinimo įtampa 3,3V

Arduino ProMini 5V

tokias funkcijas kaip Nano ir UNO

  • Galima naudoti kuriant diagramas ant duonos lentos
  • Mažiausia lenta Arduino šeimoje
  • Tiekiamas be lituotų kaiščių, todėl galima montuoti ant paviršiaus
  • Netinka skydas, sukurtas pagal Arduino UNO
  • Nėra USB valdiklio, todėl reikalingas išorinis programuotojas

Arduino NANO V3.0

tokias funkcijas kaip ProMini ir UNO


  • Galima naudoti kuriant diagramas ant duonos lentos
  • Plokštė yra šiek tiek didesnė nei Arduino ProMini, tačiau turi USB prievadą ir nereikia naudoti išorinio programuotojo.
  • Netinka skydas, sukurtas pagal Arduino UNO
  • Įdiegus USB prievadą su valdikliu, padidėjo įkrovos įkrovikliui skirtos „flash“ atminties kiekis (palyginti su „Arduino ProMini“).

Arduino Micro

funkcionalumas kaip Leonardo


  • Galima naudoti kuriant diagramas ant duonos lentos
  • Plokštė yra šiek tiek didesnė nei „Arduino Nano“, tačiau turi visas „Arduino Leonardo“ funkcijas.
  • Galima imituoti įvairius USB įrenginius prijungus prie kompiuterio (plokštė bus apibrėžiama kaip pelė, klaviatūra ir kt.)
  • Netinka skydas, sukurtas pagal Arduino UNO
  • USB valdiklio funkcijos perkėlimas į mikrovaldiklį padidino įkrovos įkrovikliui skirtos „flash“ atminties kiekį

Pirmasis klausimas, turintis įtakos Arduino pasirinkimui Kokį projektą norite įgyvendinti?

Jei norite sukurti paruoštą projektą, kurį maloniai pateikė kiti kūrėjai, logiškas įsigijimas būtų „Arduino“, kuriame projektas buvo sukurtas iš pradžių. Čia verta paminėti faktą, kad dabar Rusijos Federacijos teritorijoje Arduino plokštės platinamos prekės ženklu Geduino . Tai yra, kaip teisingai supratote, „Arduino Micro“ skiriasi nuo „Geduino Micro“ pavadinimu ir logotipu (tai nėra analogas), kurie parašyti oficialioje svetainėje. O kadangi pastaroji pigesnė, pasirinkimas akivaizdus.

Jei neapsisprendėte dėl projekto, bet norite įsigyti Arduino savo eksperimentams, tuomet svarbus veiksnys yra skirtingų pavyzdžių skaičius tinkle, vienam ar kitam Arduino. Čia neabejotinas lyderis yra Arduino UNO , taip yra dėl to, kad ši lenta yra seniausia Arduino linijoje, nors ir nėra pasenusi, nes nuo pat įkūrimo buvo atlikta nemažai pakeitimų.

Jei ketinate įgyvendinti savo projektą, tada Arduino pasirinkimas turėtų būti vertinamas taikant pašalinimo metodą. Jei jūsų projekte yra modulių su „Arduino Uno“ kaiščiais, neįtraukiame „Arduino ProMini 3.3V“, „Arduino ProMini 5V“, analogiškų „Arduino Nano“), tačiau jie gali turėti kitokio tipo USB jungtį, šiek tiek skirtis dydžiu, turėti kitokį USB valdiklį, kitokio tipo mikrovaldiklio korpusą, plokštės spalvą ir t.t. Čia reikia suprasti, kad šios plokštės pakartoja savo originalo (į kurią jos panašios pavadinimu) funkcionalumą, nes jose naudojamas tas pats tos pačios serijos ATmega mikrovaldiklis. Plokštės matmenis, mikrovaldiklio korpusą ir USB prievado tipą galima nustatyti iš nuotraukos. O „CH340G“ buvimas pavadinime reiškia, kad kaip USB valdiklis naudojamas ne standartinis Arduino FTDI lustas, o jo analogas CH340G, todėl norint tokį Arduino prijungti prie kompiuterio, reikia įdiegti tvarkyklę. CH340G lustas. Šios plokštės tinka tiems, kurie mano, kad vienkartinis tvarkyklės įdiegimas nėra nepatogumas, o sumažinta kaina yra pranašumas prieš originalų pavadinimą.

Straipsnių ir vadovėlių serija su Arduino radijo mėgėjų eksperimentais pradedantiesiems. Tai toks mėgėjiškas radijo žaisliukas-konstruktorius, iš kurio be lituoklio, spausdintinių plokščių ėsdinimo ir panašiai, bet koks elektronikos virdulys gali surinkti visavertį darbinį įrenginį, tinkantį tiek profesionaliam prototipų kūrimui, tiek mėgėjiškiems eksperimentams studijuoja elektroniką.


„Arduino“ plokštė skirta pirmiausia mokyti pradedančiuosius radijo mėgėjus mikrovaldiklių programavimo pagrindų ir savo rankomis be rimto teorinio pasirengimo kurti mikrovaldiklių įrenginius. Arduino kūrimo aplinka leidžia kompiliuoti ir įkelti į plokštės atmintį paruoštą programos kodą. Be to, atsisiųsti kodą yra labai paprasta.

Arduino kur pradėti pradedantiesiems

Visų pirma, norint dirbti su „Arduino“ plokšte, pradedantysis elektronikos inžinierius turi atsisiųsti „Arduino“ kūrimo programą, kurią sudaro įmontuotas teksto redaktorius, kuriame dirbame su programos kodu, pranešimų sritis, teksto išvesties langas (konsolė ), įrankių juosta su dažnai naudojamų komandų mygtukais ir keliais meniu. Norėdami atsisiųsti savo programas ir bendrauti, ši programa yra prijungta prie Arduino plokštės per standartinį USB kabelį.


Arduino aplinkoje parašytas kodas vadinamas eskizas. Jis parašytas teksto rengyklėje, kurioje yra specialūs įrankiai tekstui įterpti / iškirpti, pakeisti / ieškoti. Išsaugant ir eksportuojant pranešimų srityje (žr. paveikslėlį pirmoje pamokoje pradedantiesiems, žemiau) rodomi paaiškinimai, taip pat gali būti rodomos klaidos. Konsolė rodo Arduino pranešimus, įskaitant visas klaidų ataskaitas ir kitą naudingą informaciją. Įrankių juostos mygtukai leidžia patikrinti ir įrašyti eskizą, atidaryti, sukurti ir išsaugoti jį, atidaryti nuosekliosios magistralės stebėjimą ir dar daugiau.

Taigi, pereikime prie pirmosios Arduino grandinės pamokos pradedantiesiems elektronikos inžinieriams.

Pradedančiųjų patogumui Arduino UNO valdiklis jau turi varžą ir šviesos diodą, prijungtą prie jungties 13 kaiščio, todėl pirmame eksperimente mums nereikia jokių išorinių radijo elementų.


Įkeldamas kodą, Arduino leidžia mūsų programai dalyvauti sistemos inicijavime. Norėdami tai padaryti, nurodome mikrovaldikliui komandas, kurias jis vykdys pradinio įkrovimo metu, o tada visiškai jas pamirštame (t. y. šias komandas Arduino vykdys tik vieną kartą paleidžiant). Ir būtent šiuo tikslu savo kode skiriame bloką, kuriame saugomos šios komandos. negaliojantis nustatymas (), tiksliau toje erdvėje, esančioje šios funkcijos garbanotųjų breketų viduje, žiūrėkite programavimo eskizą.

Nepamirškite garbanotų petnešėlių! Praradus net vieną iš jų, visas eskizas visiškai neveiks. Tačiau taip pat nedėkite papildomų skliaustų, nes taip pat įvyks klaida.

Kodo atsisiuntimas:
Eskizas su komentarais ir paaiškinimais faile 001-1_mig-led.ino

Funkcija void loop ()čia pateikiame komandas, kurios veiks tol, kol bus įjungtas „Arduino“. Pradėjęs vykdyti nuo pirmosios komandos, „Arduino“ pasieks pačią pabaigą ir iškart pereis į pradžią, kad kartotų tą pačią seką. Ir taip be galo daug kartų, kol lenta gauna galią. Iš esmės tuštumos kilpa yra pagrindinė funkcija, įėjimo į Arduino taškas.


Funkcija delsimas(1000) vėluoja programos apdorojimą 1000 milisekundžių. Visa tai vyksta amžinu ciklu kilpa ().

Pagrindinė išvada po mūsų pirmosios programos Arduino suvokimo: Tuščiosios kilpos ir void setup funkcijų pagalba perduodame savo instrukcijas mikrovaldikliui. Viskas, kas yra sąrankos bloke, bus vykdoma tik vieną kartą. Ciklo modulio turinys bus kartojamas cikle tol, kol Arduino bus įjungtas.

Ankstesnėje programoje tarp šviesos diodo įsijungimo ir išjungimo buvo vienos sekundės delsa. Paprasčiausiame aukščiau naudotame naujoko arduinisto kode buvo vienas didelis minusas. Norėdami išlaikyti pauzę tarp šviesos diodo įjungimo ir išjungimo per vieną sekundę, pritaikėme funkciją delsimas() ir todėl tuo momentu valdiklis nepajėgus vykdyti kitų komandų pagrindinėje funkcijoje kilpa (). Kodo taisymas funkcijoje kilpa () išsprendžia šią problemą.

Užuot nustatę reikšmę į HIGH ir tada į LOW, gauname ledPin reikšmę ir ją apverčiame. Tarkime, jei jis buvo AUKŠTAS, tada jis taps LOW ir pan.

Antra arduino kodo variantas valdyti LEDČia:

Tada galite pakeisti funkciją delsimas(). Vietoj to geriau naudoti funkciją milis (). Jis grąžina milisekundžių skaičių, praėjusį nuo programos pradžios. Funkcija persipildys maždaug po 50 dienų nuo kodo vykdymo.

Panaši funkcija yra mikros (), kuris grąžina mikrosekundžių skaičių, praėjusį nuo kodo paleidimo. Funkcija grįš į nulį po 70 minučių nuo programos vykdymo.

Žinoma, tai mūsų eskizą papildys keliomis kodo eilutėmis, tačiau tai tikrai padarys jus labiau patyrusiu programuotoju ir padidins jūsų Arduino potencialą. Norėdami tai padaryti, jums tereikia išmokti naudoti „mis“ funkciją.

Reikėtų aiškiai suprasti, kad paprasčiausia delsos funkcija sustabdo visos Arduino programos vykdymą, todėl per šį laikotarpį ji negali atlikti jokių užduočių. Užuot pristabdę visas programas, galime suskaičiuoti, kiek laiko praėjo iki veiksmo pabaigos. Tai puikiai įgyvendinama naudojant funkciją millis (). Kad viskas būtų lengvai suprantama, apsvarstysime šią parinktį, kaip LED mirksėti be laiko.

Šios programos pradžia yra tokia pati kaip ir bet kurio kito standartinio Arduino eskizo.


Šiame pavyzdyje naudojamos dvi Arduino skaitmeninės įvesties / išvesties. Šviesos diodas prijungtas prie 8 kaiščio, kuris sukonfigūruotas kaip IŠĖJIMAS. Mygtukas yra prijungtas prie 9 per, kuris sukonfigūruotas kaip INPUT. Kai paspaudžiame mygtuką, 9 kaištis nustatomas į HIGH, o programa perjungia 8 kaištį į HIGH, taip įjungdama LED. Atleidus mygtuką, devintasis išėjimas iš naujo nustatomas į LOW būseną. Tada kodas perjungia 8 kaištį į LOW ir išjungia indikatoriaus lemputę.

Norėdami valdyti penkis šviesos diodus, naudosime įvairias manipuliacijas su Arduino prievadais. Norėdami tai padaryti, mes tiesiogiai įrašysime duomenis į Arduino prievadus, tai leis jums nustatyti šviesos diodų reikšmes naudodami tik vieną funkciją.

Arduino UNO turi tris prievadus: B(skaitmeniniai įėjimai/išėjimai nuo 8 iki 13); C(analoginiai įėjimai); D(Skaitmeniniai įėjimai/išėjimai nuo 0 iki 7)

Kiekvienas prievadas valdo tris registrus. Pirmasis DDR nurodo, ar kaištis bus įvestis ar išvestis. Antrojo PORT registro pagalba galite nustatyti kaištį į HIGH arba LOW būseną. Trečiojo pagalba galite perskaityti informaciją apie Arduino kojų būklę, jei jos veikia kaip įvestis.

Grandinės veikimui naudosime prievadą B. Norėdami tai padaryti, nustatykite visus prievado kaiščius kaip skaitmeninius išėjimus. Prievadas B iš viso turi 6 kaiščius. DDRB registro bitai turi būti nustatyti "1" jei kaištis bus naudojamas kaip IŠVESTIS, ir į "0" jei planuojame naudoti kaištį kaip įvestį (INPUT). Prievado bitai sunumeruoti nuo 0 iki 7, bet ne visada turi visus 8 kontaktus

Tarkim: DDRB = B00111110;// nustatyti prievado B kaiščius nuo 1 iki 5 kaip išėjimus ir 0 kaip įvestį.

Bėgimo žibintų grandinėje naudojame penkis išėjimus: DDRB = B00011111; // kaip išvestis nustatykite prievado B kaiščius nuo 0 iki 4.

Norėdami įrašyti duomenis į prievadą B, turite naudoti PORTB registrą. Pirmąjį šviesos diodą galite uždegti naudodami valdymo komandą: PORTB=B00000001;, pirmasis ir ketvirtas šviesos diodas: PORTB=B00001001 ir taip toliau

Yra du dvejetainiai poslinkio operatoriai: į kairę ir į dešinę. Kairiojo poslinkio operatorius priverčia visus duomenų bitus atitinkamai perkelti į kairę, o dešiniojo poslinkio operatorius perkelia juos į dešinę.

Pavyzdys:

varA = 1; // 00000001
varA = 1 varA = 1 varA = 1

Dabar grįžkime prie mūsų programos šaltinio kodo. Turime įvesti du kintamuosius: aukštyn žemyn bus įtrauktos reikšmės, kur judėti - aukštyn arba žemyn, o antrasis cylon parodys, kuris šviesos diodas užsidegs.

Struktūriškai toks šviesos diodas turi vieną bendrą išvestį ir tris išėjimus kiekvienai spalvai. Žemiau pateikiama RGB LED prijungimo prie Arduino plokštės su bendru katodu schema. Visi prijungimo grandinėje naudojami rezistoriai turi būti vienodos vertės nuo 220-270 omų.


Norint prisijungti prie bendro katodo, trijų spalvų šviesos diodo prijungimo schema bus beveik tokia pati, išskyrus tai, kad bendras kaištis bus prijungtas ne prie žemės (įrenginyje gnd), o prie +5 voltų gnybto. Raudona, žalia ir mėlyna išėjimai abiem atvejais yra prijungti prie valdiklio 9, 10 ir 11 skaitmeninių išėjimų.

Prijunkite išorinį šviesos diodą prie devinto Arduino UNO kaiščio per 220 omų varžą. Norėdami sklandžiai valdyti pastarojo ryškumą, naudojame funkciją analogWrite(). Jis suteikia PWM signalo išvestį į valdiklio koją. Ir komanda pinMode () skambinti nereikia. Nes analogWrite(pin, vertė) apima du parametrus: pin – išvesties PIN kodą, reikšmę – reikšmę nuo 0 iki 255.

Kodas:
/*
Pradedančiojo arduino mokymo pavyzdys atskleidžia analogWrite () komandos galimybes įgyvendinti šviesos diodo fade efektą
*/
int ryškumas = 0; // LED ryškumas
int fadeSuma = 5; // ryškumo žingsnis
nepasirašytas ilgas srovės laikas;
unsigned long loopTime;

Tuščia sąranka() (
pinMode(9, OUTPUT); // nustatykite 9 kaištį kaip išvestį
currentTime = milis();
loopTime = currentTime;
}

void loop() (
currentTime = milis();
if(currentTime >= (loopTime + 20))(
analogWrite(9, ryškumas); // nustatykite 9 kaiščio vertę

Ryškumas = ryškumas + fadeAmount; // pridėkite ryškumo keitimo žingsnį, kuris bus nustatytas kitame cikle

// jei min. arba maks. reikšmės, tada einame priešinga kryptimi (atvirkščiai):
if (ryškumas == 0 || ryškumas == 255) (
fadeAmount = -fadeAmount ;
}
loopTime = currentTime;
}
}

Veikia Arduino su koduotuvu

Kodavimo įrenginys skirtas sukimosi kampą paversti elektriniu signalu. Iš jo gauname du signalus (A ir B), kurių fazė yra priešinga. Šioje pamokoje naudosime kodavimo įrenginį SparkFun COM-09117, kuris turi dvylika padėčių vienam apsisukimui (kiekviena padėtis yra lygiai 30°). Žemiau pateiktame paveikslėlyje aiškiai parodyta, kaip išėjimas A ir B priklauso vienas nuo kito, kai kodavimo įrenginys juda pagal arba prieš laikrodžio rodyklę.

Jei signalas A pereina nuo teigiamo iki nulio, skaitome išėjimo B reikšmę. Jei B išėjimas tuo metu yra teigiamos būsenos, tai daviklis juda pagal laikrodžio rodyklę, jei B išveda nulinį lygį, tai koderis juda į priešinga kryptimi. Nuskaitę abu išėjimus, galime mikrovaldiklio pagalba apskaičiuoti sukimosi kryptį, o skaičiuodami impulsus nuo kodavimo įrenginio A išėjimo – sukimosi kampą.

Jei reikia, galite naudoti dažnio skaičiavimą, kad nustatytumėte, kaip greitai sukasi koduotuvas.

Naudodami kodavimo programą mūsų vadovėlyje, mes valdysime šviesos diodo ryškumą naudodami PWM išvestį. Norėdami nuskaityti duomenis iš kodavimo įrenginio, naudosime metodą, pagrįstą programinės įrangos laikmačiais, kurį jau aptarėme.

Įvertinus tai, kad greičiausiu atveju kodavimo rankenėlę 180° galime pasukti per 1/10 sekundės, tai bus 6 impulsai per 1/10 sekundės arba 60 impulsų per vieną sekundę.

Realiai suktis greičiau neįmanoma. Kadangi turime sekti visus pusciklus, dažnis turėtų būti apie 120 Hz. Norėdami įsitikinti, paimkime 200 Hz.

Kadangi šiuo atveju naudojame mechaninį kodavimo įrenginį, galimas kontaktinis atšokimas, o žemas dažnis puikiai išfiltruoja tokį atšokimą.


Pagal programinės įrangos laikmačio signalus reikia nuolat lyginti esamą kodavimo įrenginio išėjimo A reikšmę su ankstesne verte. Jei būsena pasikeičia iš teigiamos į nulį, tada apklausiame išėjimo B būseną. Priklausomai nuo būsenos apklausos rezultato, padidiname arba sumažiname LED šviesumo vertės skaitiklį. Programos kodas su maždaug 5 ms (200 Hz) laiko intervalu parodytas žemiau:

Arduino pradedančiųjų kodas:
/*
** Encoder
** Šviesos diodo ryškumui valdyti naudojamas Sparkfun kodavimo įrenginys
*/

int ryškumas = 120; // LED ryškumas, pradedant nuo pusės
int fadeSuma = 10; // ryškumo žingsnis
nepasirašytas ilgas srovės laikas;
unsigned long loopTime;
const int pin_A = 12; // 12 kaištis
const int pin_B = 11; // 11 kaištis
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
negalioja sąranka()(
// paskelbti, kad 9 kaištis yra išvestis:
pinMode(9, OUTPUT); // nustatykite 9 kaištį kaip išvestį
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
currentTime = milis();
loopTime = currentTime;
}
void loop() (
currentTime = milis();
if(currentTime >= (loopTime + 5))( // tikrinti būsenas kas 5 ms (dažnis 200 Hz)
encoder_A = skaitmeninisRead(pin_A); // nuskaityti kodavimo įrenginio išvestį A būsena
encoder_B = skaitmeninisRead(pin_B); // kodavimo įrenginio išvestis B
if((!encoder_A) && (encoder_A_prev))( // jei būsena pasikeičia iš teigiamos į nulį
if(encoder_B) (
// Išėjimas B yra teigiamas, todėl sukimas vyksta pagal laikrodžio rodyklę
// padidinkite švytėjimo ryškumą, ne daugiau kaip 255
jei (ryškumas + išnykimo kiekis)
Kitas(
// išvestis B yra nulinėje būsenoje, todėl sukimas vyksta prieš laikrodžio rodyklę
// sumažinti ryškumą, bet ne žemiau nulio
if(brightness - fadeAmount >= 0) brightness -= fadeAmount;
}

}
encoder_A_prev = koduotojas_A; // išsaugokite A reikšmę kitai kilpai

analogWrite(9, ryškumas); // nustatykite ryškumą iki devintojo kaiščio

LoopTime = currentTime;
}
}

Šiame pradedančiųjų pavyzdyje apžvelgsime darbą su pjezo garsiakalbiu, kad sukurtume garsus. Norėdami tai padaryti, paimkite pjezoelektrinį keitiklį, kuris leidžia generuoti garso bangas 20 Hz - 20 kHz dažnių diapazone.

Tai toks mėgėjiškas radijo dizainas, kuriame šviesos diodai yra visame garse. Naudodami šią schemą galite sukurti įvairius apšvietimo ir animacijos efektus. Sudėtingos schemos netgi gali rodyti įvairius trimačius žodžius. Kitaip tariant, tai yra elementarus erdvinis monitorius

Servo yra pagrindinis elementas įvairių radijo bangomis valdomų modelių konstrukcijoje, o jo valdymas valdikliu yra paprastas ir patogus.


Valdymo programa paprasta ir intuityvi. Pradedama prijungus failą, kuriame yra visos reikalingos komandos servo valdymui. Tada sukuriame servo objektą, pvz., servoMain. Kita setup() funkcija, kurioje nurodome, kad servo yra prijungtas prie devinto valdiklio išėjimo.

Kodas:
/*
Arduino servo
*/
#įtraukti
Servo pagrindinis; // Servo objektas

Tuščia sąranka ()
{
servoMain.attach(9); // Servo prijungtas prie 9 kaiščio
}

Tuščia kilpa ()
{
servoMain.write(45); // Pasukite servo į kairę 45°
delsimas (2000); // Palaukite 2000 milisekundžių (2 sekundes)
servoMain.write(0); // Pasukti servo į kairę 0°
delsimas (1000); // Pauzė 1s.

delsimas (1500); // Palaukite 1,5 sek.
servoMain.write(135); // Pasukite servo į dešinę 135°
delsimas (3000); // Pauzė 3 s.
servoMain.write(180); // Pasukite servo į dešinę 180°
delsimas (1000); // Palauk 1s.
servoMain.write(90); // Pasukite servo 90°. centrinė padėtis
delsimas (5000); // Pauzė 5 s.
}

Pagrindinėje funkcijoje kilpa (), duodame komandas servovarikliui su pauzėmis tarp jų.

Arduino skaitiklio grandinė ant 7 segmentų indikatoriaus

Šis paprastas Arduino projektas pradedantiesiems yra sukurti skaitiklio grandinę bendrame katodo 7 segmentų ekrane. Žemiau esantis kodas leidžia pradėti skaičiuoti nuo 0 iki 9 paspaudus mygtuką.

Septynių segmentų indikatorius - tai 8 šviesos diodų (paskutinysis atsakingas už tašką) derinys su bendru katodu, kurį galima įjungti norima seka, kad jie sukurtų skaičius. Reikėtų pažymėti, kad šioje grandinėje, žiūrėkite paveikslėlį žemiau, 3 ir 8 kaiščiai yra skirti katodui.


Dešinėje yra lentelė, rodanti „Arduino“ kaiščių ir LED indikatoriaus kaiščių susiejimą.

Šio projekto kodas:

baitų skaičiai = (
B11111100, B01100000, B11011010, B11110010, B01100110,
B10110110, B10111110, B11100000, B11111110, B11100110
};
negalioja sąranka()(
for(int i = 2; i pinMode(i, OUTPUT);
}
pinMode(9, INPUT);
}
int skaitiklis = 0;
bool go_by_switch = tiesa;
int paskutinė_įvesties_vertė = LOW;
void loop() (
if(go_by_switch) (
int switch_input_value = digitalRead(9);
if(paskutinė įvesties_vertė == LOW && switch_input_value == AUKŠTA) (

}
paskutinė_įvesties_vertė = switch_input_value;
) Kitas (
delsimas (500);
skaitiklis = (skaitiklis + 1) % 10;
}
rašytiSkaičius(skaitiklis);
}

Tuščias rašymo skaičius(int number) (
jei(skaičius 9) (
grąžinti;
}
bytemask = skaičiai;
baito srovėPinMask = B10000000;
for(int i = 2; i if(mask & currentPinMask) digitalWrite(i,HIGH);
kitur skaitmeninisWrite(i,LOW);
currentPinMask = currentPinMask >> 1;
}
}

Galite žymiai išplėsti Arduino plokščių potencialą papildomų modulių pagalba, kuriuos galima prijungti prie beveik bet kurio įrenginio PIN išėjimų. Apsvarstykite populiariausius ir įdomiausius išplėtimo modulius arba, kaip jie dar vadinami, skydus.

Arduino delsa vaidina labai svarbų vaidmenį. Be jų negali veikti net paprasčiausias Blink pavyzdys, kuris po nurodyto laiko sumirksi šviesos diodu. Tačiau dauguma pradedančiųjų programuotojų mažai žino apie laiko vėlavimą ir naudoja tik Arduino delsą, nežinodami apie šios komandos šalutinį poveikį. Šiame straipsnyje išsamiai papasakosiu apie laikinas funkcijas ir jų naudojimo ypatybes Arduino IDE kūrimo aplinkoje.

„Arduino“ turi keletą skirtingų komandų, atsakingų už darbą su laiku ir pauzėmis:

  • delsimas()
  • delsimas mikrosekundės ()
  • milis ()
  • mikros ()

Jie skiriasi tikslumu ir turi savo ypatybes, į kurias reikėtų atsižvelgti rašant kodą.

Naudojant arduino delsos funkciją

Sintaksė

Arduino delsa yra paprasčiausia komanda ir dažniausiai naudojama pradedantiesiems. Tiesą sakant, tai yra delsa, kuri pristabdo programą tiek milisekundžių, kiek nurodyta skliausteliuose. (Vienoje sekundėje yra 1000 milisekundžių.) Didžiausia reikšmė gali būti 4294967295 ms, o tai yra maždaug 50 dienų. Pažvelkime į paprastą pavyzdį, iliustruojantį, kaip ši komanda veikia.

Void setup() ( pinMode(13, OUTPUT); ) void loop() ( digitalWrite(13, HIGH); // signalo pin 13 high delay (10000); // pauzė 10000ms arba 10 sekundžių digitalWrite13, LOW); // siųsti žemą signalą į pin 13 delay(10000); // pristabdyti 10 000 ms arba 10 sekundžių)

Pagal metodą sąranka nurodome, kad 13 kaištis bus naudojamas kaip išvestis. Pagrindinėje programos dalyje pirmiausia kaiščiui perduodamas aukštas signalas, tada darome 10 sekundžių delsą. Šiuo metu atrodo, kad programa sustabdyta. Tada duodamas žemas signalas ir vėl uždelsimas ir viskas prasideda iš naujo. Dėl to gauname, kad kaištis tiekiamas pakaitomis, tada 5 V, tada 0.

Turite aiškiai suprasti, kad per pauzę naudojant delsą programa sustabdoma, programa negaus jokių duomenų iš jutiklių. Tai yra didžiausias Arduino delsos funkcijos naudojimo trūkumas. Šį apribojimą galite apeiti naudodami pertraukimus, tačiau apie tai kalbėsime atskirame straipsnyje.

Vėlavimo pavyzdys su mirksinčiu šviesos diodu

Diagramos pavyzdys, iliustruojantis, kaip veikia delsos funkcija.
Galite sukurti grandinę su šviesos diodu ir rezistoriumi. Tada gauname standartinį pavyzdį – mirksi šviesos diodas. Norėdami tai padaryti, ant kaiščio, kurį nurodėme kaip išvestį, turite prijungti šviesos diodą su teigiamu kontaktu. Laisvąją šviesos diodo koją per maždaug 220 omų rezistorių (gali būti šiek tiek daugiau) sujungiame su žeme. Galite nustatyti poliškumą, jei pažvelgsite į jo vidų. Didelis puodelis viduje yra prijungtas prie minuso, o maža kojelė - su pliusu. Jei jūsų LED yra naujas, poliškumą galite nustatyti pagal laidų ilgį: ilga kojelė yra pliusas, trumpa - minusas.

uždelsimo mikrosekundžių funkcija

Ši funkcija yra visiškas delsos analogas, išskyrus tai, kad jos vienetai yra ne milisekundės, o mikrosekundės (1000000 mikrosekundžių per 1 sekundę). Didžiausia vertė bus 16383, tai yra 16 milisekundžių. Skiriamoji geba yra 4, tai reiškia, kad skaičius visada bus keturių kartotinis. Fragmento pavyzdys atrodytų taip:

DigitalWrite(2, AUKŠTAS); // siųsti 2 kaištį didelis vėlavimasMicroseconds(16383); // pauzė 16383µs digitalWrite(2, LOW); // siųsti žemą signalą į 2 kontaktą delayMicroseconds(16383); // pauzė 16383µs

Problema su delayMicroseconds lygiai tokia pati, kaip ir su uždelsimu – šios funkcijos visiškai „užkabina“ programą ir ji trumpam tiesiogine prasme užšąla. Šiuo metu neįmanoma dirbti su prievadais, skaityti informaciją iš jutiklių ir atlikti matematinius veiksmus. Blykstėms ši parinktis tinka, tačiau patyrę vartotojai jos nenaudoja dideliems projektams, nes tokių gedimų ten nereikia. Todėl daug geriau naudoti toliau aprašytas funkcijas.

mis funkcija vietoj delsos

Funkcija millis () leis jums nedelsiant atlikti arduino delsą ir taip apeiti ankstesnių metodų trūkumus. Maksimali millis parametro reikšmė yra tokia pati kaip delsos funkcijai (4294967295ms arba 50 dienų).

Naudodami milis nesustabdome viso eskizo vykdymo, o tiesiog nurodome, kiek laiko arduino turėtų tiesiog „apeiti“ būtent kodo bloką, kurį norime pristabdyti. Skirtingai nei delsimas, milis savaime nieko nesustabdo. Ši komanda tiesiog grąžina mums iš įtaisyto mikrovaldiklio laikmačio milisekundžių skaičių, kuris praėjo nuo pradžios. Su kiekvienu iškvietimu į kilpą Mes patys matuojame laiką, praėjusį nuo paskutinio mūsų kodo iškvietimo, o jei laiko skirtumas yra mažesnis už norimą pauzę, kodą ignoruojame. Kai tik skirtumas tampa didesnis nei norima pauze, vykdome kodą, gauname esamą laiką naudodami tuos pačius milius ir prisimename – šis laikas bus naujas atskaitos taškas. Kitame cikle atgalinis skaičiavimas jau bus nuo naujo taško ir mes vėl nepaisysime kodo, kol naujas skirtumas tarp mili ir mūsų anksčiau išsaugotos reikšmės vėl pasieks norimą pauzę.

Norint nedelsiant atidėti su milis, reikia daugiau kodo, tačiau jis gali mirksėti šviesos diodu ir pristabdyti eskizą nestabdydamas sistemos.

Štai pavyzdys, aiškiai iliustruojantis komandos darbą:

nepasirašytas ilgas laikas; // Kintamasis atskaitos taško saugojimui void setup() ( Serial.begin(9600); ) void loop() ( /* Čia prasideda delay() analogo vykdymas. Apskaičiuokite skirtumą tarp dabartinio ir ankstesnio momento išsaugotas atskaitos taškas. Jei skirtumas didesnis nei Jei ne, nieko nedarykite */ if (millis() - laikas > 10000)( // Vietoj 10000 pakeiskite reikiamą pauzės reikšmę timing = millis(); Serial. println ( "10 sekundžių") ;)))

Pirmiausia pristatome laiko kintamąjį, kuris išsaugos milisekundžių skaičių. Pagal numatytuosius nustatymus kintamojo reikšmė yra 0. Pagrindinėje programos dalyje patikriname sąlygą: jei milisekundžių skaičius nuo mikrovaldiklio pradžios atėmus į laiko kintamąjį įrašytą skaičių yra didesnis nei 10000, tada Veiksmas atliekamas norint išvesti pranešimą į prievado monitorių, o dabartinė laiko reikšmė įrašoma į kintamąjį. Dėl programos veikimo prievado monitoriuje kas 10 sekundžių bus rodomas pranešimas 10 sekundžių. Šis metodas leidžia nedelsdamas mirksėti šviesos diodu.

mikros funkcija vietoj delsos

Ši funkcija taip pat gali atidėti nenaudodama uždelsimo komandos. Jis veikia lygiai taip pat, kaip milis, tačiau skaičiuoja ne milisekundes, o mikrosekundes su 4 µs skiriamąja geba. Didžiausia jo reikšmė yra 4294967295 mikrosekundės arba 70 minučių. Perpildymo atveju vertė tiesiog iš naujo nustatoma į 0, nepamirškite to.

Santrauka

Arduino platforma suteikia mums keletą būdų, kaip įgyvendinti mūsų projekto vėlavimą. Uždelsdami galite greitai pristabdyti eskizo vykdymą, tačiau tuo pačiu metu blokuoti mikrovaldiklio veikimą. Naudodami komandą millis galite atsikratyti Arduino delsos, tačiau tam reikia šiek tiek daugiau programavimo. Pasirinkite geriausią metodą, atsižvelgdami į jūsų projekto sudėtingumą. Paprastai paprastuose eskizuose ir su mažesniu nei 10 sekundžių vėlavimu naudojamas delsimas. Jei operacijų logika sudėtingesnė ir reikalingas didelis delsimas, tai geriau naudoti milis, o ne delsą.

Šis simuliatorius geriausiai veikia „Chrome“ naršyklėje
Pažvelkime į Arduino atidžiau.

Arduino nėra didelis kompiuteris, prie kurio galima prijungti išorines grandines. Arduino Uno naudoja Atmega 328P
Tai didžiausias lustas lentoje. Šis lustas vykdo programas, kurios yra saugomos jo atmintyje. Programą galite atsisiųsti per usb naudodami Arduino IDE. USB prievadas taip pat aprūpina arduino maitinimą.

Yra atskiras maitinimo lizdas. Plokštėje yra du išėjimai, pažymėti 5v ir 3,3v, kurie reikalingi įvairiems įrenginiams maitinti. Taip pat rasite kaiščius, pažymėtus GND, tai yra įžeminimo kaiščiai (žemė yra 0 V). Arduino platforma taip pat turi 14 skaitmeninių kaiščių (smeigtukų), pažymėtų skaičiais nuo 0 iki 13, kurie jungiasi prie išorinių mazgų ir turi dvi būsenas – aukštą arba žemą (įjungta arba išjungta). Šie kontaktai gali veikti kaip išėjimai arba kaip įėjimai, t.y. jie gali perduoti kai kuriuos duomenis ir valdyti išorinius įrenginius arba gauti duomenis iš įrenginių. Šie lentos kaiščiai pažymėti A0-A5. Tai analoginiai įėjimai, galintys priimti duomenis iš įvairių jutiklių. Tai ypač naudinga, kai reikia išmatuoti tam tikrą diapazoną, pvz., temperatūrą. Analoginiai įėjimai turi papildomų funkcijų, kurias galima aktyvuoti atskirai.

Kaip naudotis duonos lenta.

Duonos lenta skirta laikinai sujungti dalis ir išbandyti, kaip veikia įrenginys, prieš viską lituojant.
Visi toliau pateikti pavyzdžiai yra surinkti ant duonos lentos, kad galėtumėte greitai pakeisti grandinę ir pakartotinai panaudoti dalis be vargo lituojant.

Duoninėje lentoje yra eilės skylių, į kurias galite įkišti dalis ir laidus. Kai kurios iš šių skylių yra elektra sujungtos viena su kita.

Dvi viršutinė ir apatinė eilės yra sujungtos nuosekliai išilgai visos lentos. Šios eilutės naudojamos grandinės maitinimui tiekti. Tai gali būti 5v arba 3,3v, bet bet kuriuo atveju pirmiausia reikia prijungti 5v ir GND prie duonos plokštės, kaip parodyta. Kartais šios eilučių jungtys gali būti nutrauktos lentos viduryje, tada, jei reikia, galite jas sujungti, kaip parodyta paveikslėlyje.








Likusios skylės, esančios lentos viduryje, yra sugrupuotos į penkias skyles. Jie naudojami grandinės dalims sujungti.


Pirmas dalykas, kurį prijungsime prie savo mikrovaldiklio, yra šviesos diodas. Sujungimo schema parodyta paveikslėlyje.

Kokia rezistoriaus paskirtis grandinėje? Šiuo atveju jis riboja srovę, kuri praeina per šviesos diodą. Kiekvienas šviesos diodas yra skirtas tam tikrai srovei, o jei ši srovė yra didesnė, šviesos diodas suges. Galite sužinoti, kokios vertės rezistorius turėtų būti, naudodamiesi omo įstatymu. Tiems, kurie nežino arba pamiršo, Ohmo dėsnis sako, kad tarp srovės ir įtampos yra tiesinis ryšys. Tai yra, kuo didesnę įtampą įjungsime į rezistorių, tuo daugiau srovės tekės per jį.
V=I*R
Kur V- įtampa per rezistorių
- srovė per rezistorių
R yra pasipriešinimas, kurį reikia rasti.
Pirmiausia turime išsiaiškinti rezistoriaus įtampą. Dauguma naudojamų 3 mm arba 5 mm šviesos diodų turi 3 V darbinę įtampą. Taigi, rezistorius turime sumokėti 5-3 \u003d 2v.

Tada apskaičiuojame srovę, praeinančią per rezistorių.
Dauguma 3 ir 5 mm šviesos diodų šviečia visu ryškumu, esant 20 mA. Didesnė nei ši srovė gali juos sunaikinti, o mažesnė srovė sumažins jų ryškumą nesukeldama jokios žalos.

Taigi, mes norime įjungti šviesos diodą 5 V grandinėje, kad jo srovė būtų 20 mA. Kadangi visos dalys yra įtrauktos į vieną grandinę, rezistorius taip pat turės 20 mA srovę.
Mes gauname
2V = 20mA*R
2V=0,02A*R
R = 100 omų

100 omų yra minimali varža, geriau naudoti šiek tiek daugiau, nes šviesos diodų charakteristikos šiek tiek skiriasi.
Šiame pavyzdyje naudojamas 220 omų rezistorius. Tik todėl, kad autorius jų turi daug :wink: .

Įkiškite šviesos diodą į plokštės viduryje esančias skylutes, kad jos ilgas laidas būtų prijungtas prie vieno iš rezistoriaus laidų. Kitą rezistoriaus galą prijunkite prie 5 V, o kitą šviesos diodo galą prijunkite prie GND. LED turi užsidegti.

Atkreipkite dėmesį, kad LED prijungimo būdas skiriasi. Srovė teka iš ilgesnio laido į trumpesnį laidą. Diagramoje galima įsivaizduoti, kad srovė teka ta kryptimi, į kurią nukreiptas trikampis. Pabandykite apversti šviesos diodą ir pamatysite, kad jis nešvies.

Bet kaip prijungsite rezistorių, nėra jokio skirtumo. Galite jį apversti arba pabandyti prijungti prie kitokio LED išėjimo, tai neturės įtakos grandinės veikimui. Jis vis tiek apribos srovę per šviesos diodą.

Arduino eskizo anatomija.

„Arduino“ programos vadinamos eskizais. Jie atlieka dvi pagrindines funkcijas. Funkcija sąranka ir funkcija kilpa
šios funkcijos viduje nustatysite visus pagrindinius nustatymus. Kurie išėjimai veiks kaip įvestis ar išvestis, kurias bibliotekas prijungti, inicijuokite kintamuosius. Funkcija Sąranka () paleidžiama tik vieną kartą eskizo metu, kai prasideda programos vykdymas.
tai yra pagrindinė funkcija, kuri atliekama po to setup (). Tiesą sakant, tai yra pati programa. Ši funkcija veiks neribotą laiką, kol išjungsite maitinimą.

Arduino mirksi LED



Šiame pavyzdyje mes prijungsime LED grandinę prie vieno iš Arduino skaitmeninių kontaktų ir įjungsime bei išjungsime ją naudodami programą, taip pat išmoksime keletą naudingų funkcijų.

Ši funkcija naudojama setup () yra programos dalis ir naudojama inicijuoti kaiščius, kuriuos naudosite kaip įvestį (INPUT) arba išeiti (IŠVADA). Negalėsite nuskaityti ar rašyti duomenų iš kaiščio, kol jo atitinkamai nenustatysite pinMode. Ši funkcija turi du argumentus: PIN kodas yra PIN kodas, kurį naudosite.

režimu- nustato, kaip kaištis veiks. Prie įėjimo (INPUT) arba išeiti (IŠVADA). Norėdami užsidegti šviesos diodą, turime duoti signalą NUO Arduino. Norėdami tai padaryti, sukonfigūruojame kaištį, kad išeitų.
- ši funkcija naudojama būsenai nustatyti (valstybė) pina (PIN kodas). Yra dvi pagrindinės būsenos (paprastai jų yra 3), viena yra AUKŠTAS, ant kaiščio bus 5v, kitas yra žemas ir kaištis bus 0v. Taigi, norėdami apšviesti šviesos diodą, turime nustatyti aukštą lygį ant kaiščio, prijungto prie šviesos diodo AUKŠTAS.

Delsimas. Atidėti programą tam tikram laikotarpiui, nurodytam ms.
Žemiau yra kodas, dėl kurio LED mirksi.
//LED Blink int ledPin = 7;//Arduino kaištis, prie kurio prijungtas šviesos diodas void setup() ( pinMode(ledPin, OUTPUT);// nustatyti kaištį kaip OUTPUT ) void loop() ( digitalWrite(ledPin, HIGH);/ / įjungti LED delsą (1000);// delsimas 1000 ms (1 sek) digitalWrite(ledPin, LOW);// Išjunkite LED delsą (1000);// palaukite 1 sek.

Maži kodo paaiškinimai.
Eilutės, prasidedančios raide „//“, yra komentarai, kurių „Arduino“ nepaiso.
Visos komandos baigiasi kabliataškiu, jei pamiršite, gausite klaidos pranešimą.

ledPin yra kintamasis. Kintamieji yra naudojami programose reikšmėms saugoti. Šiame pavyzdyje kintamasis ledPin priskirta reikšmė 7, tai yra Arduino PIN kodas. Kai programoje esantis Arduino atitinka eilutę su kintamuoju ledPin, bus naudojama anksčiau nurodyta vertė.
Taigi įrašyk pinMode (ledPin, OUTPUT) panašus į įrašą pinMode (7, IŠvestis).
Tačiau pirmuoju atveju tereikia pakeisti kintamąjį ir jis keisis kiekvienoje eilutėje, kurioje jis naudojamas, o antruoju atveju, norint pakeisti kintamąjį, kiekvienoje komandoje turėsite atlikti pakeitimus su rankenomis.

Pirmoje eilutėje nurodomas kintamojo tipas. Programuojant Arduino, svarbu visada deklaruoti kintamųjų tipą. Kol tu tai žinai INT deklaruoja neigiamus ir teigiamus skaičius.
Žemiau yra eskizo modeliavimas. Paspauskite pradėti, kad pamatytumėte, kaip veikia grandinė.

Kaip ir tikėtasi, šviesos diodas išsijungia ir įsijungia po vienos sekundės. Pabandykite pakeisti delsą, kad pamatytumėte, kaip jis veikia.

Kelių šviesos diodų valdymas.

Šiame pavyzdyje sužinosite, kaip valdyti kelis šviesos diodus. Norėdami tai padaryti, plokštėje įdiekite dar 3 šviesos diodus ir prijunkite juos prie Arduino rezistorių ir kaiščių, kaip parodyta žemiau.

Norėdami paeiliui įjungti ir išjungti šviesos diodus, turite parašyti programą, panašią į šią:
//Multi LED Blink int led1Pin = 4; int led2Pin = 5; intled3Pin = 6; int led4Pin = 7; void setup() ( //nustatyti kaiščius kaip OUTPUT pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); ) void loop() ( digitalWrite(led1Pin, HIGH) );//šviesos šviesos diodo delsa (1000);//uždelskite 1 sek. digitalWrite(led1Pin, LOW);//išjunkite LED delsą (1000);//uždelskite 1 sek. //padarykite tą patį su kitais 3 šviesos diodais digitalWrite( led2Pin , HIGH); // įjunkite šviesos diodo delsą (1000);// uždelskite 1 sek. digitalWrite (led2Pin, LOW);// išjunkite LED delsą (1000);// uždelskite 1 sek. digitalWrite (led3Pin, HIGH) ;// įjunkite LED delsą (1000);// uždelskite 1 sek. digitalWrite(led3Pin, LOW);// išjunkite LED delsą (1000);// uždelskite 1 sek. digitalWrite(led4Pin, HIGH);// įjunkite LED delsa (1000);// delsa 1 sek. digitalWrite (led4Pin, LOW);//išjungti LED delsą (1000);//delsimas 1 sek.

Ši programa veiks gerai, bet tai nėra pats protingiausias sprendimas. Kodą reikia pakeisti. Kad programa veiktų vėl ir vėl, taikysime konstrukciją, vadinamą .
Kilpos naudingos, kai tą patį veiksmą reikia kartoti kelis kartus. Aukščiau esančiame kode pakartojame eilutes

DigitalWrite (led4Pin, HIGH); delsimas (1000); digitalWrite(led4Pin, LOW); delsimas (1000);
visas eskizo kodas priede (atsisiuntimai: 1260)

LED ryškumo reguliavimas

Kartais programoje reikės pakeisti šviesos diodų ryškumą. Tai galima padaryti su komanda analogWrite() . Ši komanda taip greitai įjungia ir išjungia šviesos diodą, kad akis nepastebėtų šio mirgėjimo. Jei šviesos diodas pusę laiko įjungtas ir pusę laiko išjungtas, vizualiai atrodys, kad jis šviečia per pusę ryškumo. Tai vadinama impulso pločio moduliacija (angl. PWM arba PWM). PWM naudojamas gana dažnai, nes juo galima valdyti „analoginį“ komponentą naudojant skaitmeninį kodą. Ne visi Arduino kaiščiai tinka šiam tikslui. Tik tos išvados, šalia kurių daromas toks žymėjimas " ~ “. Pamatysite jį šalia smeigtukų 3,5,6,9,10,11.
Prijunkite vieną iš savo šviesos diodų prie vieno iš PWM kaiščių (autoriaus kaištis yra 9). Dabar paleiskite LED mirksėjimo eskizą, bet pirmiausia pakeiskite komandą digitalWrite()įjungta analogWrite(). analogWrite() turi du argumentus: pirmasis yra kaiščio numeris, o antrasis - PWM reikšmė (0-255), šviesos diodų atžvilgiu tai bus jų ryškumas, o elektros varikliams - sukimosi greitis. Žemiau pateikiamas skirtingo LED ryškumo kodo pavyzdys.
//Pakeiskite šviesos diodo ryškumą int ledPin = 9;//prie šio kaiščio prijungtas šviesos diodas void setup() ( pinMode(ledPin, OUTPUT);// kaiščio inicijavimas į išvestį ) void loop() ( analogWrite (ledPin, 255);// visas ryškumas (255/255 = 1) delsa (1000);// pristabdykite 1 sek. digitalWrite (ledPin, LOW);// išjunkite LED delsą (1000);// pristabdykite 1 sek. analogWrite (ledPin, 191);// ryškumas 3/4 (191/255 ~= 0,75) delsa (1000);//pauzė 1 sek. digitalWrite(ledPin, LOW);//išjunkite LED delsą (1000);// pauzė 1 sek. analogWrite(ledPin, 127); //pusės ryškumo (127/255 ~= 0,5) delsa (1000);//pauzė 1s digitalWrite(ledPin, LOW);//išjunkite LED delsą (1000);// pause 1s analogWrite(ledPin, 63); // ketvirtis ryškumo (63/255 ~= 0,25) delsa (1000);// pauzė 1 sek. digitalWrite(ledPin, LOW);// išjunkite LED delsą (1000);// pauzė 1 sek.)

Pabandykite pakeisti PWM reikšmę komandoje analogWrite() norėdami pamatyti, kaip tai veikia ryškumą.
Toliau sužinosite, kaip sklandžiai reguliuoti ryškumą nuo visiško iki nulio. Žinoma, galite nukopijuoti kodo dalį 255 kartus
analogWrite(ledPin, ryškumas); delay(5);//short delay brightness = ryškumas + 1;
Bet supranti – tai nebus praktiška. Geriausias būdas tai padaryti yra naudoti FOR kilpą, kurią naudojome anksčiau.
Toliau pateiktame pavyzdyje naudojamos dvi kilpos, viena – ryškumui sumažinti nuo 255 iki 0
for (int brightness=0;brightness=0;brightness--)( analogWrite(ledPin,brightness); delay(5); )
vėlavimas (5) naudojamas sulėtinti išblukimo ir išnykimo greitį 5*256=1280ms=1,28sek.)
Pirmoje eilutėje naudojama " ryškumas -", kad sumažintumėte ryškumo reikšmę 1 kiekvieną kartą, kai ciklas kartojamas. Atminkite, kad ciklas veiks iki šviesumas >=0.Keisdamas ženklą > ant ženklo >= į ryškumo diapazoną įtraukėme 0. Šis eskizas sumodeliuotas žemiau. //tolygiai pakeiskite ryškumą int ledPin = 9;//prie šio kaiščio prijungtas šviesos diodas void setup() ( pinMode(ledPin, OUTPUT);// išvesties kaiščio inicijavimas ) void loop() ( //tolygiai padidinkite ryškumas (nuo 0 iki 255 ), skirtas (int brightness=0;brightness=0;brightness--)( analogWrite(ledPin,brightness); delay(5); ) delay (1000);//palaukite 1 sek. //lėtai mažinkite ryškumą (nuo 255 iki 0), skirta (int brightness=255;brightness>=0;brightness--)( analogWrite (ledPin,brightness); delay (5); ) delay (1000);//palaukite 1 sek. ) )
Atrodo nelabai gerai, bet mintis aiški.

RGB LED ir Arduino

RGB LED iš tikrųjų yra trys skirtingų spalvų šviesos diodai vienoje pakuotėje.

Įjungę skirtingus šviesos diodus su skirtingu ryškumu, galite derinti ir gauti skirtingas spalvas. „Arduino“ su 256 gradacijomis gausite 256^3=16581375 galimas spalvas. Realybėje, žinoma, jų bus mažiau.
Šviesos diodas, kurį naudosime kaip bendrą katodą. Tie. visi trys šviesos diodai struktūriškai sujungti katodais į vieną išėjimą. Šį kaištį sujungsime su GND kaiščiu. Likę išėjimai per ribojančius rezistorius turi būti prijungti prie PWM išėjimų. Autorius naudojo 9-11 kaiščius.Taigi kiekvieną šviesos diodą bus galima valdyti atskirai. Pirmajame eskize parodyta, kaip įjungti kiekvieną šviesos diodą atskirai.



//RGB LED - išbandyti //pin jungtis int red = 9; int green = 10; int mėlyna = 11; void setup()( pinMode(raudona, IŠVESTIS); pinMode(mėlyna, IŠVESTIS); pinMode(žalia, IŠVESTIS); ) void loop()( //įjungti/išjungti raudoną šviesos diodą digitalWrite(raudona, HIGH); delsa( 500) ; digitalWrite (raudona, LOW); delsa (500); //įjungti / išjungti žalią šviesos diodą digitalWrite (žalias, HIGH); delsa (500); digitalWrite (žalia, LOW); delsa (500); // įjungti / išjungti mėlyną šviesos diodą digitalWrite (mėlyna, HIGH); delsa (500); digitalWrite (mėlyna, LOW); delsa (500); )

Toliau pateiktame pavyzdyje naudojamos komandos analogWrite() ir gauti skirtingas atsitiktines šviesos diodų ryškumo vertes. Pamatysite, kad skirtingos spalvos keičiasi atsitiktinai.
//RGB LED - atsitiktinės spalvos //pin jungtys int red = 9; int green = 10; int mėlyna = 11; void setup()( pinMode(raudona, IŠVESTIS); pinMode(mėlyna, IŠVESTIS); pinMode(žalia, IŠvestis); ) void loop()( //pasirinkite atsitiktinę spalvą analogWrite(raudona, atsitiktinė(256)); analogWrite( mėlyna, atsitiktinė (256)); analogWrite (žalia, atsitiktinė (256)); delsa (1000);//palaukite vieną sekundę )

Atsitiktinis (256)-pateikia atsitiktinį skaičių nuo 0 iki 255.
Prisegtame faile eskizas, kuris parodys sklandų spalvų perėjimą iš raudonos į žalią, tada į mėlyną, raudoną, žalią ir kt. (atsisiuntimai: 348)
Eskizo pavyzdys veikia, tačiau yra daug pasikartojančio kodo. Galite supaprastinti kodą parašydami savo pagalbinę funkciją, kuri sklandžiai keisis iš vienos spalvos į kitą.
Štai kaip tai atrodys: (atsisiuntimai: 385)
Pažvelkime į funkcijos apibrėžimą gabalas po gabalo. Funkcija vadinama fader ir turi du argumentus. Kiekvienas argumentas yra atskirtas kableliu, o tipas nurodytas pirmoje funkcijos apibrėžimo eilutėje: tuščias fader (1 spalva, 2 spalva). Matote, kad abu argumentai deklaruojami kaip tarpt, ir jie pavadinti spalva 1 Ir spalva 2 kaip sąlygos kintamieji funkcijai apibrėžti. Tuštuma reiškia, kad funkcija negrąžina jokių reikšmių, ji tik vykdo komandas. Jei turėtumėte parašyti funkciją, kuri grąžintų daugybos rezultatą, ji atrodytų taip:
int daugiklis(int skaičius1, int skaičius2)( int produktas = skaičius1*skaičius2; grąžinti produktą; )
Atkreipkite dėmesį, kaip mes paskelbėme tipą tarpt kaip grąžinimo tipą, o ne
tuštuma.
Funkcijos viduje yra komandos, kurias jau naudojote ankstesniame eskize, tik PIN numeriai buvo pakeisti spalva 1 Ir spalva 2. Funkcija vadinama fader, jos argumentai apskaičiuojami kaip spalva1 = raudona Ir spalva2 = žalia. Archyve yra visas eskizas naudojant funkcijas (atsisiuntimai: 288)

Mygtukas

Šiame eskize bus naudojamas mygtukas su įprastai atidarytais kontaktais, be užrakto.


Tai reiškia, kad kol mygtukas nespaudžiamas, per jį neteka srovė, o atleidus mygtukas grįžta į pradinę padėtį.
Grandinėje, be mygtuko, naudojamas rezistorius. Šiuo atveju jis neriboja srovės, o "patraukia" mygtuką iki 0v (GND). Tie. kol mygtukas nebus paspaustas, Arduino kaištis, prie kurio jis prijungtas, bus žemas. Rezistorius naudojamas 10 kΩ grandinėje.


//nustatykite mygtuko paspaudimą int buttonPin = 7; void setup()( pinMode(buttonPin, INPUT);//inicijuoti kaištį prie įvesties Serial.begin(9600);//inicijuoti nuoseklųjį prievadą ) void loop()( if (digitalRead(buttonPin)==HIGH)(//if) mygtukas paspaudžiamas Serial.println("paspaustas"); // spausdinti "paspaustas" ) else ( Serial.println("nepaspaustas");// dar "nepaspaustas" ) )
Šiame eskize yra keletas naujų komandų.
-Ši komanda priima mūsų tikrinamos išvesties reikšmę Aukštas (aukštas lygis) ir žemas (žemas lygis). Anksčiau setup() ši išvestis turi būti sukonfigūruota kaip įvestis.
; //kur mygtukasPin yra PIN kodas, prie kurio prijungtas mygtukas.
Nuoseklusis prievadas leidžia „Arduino“ siųsti pranešimus kompiuteriui, kol pats valdiklis vykdo programą. Tai naudinga derinant programą, siunčiant pranešimus į kitus įrenginius ar programas. Norėdami įgalinti duomenų perdavimą per nuoseklųjį prievadą (kitas UART arba USART pavadinimas), turite jį inicijuoti sąrankos metu ()

Serial.begin() turi tik vieną argumentą – tai duomenų perdavimo sparta tarp Arduino ir kompiuterio.
Eskizas naudoja komandą, kad ekrane būtų rodomas pranešimas Arduino IDE (įrankiai >> serijinis monitorius).
- dizainas leidžia kontroliuoti programos eigą derinant kelis patikrinimus vienoje vietoje.
Jei (jei) „digitalRead“ grąžina HIGH, tada ekrane rodomas žodis „pressed“. Kitu atveju (kitaip) monitoriuje rodomas žodis „paspaustas“. Dabar galite pabandyti įjungti ir išjungti šviesos diodą vienu mygtuko paspaudimu.
//mygtuko paspaudimo aptikimas su LED išvestimi int buttonPin = 7; int ledPin = 8; void setup()( pinMode(buttonPin, INPUT);//šį kartą mygtuko kaištį nustatysime kaip INPUT pinMode(ledPin, OUTPUT); Serial.begin(9600); ) void loop()( if (digitalRead(buttonPin)= =HIGH)(digitalWrite(ledPin,HIGH); Serial.println("paspaustas"); ) else ( digitalWrite(ledPin,LOW); Serial.println("nepaspaustas"); ) )

Analoginis įėjimas.

analogiškai Skaityti leidžia nuskaityti duomenis iš vieno iš Arduino analoginių kontaktų ir išveda vertę nuo 0 (0 V) iki 1023 (5 V). Jei įtampa analoginiame įėjime yra 2,5 V, tada bus spausdinama 2,5 / 5 * 1023 = 512
analogiškai Skaityti turi tik vieną argumentą – tai analoginės įvesties numeris (A0-A5). Toliau pateiktame brėžinyje parodytas kodas, skirtas nuskaityti įtampą iš potenciometro. Norėdami tai padaryti, prijunkite kintamąjį rezistorių, kurio kraštutiniai gnybtai yra prie 5 V ir GND kaiščių, o vidurinis - prie A0 įvesties.

Vykdykite šį kodą ir serijiniame monitoriuje pažiūrėkite, kaip keičiasi reikšmės priklausomai nuo rezistoriaus rankenėlės pasukimo.
//analoginis įvestis int potPin = A0;//centrinis potenciometro kaištis prijungtas prie šio kaiščio void setup()( //analoginis kaištis įjungtas kaip įvestis pagal nutylėjimą, todėl inicijuoti nereikia Serial.begin(9600); ) void loop()( int potVal = analogRead(potPin);//potVal yra skaičius nuo 0 iki 1023 Serial.println(potVal); )
Toliau pateiktame eskize apjungiamas mygtuko paspaudimo eskizas ir LED ryškumo valdymo eskizas. Šviesos diodas įsijungs nuo mygtuko, o potenciometras valdys švytėjimo ryškumą.
//mygtuko paspaudimo aptikimas su LED išvestimi ir kintamu intensyvumu int buttonPin = 7; int ledPin = 9; int potPin = A0; void setup()( pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); ) void loop()( if (digitalRead(buttonPin)==HIGH)(//jei mygtukas paspaustas int analogVal = analogRead(potPin); int scaledVal = map(analogVal, 0, 1023, 0, 255); analogWrite(ledPin, scaledVal); // įjungti šviesos diodą su intensyvumu, kurį nustato pot Serial. println("paspaustas"); ) else ( digitalWrite(ledPin, LOW);//išjunkite, jei mygtukas nepaspaustas Serial.println("nepaspaustas"); ) )

Naujų naminių gaminių pristatymas į paštą

Paštu gaukite naujų naminių gaminių pasirinkimą. Jokio šlamšto, tik naudingos idėjos!

Tai tikrai puikus pradinis sprendimas, bet kiek toli galite nueiti su Arduino? Na, gana toli, bet iki tam tikros ribos, nes (kaip ir gyvenime apskritai) visada reikia rinktis tarp paprastumo ir atlikimo. Tikriausiai todėl pastebimas didelio našumo Arduino klonų atsiradimas, pavyzdžiui, šeimos įmonės mikrovaldikliuose arba Netduino ARM mikrovaldikliuose. Ši alternatyva daugeliu atvejų gali išgelbėti kūrėją padidinus našumą, tačiau ilgainiui vis dar yra paslėptų funkcijų ir bibliotekos, kurios naudoja mikrovaldiklio išteklius, o vartotojai bus priversti studijuoti mikrovaldiklio aparatinę įrangą.

Autorius asmeniškai nusprendė visiškai atsisakyti Arduino po kelių mėnesių studijų. Tiesą sakant, pasak autoriaus, pati Arduino platforma pastūmėjo jį į šį žingsnį. Žemiau pateikiamos priežastys, bet pirmiausia pažvelkime į Arduino pranašumus.

Arduino privalumai (tai puiku):

  • Arduino IDE yra pagrįstas AVRGCC C kompiliatoriumi. „Arduino“ mokymasis galiausiai padės išmokti C++. Jei jums nepatinka konkrečios aukšto lygio Arduino komandos ar bibliotekos, galite jas pakeisti C++ atitikmenimis (ne visada, kaip paaiškėja);
  • Maitinimas, programavimas ir ryšys su Arduino plokšte atliekami vienu USB kabeliu (arba kabeliu su adapteriu tam skirtame luste kai kuriems klonams);
  • Naudodami integruotas bibliotekas galite per kelias minutes įgyvendinti paprastą (ir lėtą) projektą, negalvodami apie tai, kaip šios bibliotekos įdiegiamos ir kaip jos veikia. Lėtas mygtukų skaitymas, duomenų rodymas LCD ekrane arba siuntimas per nuosekliąją sąsają, darbas su elektros varikliais;
  • Serijinis ir SPI ryšys yra puikus ir standartinis.

Arduino trūkumai (tai baisu):

  • „Arduino IDE“ yra blogiausias ir nenaudingiausias kodo rengyklė nuo „Notepad“. Vieną dieną pereisite prie tinkamo išorinio rengyklės, tačiau vis tiek turėsite atidaryti Arduino IDE, kad galėtumėte programuoti įrenginį;
  • Arduino įkrovos programa. Norėdami užbaigti bet kurį „Arduino“ įrenginį, turėsite rankiniu būdu užprogramuoti įkrovos įkroviklį kiekviename „tuščiame“ ATmega mikrovaldiklyje. Tai sumažina turimą „Flash“ programos atmintį 2 KB;
  • Tik keletas variantų: jei naudojate oficialias Arduino plokštes, galite rinktis tik iš 30 KB arba 254 KB integruotos programos atminties variantų. Kas atsitiks, jei jūsų kodas yra, tarkime, 42 KB? Vienintelis pasirinkimas yra naudoti Sanguino kloną, kuris nėra visiškai suderinamas su Arduino;
  • Nėra lengvo būdo pakeisti laikrodžio greitį, tiesa? Mikrovaldiklio modelis su 3,3V maitinimo šaltiniu ir 8MHz laikrodžiu gali saugiai veikti 12MHz dažniu;
  • Funkcija digitalWrite() vykdoma 56 ciklais (nors autorius gavo 400 ciklų rezultatą). Bent jau lengva išsiaiškinti ir pereiti prie tiesioginės prievado prieigos (antrasis elementas, kurį reikia pakeisti po Arduino IDE). Paprastai Arduino nėra labai patogu rašyti efektyvų kodą;
  • Negalite (bent jau nesunkiai) išjungti numatytosios nuosekliojo ryšio bibliotekos, kad būtų galima naudoti TX ir RX pertraukimus, nesvarbu, ar ji veikia, ar ne;
  • Laikmačio perpildymo nutraukimo paslaugos rutina veikia kas 16 000 ciklų fone. Tai daroma tam, kad funkcijos millis() ir micros() veiktų net tada, kai jos nenaudojamos;
  • Tuščias Arduino projektas, skirtas Arduino UNO platformai, užima 466 baitus ir 666 baitus Arduino Mega2560. Papildomos išteklių išlaidos daugeliui, įskaitant straipsnio autorių, netinka. Taip pat nemalonu matyti projekto kompiliavimo klaidas, susijusias su minėtais pakeitimais;
  • Paskutinis, bet ne mažiau svarbus dalykas – Arduino kūrimo aplinka, be jokios abejonės, „slepia“ svarbius mikrovaldiklio architektūros aspektus: registrus, pertraukimus ir laikmačius. Jų žinios yra būtinos.

Sunkumai naudojant AVRGCC:

  • Kai kuriuos elementus reikia perrašyti C++, iš kurių svarbiausias yra nuoseklusis ryšys (turbūt geriausia Arduino dalis). Laimei, yra daug praktinių patarimų ir vadovų šiai užduočiai atlikti. Rašyti kitus protokolus yra daug lengviau, pavyzdžiui, SPI;
  • Turite ištirti, kuriose bibliotekose yra ne kompiliavimo komandos, ir įtraukti tas bibliotekas į šaltinio kodo failą. Dažniausios yra: avr/io.h, avr/interrupt.h, util/delay.h, stdio.h ir string.h;
  • Baitų ir loginių kintamųjų tipai turi būti uint8_t ir bool, baitų numeriai, tokie kaip B00010001, turi būti 0b00010001 ir pan. Rasite visus kitus pakeitimus, jų labai nedaug;
  • Reikia daugiau žinių ir, svarbiausia, nepasiduoti.

AVRGCC naudojimo pranašumai:

  • Reikia kito procesoriaus, kad padidintumėte programos atmintį ar našumą? Galite jį naudoti (pavyzdžiui, iš tos pačios megaAVR serijos), ir jums tereikia perkompiliuoti projektą. Jums reikės pakeisti kai kuriuos registrus ir pertraukimų pavadinimus, makefile ir Fuse bitus;
  • Reikia kitokio laikrodžio greičio? Naudokite kitą kristalą arba galite naudoti mikrovaldiklio integruotą generatorių, tiesiog pakeisdami saugiklio bitus ir makefile;
  • Galite naudoti padorų (Notepad++) arba galingą (Atmel Studio 6) kodą IDE;
  • Galite visiškai valdyti savo kodą. Ką parašei, tas ir bus padaryta. Niekas nėra paslėpta, niekas nevyksta be jūsų sutikimo. Jūs rašote efektyvesnį ir greitesnį kodą. Sužinosite daugiau.

Kaip ir Arduino, AVRGCC turi daug pagalbinių priemonių, paruoštų projektų, bibliotekų ir vadovėlių. Pasirinkimas priklauso nuo vartotojų.

Panašūs įrašai