Nekoliko razloga zašto ne koristiti Arduino u svom dizajnu. Neobični projekti na Arduino Uno Arduino uno r3 projekti za početnike

U ovom sam članku odlučio prikupiti kompletan vodič korak po korak za Arduino početnike. Pogledat ćemo što je Arduino, što vam je potrebno za početak učenja, gdje preuzeti i kako instalirati i konfigurirati programsko okruženje, kako radi i kako koristiti programski jezik i još mnogo toga što je potrebno za stvaranje punopravnog složeni uređaji temeljeni na obitelji ovih mikrokontrolera.

Ovdje ću pokušati dati sažeti minimum kako biste razumjeli principe rada s Arduinom. Za potpunije uranjanje u svijet programabilnih mikrokontrolera, obratite pozornost na druge odjeljke i članke ove stranice. Ostavit ću poveznice na druge materijale na ovoj stranici za detaljnije proučavanje nekih aspekata.

Što je Arduino i čemu služi?

Arduino je elektronički dizajner, koji svakome omogućuje stvaranje raznih elektromehaničkih uređaja. Arduino se sastoji od softvera i hardvera. Softverski dio uključuje razvojno okruženje (program za pisanje i uklanjanje pogrešaka firmvera), mnogo gotovih i praktičnih biblioteka i pojednostavljeni programski jezik. Hardver uključuje veliku liniju mikrokontrolera i gotovih modula za njih. Zahvaljujući tome, rad s Arduinom je vrlo jednostavan!

Uz pomoć Arduina možete učiti programiranje, elektrotehniku ​​i mehaniku. Ali ovo nije samo obrazovni konstruktor. Na temelju toga možete napraviti stvarno korisne uređaje.
Počevši od jednostavnih trepćućih svjetala, meteoroloških stanica, sustava automatizacije i završavajući s pametna kuća, CNC strojevi i bespilotne letjelice. Mogućnosti nisu čak ni ograničene vašom maštom, jer postoji ogroman broj uputa i ideja za provedbu.

Arduino početni komplet

Kako biste počeli učiti Arduino, morate nabaviti samu ploču mikrokontrolera i dodatne dijelove. Najbolje je kupiti Arduino starter kit, ali sve što vam treba možete izabrati sami. Preporučam odabrati set jer je jednostavnije, a često i jeftinije. Ovdje su poveznice na najbolje setove i pojedinačne dijelove koje ćete svakako morati proučiti:

Osnovni Arduino komplet za početnike:Kupiti
Veliki set za obuku i prve projekte:Kupiti
Set dodatnih senzora i modula:Kupiti
Arduino Uno je najosnovniji i najprikladniji model iz linije:Kupiti
Mrežna ploča bez lemljenja za jednostavno učenje i izradu prototipova:Kupiti
Set žica s praktičnim konektorima:Kupiti
LED set:Kupiti
Komplet otpornika:Kupiti
Gumbi:Kupiti
Potenciometri:Kupiti

Arduino IDE razvojno okruženje

Za pisanje, otklanjanje pogrešaka i preuzimanje firmvera morate preuzeti i instalirati Arduino IDE. Vrlo je jednostavno i prikladan program. Na svojoj web stranici već sam opisao proces preuzimanja, instaliranja i konfiguriranja razvojnog okruženja. Stoga ću ovdje ostaviti samo poveznice na Najnovija verzija programe i

Verzija Windows Mac OS X Linux
1.8.2

Arduino programski jezik

Kada u rukama imate mikrokontrolersku ploču i na računalu instalirano razvojno okruženje, možete početi pisati svoje prve skice (firmware). Da biste to učinili, morate se upoznati s programskim jezikom.

Arduino programiranje koristi pojednostavljenu verziju jezika C++ s unaprijed definiranim funkcijama. Kao iu drugim programskim jezicima sličnim C-u, postoji niz pravila za pisanje koda. Evo najosnovnijih:

  • Iza svake upute mora stajati točka-zarez (;)
  • Prije deklariranja funkcije, morate navesti tip podataka koji vraća funkcija ili void ako funkcija ne vraća vrijednost.
  • Prije deklariranja varijable također je potrebno navesti tip podataka.
  • Komentari su označeni: // Inline i /* block */

Možete saznati više o tipovima podataka, funkcijama, varijablama, operatorima i jezičnim konstrukcijama na stranici Ne morate pamtiti i pamtiti sve ove informacije. Uvijek možete otići u referentnu knjigu i pogledati sintaksu određene funkcije.

Sav Arduino firmware mora sadržavati najmanje 2 funkcije. To su setup() i loop().

funkcija postavljanja

Da bi sve funkcioniralo, moramo napisati skicu. Učinimo da LED dioda zasvijetli nakon pritiska na tipku, a ugasi se nakon sljedećeg pritiska. Evo naše prve skice:

// varijable s pinovima povezanih uređaja int switchPin = 8; int ledPin = 11; // varijable za pohranjivanje stanja gumba i LED boolean lastButton = LOW; boolean currentButton = LOW; boolean ledOn = lažno; void setup() ( pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); ) // funkcija za uklanjanje boolean debounse(boolean last) ( boolean current = digitalRead(switchPin); if(last != current) ( delay ( 5); current = digitalRead(switchPin); ) return current; ) void loop() ( currentButton = debounse(lastButton); if(lastButton == LOW && currentButton == HIGH) ( ledOn = !ledOn; ) lastButton = currentButton ; digitalWrite(ledPin, ledOn); )

// varijable s pinovima povezanih uređaja

int switchPin = 8;

int ledPin = 11;

// varijable za pohranjivanje stanja gumba i LED-a

boolean lastButton = LOW;

boolean currentButton = LOW;

boolean ledOn = lažno;

void setup() (

pinMode(switchPin, INPUT);

pinMode(ledPin, IZLAZ);

// funkcija za odbijanje

boolean debounse (booleov zadnji) (

boolean struja = digitalRead(switchPin);

if (posljednje != trenutno ) (

kašnjenje(5);

trenutno = digitalRead(switchPin);

povratna struja ;

void petlja() (

currentButton = debounse(lastButton);

if (lastButton == LOW && currentButton == HIGH ) (

ledOn = ! ledOn;

zadnji gumb = trenutni gumb;

digitalWrite(ledPin, ledOn);

U ovoj skici koju sam stvorio dodatna funkcija debounse za suzbijanje kontaktnog odbijanja. Na mojoj web stranici postoje informacije o odbijanju kontakata. Svakako pogledajte ovaj materijal.

PWM Arduino

Modulacija širine impulsa (PWM) je proces upravljanja naponom pomoću radnog ciklusa signala. Odnosno, pomoću PWM-a možemo glatko kontrolirati opterećenje. Na primjer, možete glatko promijeniti svjetlinu LED-a, ali ova promjena svjetline se ne postiže smanjenjem napona, već povećanjem intervala niskog signala. Princip rada PWM-a prikazan je na ovom dijagramu:

Kada na LED diodu primijenimo PWM, ona počinje brzo svijetliti i gasiti se. Ljudsko oko to ne može vidjeti jer je frekvencija previsoka. Ali kada snimate video, najvjerojatnije ćete vidjeti trenutke kada LED ne svijetli. To će se dogoditi pod uvjetom da broj sličica u sekundi kamere nije višekratnik frekvencije PWM.

Arduino ima ugrađen modulator širine impulsa. Možete koristiti PWM samo na onim pinovima koje podržava mikrokontroler. Na primjer, Arduino Uno i Nano imaju 6 PWM pinova: to su pinovi D3, D5, D6, D9, D10 i D11. Pinovi se mogu razlikovati na drugim pločama. Možete pronaći opis ploče koja vas zanima

Za korištenje PWM-a u Arduinu postoji funkcija. Kao argumente uzima broj pina i vrijednost PWM-a od 0 do 255. 0 je 0% ispunjenja s visokim signalom, a 255 je 100%. Napišimo jednostavnu skicu kao primjer. Učinimo da LED svijetli glatko, pričekamo jednu sekundu i ugasimo se jednako glatko, i tako u nedogled. Evo primjera korištenja ove funkcije:

// LED je spojen na pin 11 int ledPin = 11; void setup() ( pinMode(ledPin, OUTPUT); ) void loop() ( for (int i = 0; i< 255; i++) { analogWrite(ledPin, i); delay(5); } delay(1000); for (int i = 255; i >0; i--) ( analogWrite(ledPin, i); kašnjenje(5); ) )

// LED spojen na pin 11

int ledPin = 11;

void setup() (

pinMode(ledPin, IZLAZ);

void petlja() (

za (int i = 0; i< 255 ; i ++ ) {

analogWrite(ledPin, i);

kašnjenje(5);

kašnjenje (1000);

za (int i = 255; i > 0; i -- ) (

Kako odabrati Arduino Ovo pitanje postavlja se svima koji su prvi put odlučili izraditi projekt koristeći Arduino. Odlučili smo se o potrebnim detaljima: senzorima, senzorima, modulima itd., Suočili smo se s velikim asortimanom Arduino ploča, osim toga, svaka ploča također ima dva ili tri analoga. Neki misle da što skuplje i snažnije to bolje, kupuju ozbiljna rješenja, poput Arduino Duea, a onda shvate da na njemu ne rade sve skice i teško im je nositi se s punom snagom ovog uređaj sami. Drugi idu suprotnim putem i suočavaju se s ograničenjima resursa (memorija, pinovi, portovi, taktna frekvencija, prehrana). Kako pronaći tu zlatnu sredinu? Pokušajmo to shvatiti...

Platiti profesionalci minusi

Arduino Uno

funkcionalnost poput ProMini i Nano
  • Ploča je najčešća u obitelji Arduino, za nju je stvoren najveći broj lekcija.
  • Zahvaljujući prisutnosti DIP ploče, možete promijeniti mikrokontroler
  • S istom funkcionalnošću kao Arduino ProMini, Nano i Micro, ploča je višestruko veća

Arduino Mega 2560

  • Prikladni su štitovi stvoreni za Arduino UNO
  • Maksimalan broj pinova
  • Prošireni kapacitet svih vrsta memorije
  • Ne može se instalirati na Breadboard bez upotrebe žica

Arduino Leonardo

funkcionalnost poput MICRO

  • Prikladni su štitovi stvoreni za Arduino UNO
  • Ploča je poboljšana verzija Arduino UNO i radi s većinom njegovih skica
  • Ne može se instalirati na Breadboard bez upotrebe žica
  • Neke skice stvorene za Arduino Uno ne rade na Leonardu, jer... koriste se različiti mikrokontroleri

Arduino Due


  • Broj pinova kao Arduino Mega
  • Implementirana su dva analogna izlaza
  • Koristi snažan 32-bitni mikrokontroler s radnom frekvencijom od 84 MHz
  • Ne može se instalirati na Breadboard bez upotrebe žica
  • Najveća veličina ploče u cijeloj Arduino obitelji
  • Ne pružaju sve skice tako visoku frekvenciju takta
  • Nije sve štit omogućuju prijenos signala s graničnim naponom od 3,3 V
  • Napon napajanja 3,3V

Arduino ProMini 3.3V

funkcionalnost poput Nano i UNO


  • Najniža taktna frekvencija mikrokontrolera, samo 8 MHz
  • Napon napajanja 3,3V

Arduino ProMini 5V

funkcionalnost poput Nano i UNO

  • Može se koristiti za dizajniranje dijagrama na Breadboardu
  • Najmanja ploča u Arduino obitelji
  • Isporučuje se bez zalemljenih pinskih kontakata, što omogućuje površinsku montažu
  • Štitovi stvoreni za Arduino UNO nisu prikladni
  • Nema USB kontrolera, što zahtijeva vanjski programator

Arduino NANO V3.0

funkcionalnost poput ProMini i UNO


  • Može se koristiti za dizajniranje dijagrama na Breadboardu
  • Ploča je nešto veća od Arduino ProMini, ali ima USB priključak i ne zahtijeva korištenje vanjskog programatora
  • Štitovi stvoreni za Arduino UNO nisu prikladni
  • Uvođenje USB priključka s kontrolerom dovelo je do povećanja količine flash memorije dodijeljene bootloaderu (u usporedbi s Arduino ProMini)

Arduino MICRO

funkcionalnost poput Leonarda


  • Može se koristiti za dizajniranje dijagrama na Breadboardu
  • Ploča je malo veća od Arduino Nano, ali ima sve funkcionalnosti Arduino Leonardo
  • Moguće je simulirati razne USB uređaji kada je spojen na računalo (ploča će se detektirati kao miš, tipkovnica itd.)
  • Štitovi stvoreni za Arduino UNO nisu prikladni
  • Prijenos funkcije USB kontrolera na mikrokontroler doveo je do povećanja količine flash memorije dodijeljene bootloaderu

Prvo pitanje koje utječe na izbor Arduina- koji projekt želite realizirati?

Ako želite izraditi gotov projekt, koje su ljubazno ustupili drugi programeri, onda bi logična kupnja bio Arduino na kojem je projekt izvorno kreiran. Ovdje je vrijedno napomenuti činjenicu da se sada, u Ruskoj Federaciji, Arduino ploče distribuiraju pod markom Geduino . To jest, kao što ste ispravno shvatili, Arduino Micro razlikuje se od Geduino Micro u imenu i logotipu (ovo nije analog), kao što je napisano na službenoj web stranici. A budući da je potonji jeftiniji, izbor je očit.

Ako se niste odlučili za projekt, ali želite kupiti Arduino za vlastite eksperimente, tada je važan faktor količina razni primjeri na mreži, pod jednim ili drugim Arduinom. Nedvojbeni lider ovdje je Arduino UNO , to se objašnjava činjenicom da je ova ploča najstarija u Arduino liniji, ali nije zastarjela, budući da je doživjela dosta promjena od svog nastanka.

Ako planirate implementirati vlastiti projekt, tada izboru Arduina treba pristupiti metodom eliminacije. Ako vaš projekt ima module s pinovima za Arduino Uno, isključite Arduino ProMini 3.3V, Arduino ProMini 5V, analog Arduino Nano), ali može imati drugačiju vrstu USB konektora, biti malo drugačije veličine, imati drugačiji USB kontroler, drugačiji tip kućišta mikrokontrolera, boju ploče itd. Ovdje morate shvatiti da ove ploče ponavljaju funkcionalnost svog originala (kojemu su slične po imenu), budući da koriste isti ATmega mikrokontroler iste serije. Dimenzije ploče, kućište i tip mikrokontrolera USB priključak, može se utvrditi s fotografije. A prisutnost "CH340G" u nazivu znači da USB kontroler nije standardni FTDI čip za Arduino, već njegov analogni CH340G, stoga za povezivanje takvog Arduina s računalom morate instalirati upravljački program za CH340G čip . Ove ploče su prikladne za one koji smatraju da jednokratna instalacija upravljačkog programa nije neugodnost, a snižena cijena je prednost u odnosu na izvorni naziv.

Arduino je vrlo popularan među svim entuzijastima dizajna. S njim treba upoznati i one koji nikad nisu čuli za njega.

Što je Arduino?

Kako možete ukratko opisati Arduino? Optimalnim riječima bit će: Arduino je alat s kojim možete kreirati razne elektronički uređaji. U biti, ovo je prava hardverska računalna platforma opće namjene. Može se koristiti za gradnju jednostavni sklopovi, te za provedbu prilično složenih projekata.

Dizajner se temelji na svom hardveru, koji je ulazno-izlazna ploča. Za programiranje ploče koriste se jezici koji se temelje na C/C++. Nazivaju se obrada/ožičenje. Od skupine C naslijedili su izuzetnu jednostavnost, zahvaljujući kojoj ih svaka osoba može vrlo brzo savladati, a primjena znanja u praksi nije neki značajniji problem. Kako biste razumjeli lakoću rada, često se kaže da je Arduino za početnike čarobnjake-dizajnere. Čak i djeca mogu razumjeti Arduino ploče.

Što možete prikupiti na njemu?

Primjene Arduina vrlo su raznolike; može se koristiti i za najjednostavnije primjere, koji će biti preporučeni na kraju članka, i za prilično složene mehanizme, uključujući manipulatore, robote ili proizvodne strojeve. Neki majstori uspijevaju iskoristiti takve sustave za izradu tableta, telefona, sustava za nadzor i sigurnost doma, sustava pametne kuće ili jednostavno računala. Arduino projekti za početnike, s kojima mogu krenuti i oni bez iskustva, nalaze se na kraju članka. Mogu se čak koristiti za stvaranje primitivnih sustava virtualna stvarnost. Sve zahvaljujući prilično svestranom hardveru i mogućnostima koje pruža Arduino programiranje.

Gdje mogu kupiti komponente?

Komponente proizvedene u Italiji smatraju se originalnima. Ali cijena takvih kompleta nije niska. Stoga brojne tvrtke ili čak pojedinci izrađuju zanatske metode Arduino-kompatibilnih uređaja i komponenti, koje se u šali naziva proizvodnim klonovima. Pri kupnji takvih klonova ne može se sa sigurnošću reći da će raditi, ali želja za uštedom novca uzima svoj danak.

Komponente se mogu kupiti kao dio kompleta ili zasebno. Postoje čak i unaprijed pripremljeni setovi za sastavljanje automobila, helikoptera različite vrste kontrole ili brodove. Set poput ovog na gornjoj slici, napravljen u Kini, košta 49 dolara.

Više o opremi

Arduino ploča je jednostavna AVR mikrokontroler, koji je flashiran bootloaderom i ima minimalno potreban USB-UART priključak. Postoje i druge važne komponente, ali u okviru članka bilo bi bolje fokusirati se samo na te dvije komponente.

Prvo o mikrokontroleru, mehanizmu izgrađenom na jednom krugu u kojem se nalazi razvijeni program. Na program se može utjecati pritiskom tipki, primanjem signala od komponenti kreacije (otpornici, tranzistori, senzori itd.) itd. Štoviše, senzori mogu biti vrlo različiti po svojoj namjeni: osvjetljenje, ubrzanje, temperatura, udaljenost, pritisak, prepreke itd. Jednostavni dijelovi mogu se koristiti kao uređaji za prikaz, od LED dioda i visokotonaca do složenih uređaja, kao što su grafički zasloni. Razmatrana kvaliteta su motori, ventili, releji, servo uređaji, elektromagneti i mnogi drugi, za čije nabrajanje bi trebalo jako, jako dugo. MK radi izravno s nekim od ovih popisa, koristeći spojne žice. Neki mehanizmi zahtijevaju adaptere. Ali kada jednom počnete dizajnirati, teško ćete se otrgnuti. Sada razgovarajmo o Arduino programiranju.

Saznajte više o procesu programiranja ploče

Program koji je već spreman za rad na mikrokontroleru naziva se firmware. Može postojati ili jedan projekt ili Arduino projekti, pa bi bilo preporučljivo pohraniti svaki firmware u zasebnu mapu kako bi se ubrzao proces pronalaženja potrebne datoteke. Bljeska se na MK kristal pomoću specijaliziranih uređaja: programatora. I ovdje Arduino ima jednu prednost - ne treba mu programer. Sve je učinjeno tako da programiranje Arduina za početnike nije teško. Napisani kod može se učitati u MK putem USB kabela. Ova prednost nije postignuta nekim unaprijed izgrađenim programatorom, već posebnim firmverom - bootloaderom. Bootloader je poseban program koji se pokreće odmah nakon spajanja i sluša ima li kakvih naredbi, treba li flashati kristal, ima li Arduino projekata ili ne. Postoji nekoliko vrlo atraktivnih prednosti korištenja bootloadera:

  1. Korištenje samo jednog komunikacijskog kanala, koji ne zahtijeva dodatne vremenske troškove. Dakle, Arduino projekti ne zahtijevaju spajanje mnogo različitih žica i doći će do zabune kada ih koristite. Za uspješan rad dovoljan je jedan USB kabel.
  2. Zaštita od krivih ruku. Prilično je lako dovesti mikrokontroler u stanje cigle pomoću izravnog firmvera; ne morate naporno raditi. Kada radite s bootloaderom, nećete moći pristupiti potencijalno opasnim postavkama (naravno, uz pomoć razvojnog programa, inače se sve može pokvariti). Stoga je Arduino za početnike namijenjen ne samo s gledišta da je razumljiv i prikladan, već će vam također omogućiti izbjegavanje neželjenih financijskih troškova povezanih s neiskustvom osobe koja radi s njima.

Projekti za početak

Kada ste nabavili pribor, lemilo, kolofonij i lem, ne biste trebali odmah oblikovati vrlo složene strukture. Naravno, možete ih napraviti, ali šanse za uspjeh u Arduinu za početnike su prilično niske sa složenim projektima. Kako biste trenirali i poboljšali svoje vještine, možete pokušati implementirati nekoliko jednostavnijih ideja koje će vam pomoći razumjeti interakciju i rad Arduina. Kao prve korake u radu s Arduinom za početnike, savjetujemo vam da razmotrite:

  1. Stvorite jedan koji će raditi zahvaljujući Arduinu.
  2. Spajanje zasebnog gumba na Arduino. U ovom slučaju možete napraviti tako da tipka može podesiti sjaj LED diode iz točke br. 1.
  3. Priključak potenciometra.
  4. Kontrola servo pogona.
  5. Spajanje i rad s trobojnim LED-om.
  6. Spajanje piezoelektričnog elementa.
  7. Spajanje fotootpornika.
  8. Spajanje senzora pokreta i signala o njegovom radu.
  9. Spajanje senzora vlage ili temperature.

Projekti za budućnost

Malo je vjerojatno da ste zainteresirani za Arduino kako biste spojili pojedinačne LED diode. Najvjerojatnije vas privlači prilika da napravite vlastiti automobil ili leteći gramofon. Te je projekte teško implementirati i zahtijevat će puno vremena i upornosti, ali jednom kad ih dovršite, dobit ćete ono što želite: dragocjeno iskustvo Arduino dizajna za početnike.

Kašnjenja u Arduinu igraju vrlo veliku ulogu. Bez njih ne može raditi ni najjednostavniji primjer Blinka, koji trepće LED diodom nakon određenog vremena. Ali većina programera početnika malo zna o vremenskim odgodama i koristi samo Arduino odgodu bez poznavanja nuspojava ove naredbe. U ovom ću članku detaljno govoriti o vremenskim funkcijama i kako ih koristiti u Arduino IDE.

U Arduinu postoji nekoliko različitih naredbi koje su odgovorne za rad s vremenom i pauzama:

  • odgoditi()
  • kašnjenje mikrosekundi()
  • millis()
  • mikros()

Razlikuju se u točnosti i imaju svoje karakteristike koje treba uzeti u obzir pri pisanju koda.

Korištenje Arduino funkcije odgode

Sintaksa

Arduino delay je najjednostavnija naredba i najčešće je koriste početnici. U biti, to je odgoda koja pauzira program na broj milisekundi navedenih u zagradama. (U jednoj sekundi ima 1000 milisekundi.) Maksimalna vrijednost može biti 4294967295 ms, što je približno jednako 50 dana. Pogledajmo jednostavan primjer koji jasno pokazuje kako ova naredba radi.

Void setup() ( pinMode(13, OUTPUT); ) void loop() ( digitalWrite(13, HIGH); // slanje visokog signala na pin 13 delay(10000); // pauza 10000ms ili 10 sekundi digitalWrite13, LOW) ; // slanje niskog signala na pin 13 delay(10000); // pauza 10000ms ili 10 sekundi)

U metodi postaviti Specificiramo da će se pin 13 koristiti kao izlaz. U glavnom dijelu programa, visoki signal se prvo šalje na pin, zatim radimo odgodu od 10 sekundi. Čini se da je za to vrijeme program obustavljen. Zatim se daje slab signal i opet dolazi do kašnjenja i sve počinje ispočetka. Kao rezultat toga, dobivamo da se pin naizmjenično napaja s 5 V ili 0.

Morate jasno razumjeti da je tijekom pauze s odgodom rad programa obustavljen, aplikacija neće primati nikakve podatke od senzora. Ovo je najveći nedostatak korištenja Arduino funkcije kašnjenja. Ovo ograničenje možete zaobići korištenjem prekida, ali o tome ćemo govoriti u zasebnom članku.

Primjer kašnjenja s trepćućim LED-om

Primjer strujnog kruga koji ilustrira kako funkcionira funkcija kašnjenja.
Možete izgraditi krug s LED-om i otpornikom. Tada ćemo imati standardni primjer - treptanje LED diode. Da biste to učinili, trebate spojiti LED s pozitivnim kontaktom na pin, koji smo označili kao izlaz. Spojimo slobodnu nogu LED-a na masu kroz otpornik od približno 220 Ohma (moguće je malo više). Polaritet možete odrediti gledajući njegovu unutrašnjost. Velika šalica iznutra spojena je na minus, a mala noga na plus. Ako je vaša LED dioda nova, tada možete odrediti polaritet prema duljini vodova: dugi krak je plus, kratki krak je minus.

funkcija delayMicroseconds

Ova funkcija je potpuni analog odgode, osim što njene mjerne jedinice nisu milisekunde, već mikrosekunde (u 1 sekundi ima 1.000.000 mikrosekundi). Maksimalna vrijednost bit će 16383, što je jednako 16 milisekundi. Rezolucija je 4, odnosno broj će uvijek biti višekratnik četiri. Primjer isječka izgledao bi ovako:

DigitalWrite(2, HIGH); // slanje visokog signala na pin 2 delayMicroseconds(16383); // pauza 16383 µs digitalWrite(2, LOW); // slanje niskog signala na pin 2 delayMicroseconds(16383); // pauza 16383 µs

Problem s delayMicroseconds potpuno je isti kao i s kašnjenjem - ove funkcije potpuno "objese" program i on se doslovno zamrzava na neko vrijeme. U ovom trenutku nemoguće je raditi s portovima, čitati informacije sa senzora i izvoditi matematičke operacije. Ova je opcija prikladna za blještava svjetla, ali iskusni korisnici je ne koriste za velike projekte, jer takvi kvarovi tamo nisu potrebni. Stoga je mnogo bolje koristiti dolje opisane funkcije.

Millis funkcija umjesto kašnjenja

Funkcija millis() omogućit će vam izvođenje odgode bez odgode na Arduinu, čime se zaobilaze nedostaci prethodnih metoda. Maksimalna vrijednost parametra u milisekundama jednaka je onoj funkcije odgode (4294967295 ms ili 50 dana).

Korištenjem millisa ne zaustavljamo izvođenje cijele skice, već jednostavno označavamo koliko dugo bi Arduino trebao jednostavno “zaobići” točan blok koda koji želimo pauzirati. Za razliku od delay millisa, ne zaustavlja ništa sam po sebi. Ova nam naredba jednostavno vraća broj milisekundi koje su prošle od početka iz mikrokontrolera. Svakim pozivom na petlju sami mjerimo vrijeme koje je prošlo od zadnjeg poziva našeg koda i ako je vremenska razlika manja od željene pauze, tada zanemarimo kod. Čim razlika postane veća od potrebne pauze, izvršavamo kod, dobivamo trenutno vrijeme koristeći isti mili broj i pamtimo ga - ovo vrijeme će biti nova početna točka. U sljedećem ciklusu odbrojavanje će već biti od nove točke i ponovno ćemo zanemariti kod dok nova razlika između mililisa i naše prethodno spremljene vrijednosti ponovno ne dosegne željenu pauzu.

Odgoda bez odgode korištenjem millisa zahtijeva više koda, ali uz njegovu pomoć možete treptati LED i pauzirati skicu bez zaustavljanja sustava.

Evo primjera koji jasno ilustrira rad tima:

Nepotpisano dugo vrijeme; // Varijabla za pohranjivanje referentne točke void setup() ( Serial.begin(9600); ) void loop() ( /* U ovoj točki počinje izvođenje delay() analoga. Izračunajte razliku između trenutnog trenutka i prethodno spremljena referentna točka. Ako je razlika veća od željene vrijednosti, izvršite kôd. Ako ne, ne učinite ništa */ if (millis() - vrijeme > 10000)( // Umjesto 10000, zamijenite vrijednost pauze koja vam je potrebna za mjerenje vremena = millis(); Serial.println ("10 sekundi") ; ) )

Prvo uvodimo varijablu vremena, koja će pohraniti broj milisekundi. Standardno, vrijednost varijable je 0. U glavnom dijelu programa provjeravamo uvjet: ako je broj milisekundi od početka mikrokontrolera minus broj zapisan u vremenskoj varijabli veći od 10000, tada je radnja izlaza poruke u port monitor se izvodi i trenutna vrijednost vremena se upisuje u varijablu. Kao rezultat rada programa, poruka 10 seconds bit će prikazana na port monitoru svakih 10 sekundi. Ova metoda omogućuje treptanje LED diode bez odgode.

Micros funkcioniraju umjesto kašnjenja

Ova funkcija također može izvesti odgodu bez korištenja naredbe za odgodu. Radi potpuno isto kao i milisekunde, ali broji mikrosekunde umjesto milisekundi s rezolucijom od 4 μs. Njegova najveća vrijednost je 4294967295 mikrosekundi ili 70 minuta. Ako se prelijeva, vrijednost se jednostavno vraća na 0, ne zaboravite na to.

Sažetak

Platforma Arduino nudi nam nekoliko načina za implementaciju odgode u našem projektu. Korištenjem odgode možete brzo pauzirati izvođenje skice, ali ćete u isto vrijeme blokirati rad mikrokontrolera. Korištenje naredbe millis omogućuje vam da radite bez odgode u Arduinu, ali to će zahtijevati malo više programiranja. Odaberite Najbolji način ovisno o složenosti vašeg projekta. U pravilu se u jednostavnim skicama i s odgodom manjom od 10 sekundi koristi odgoda. Ako je radna logika složenija i potrebno je veliko kašnjenje, bolje je koristiti milise umjesto kašnjenja.

Niz članaka i dijagrama obuke s radioamaterskim eksperimentima na Arduinu za početnike. Ovo je vrsta amaterske radio građevinske igračke, iz koje se, bez lemilice, gravira tiskane ploče i slično, svaki elektroničar hobist može sastaviti punopravni radni uređaj, prikladan i za profesionalnu izradu prototipova i za amaterske eksperimente u proučavanju elektronike.


Arduino ploča namijenjena je prvenstveno podučavanju početnika radio amatera osnovama programiranja mikrokontrolera i izradi mikrokontrolerskih uređaja vlastitim rukama bez ozbiljne teorijske obuke. Arduino razvojno okruženje omogućuje kompajliranje i učitavanje gotovog programskog koda u memoriju ploče. Štoviše, učitavanje koda je iznimno jednostavno.

Arduino odakle početi za početnika

Prije svega, za rad s Arduino pločom, elektroničar početnik mora preuzeti Arduino razvojni program; sastoji se od ugrađenog uređivača teksta u kojem radimo s programskim kodom, područja za poruke, prozora za izlaz teksta (konzola ), alatna traka s gumbima za često korištene naredbe i nekoliko izbornika. Za preuzimanje svojih programa i komunikaciju, ovaj program je spojen na Arduino ploču preko standardnog USB kabela.


Kod napisan u Arduino okruženje, nazvao Skica. Zapisano je u uređivač teksta, koji ima posebne alate za umetanje/rezanje, zamjenu/pretragu teksta. Tijekom spremanja i izvoza, objašnjenja se pojavljuju u području poruka (pogledajte sliku u prvoj lekciji za početnike, ispod), a mogu se prikazati i pogreške. Konzola prikazuje Arduino poruke uključujući potpuna izvješća o pogreškama i ostalo korisna informacija. Gumbi alatne trake omogućuju provjeru i snimanje skice, otvaranje, stvaranje i spremanje, otvaranje nadzora serijske sabirnice i još mnogo toga.

Pa prijeđimo na prvu. Arduino lekcija dijagrami strujnih krugova za elektroničare početnike.

Za praktičnost početnika, Arduino UNO kontroler već ima otpornik i LED diodu spojenu na pin 13 konektora, tako da nam u prvom eksperimentu nisu potrebni nikakvi vanjski radio elementi.


Učitavanjem koda Arduino dopušta našem programu sudjelovanje u inicijalizaciji sustava. Da bismo to učinili, naznačujemo mikrokontroleru naredbe koje će izvršiti u trenutku početnog pokretanja, a zatim potpuno zaboraviti na njih (tj. ove će naredbe Arduino izvršiti samo jednom pri pokretanju). I upravo u tu svrhu u našem kodu odabiremo blok u kojem su te naredbe pohranjene. void setup(), odnosno u prostoru unutar vitičastih zagrada ove funkcije, pogledajte skicu programa.

Ne zaboravite vitičaste zagrade! Gubitak barem jednog od njih učinit će cijelu skicu potpuno neizvodljivom. Ali nemojte stavljati ni dodatne zagrade jer će i to uzrokovati pogrešku.

Preuzmi kod:
Skica s komentarima i objašnjenjima u datoteci 001-1_mig-led.ino

Funkcija void petlja() ovdje stavljamo naredbe koje će se izvršavati sve dok je Arduino uključen. Počevši s izvršenjem od prve naredbe, Arduino će doći do samog kraja i odmah otići na početak kako bi ponovio isti niz. I tako beskonačan broj puta, sve dok ploča prima struju. U svojoj srži, void petlja je glavna funkcija, ulazna točka u Arduino.


Funkcija odgoditi(1000) odgađa obradu programa za 1000 milisekundi. Sve se nastavlja u vječnom ciklusu petlja().

Glavni zaključak nakon razumijevanja našeg prvog programa na Arduinu: Pomoću funkcija void loop i void setup prosljeđujemo naše upute mikrokontroleru. Sve što se nalazi unutar setup bloka izvršit će se samo jednom. Sadržaj modula petlje će se ponavljati u petlji sve dok je Arduino uključen.

U prethodnom programu postojala je druga odgoda između uključivanja i isključivanja LED-a. Postojao je jedan veliki minus u gore korištenom najjednostavnijem kodu Arduino operatora početnika. Za održavanje pauze između paljenja i gašenja LED-a od jedne sekunde koristili smo ovu funkciju odgoditi() i stoga u ovom trenutku kontroler nije u mogućnosti izvršavati druge naredbe u glavnoj funkciji petlja(). Ispravljanje koda u funkciji petlja(), predstavljen u nastavku rješava ovaj problem.

Umjesto postavljanja vrijednosti na HIGH, a zatim na LOW, dobit ćemo vrijednost ledPin-a i invertirati je. Recimo, ako je bilo VISOKO, postat će NISKO, itd.

Drugi Arduino opcija koda za LED kontrolu Ovdje:

Tada možete zamijeniti funkciju odgoditi(). Umjesto toga, bolje je koristiti funkciju millis(). Vraća broj milisekundi koje su prošle od pokretanja programa. Funkcija će se preliti nakon približno 50 dana pokretanja programskog koda.

Slična funkcija je mikros(), koji vraća broj mikrosekundi koje su prošle od pokretanja programskog koda. Funkcija će se vratiti na nulu nakon 70 minuta rada programa.

Naravno, ovo će dodati nekoliko redaka koda našoj skici, ali će vas sigurno učiniti više iskusan programer i povećat će potencijal vašeg Arduina. Da biste to učinili, samo trebate naučiti kako koristiti milisis funkciju.

Treba jasno razumjeti da najjednostavnija funkcija odgode pauzira izvođenje cijelog Arduino programa, čineći ga nesposobnim za obavljanje bilo kakvih zadataka tijekom tog vremenskog razdoblja. Umjesto da pauziramo cijeli program, možemo brojati koliko je vremena prošlo prije nego što se radnja završi. Ovo je lijepo implementirano pomoću funkcije millis(). Kako bismo sve učinili lakšim za razumijevanje, razmotrit ćemo sljedeću opciju za treptanje LED diode bez vremenskog kašnjenja.

Početak ovog programa je isti kao i bilo koje druge standardne Arduino skice.


U u ovom primjeru koriste se dva Arduino digitalna I/O pina. LED je spojen na pin 8, koji je konfiguriran kao OUTPUT. Gumb je spojen na 9 preko, koji je konfiguriran kao INPUT. Kada pritisnemo tipku, pin 9 je postavljen na HIGH, a program prebacuje pin 8 na HIGH, čime se pali LED. Otpuštanje gumba resetira pin 9 na LOW. Kod zatim prebacuje pin 8 na LOW, isključujući svjetlo indikatora.

Za kontrolu pet LED dioda koristit ćemo razne manipulacije s Arduino portovima. Da bismo to učinili, izravno upisujemo podatke na Arduino priključci, to će vam omogućiti da postavite vrijednosti za LED diode pomoću samo jedne funkcije.

Arduino UNO ima tri priključka: B(digitalni ulazi/izlazi od 8 do 13); C(analogni ulazi); D(digitalni ulazi/izlazi 0 do 7)

Svaki port kontrolira tri registra. Prvi DDR određuje hoće li pin biti ulaz ili izlaz. Koristeći drugi PORT registar, možete postaviti pin na HIGH ili LOW. Pomoću trećeg možete pročitati informacije o stanju Arduino nogu, ako rade kao ulaz.

Za upravljanje krugom koristimo priključak B. Da biste to učinili, postavite sve pinove priključka kao digitalne izlaze. Otvor B ima samo 6 nogu. Bitovi registra DDRB moraju biti postavljeni na "1" , ako će se pin koristiti kao izlaz (OUTPUT), i in "0" , ako planiramo koristiti pin kao ulaz (INPUT). Priključci su označeni brojevima od 0 do 7, ali nemaju uvijek svih 8 pinova

Recimo: DDRB = B00111110;// postavlja pinove 1 do 5 porta B kao izlaz i 0 kao ulaz.

U našem krugu svjetala koristimo pet izlaza: DDRB = B00011111; // postavljamo pinove 0 do 4 priključka B kao izlaze.

Da biste upisali podatke na port B, morate koristiti registar PORTB. Prvu LED diodu možete upaliti pomoću kontrolne naredbe: PORTB = B00000001;, prvi i četvrti LED: PORTB = B00001001 i tako dalje

Postoje dva binarna operatora pomaka: lijevo i desno. Lijevi operator pomaka uzrokuje da se svi bitovi podataka pomaknu ulijevo, dok ih desni pomak pomiče udesno.

Primjer:

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

Sada se vratimo na izvorni kod našeg programa. Moramo unijeti dvije varijable: gore doljeće uključivati ​​vrijednosti gdje se pomaknuti - gore ili dolje, i drugi cylon pokazat će koje LED diode treba upaliti.

Strukturno, takva LED ima jedan zajednički terminal i tri terminala za svaku boju. Ispod je dijagram spajanja RGB LED-a na Arduino ploču sa zajedničkom katodom. Svi otpornici koji se koriste u spojnom krugu moraju biti iste vrijednosti od 220-270 Ohma.


Za vezu sa zajedničkom katodom, dijagram povezivanja trobojne LED diode bit će gotovo isti, osim što će zajednički pin biti spojen ne na masu (gnd na uređaju), već na +5 volt pin. Pinovi Crveni, Zeleni i Plavi u oba slučaja spojeni su na digitalne izlaze kontrolera 9, 10 i 11.

Spojit ćemo vanjsku LED diodu na deveti pin Arduino UNO kroz otpor od 220 Ohma. Za glatku kontrolu svjetline potonjeg, koristite funkciju analogWrite(). Omogućuje izlaz PWM signala na upravljačku nogu. Štoviše, tim pinMode() nema potrebe zvati. Jer analogWrite(pin,vrijednost) uključuje dva parametra: pin - broj pina za izlaz, value - vrijednost od 0 do 255.

Kodirati:
/*
Primjer vodiča za Arduino programera početnika koji otkriva mogućnosti naredbe analogWrite() za implementaciju Fade efekta LED-a
*/
int svjetlina = 0; // LED svjetlina
int fadeAmount = 5; // korak promjene svjetline
unsigned long currentTime;
nepredpisano dugo vrijeme petlje;

Void setup() (
pinMode(9, IZLAZ); // postavi pin 9 kao izlaz
trenutnovrijeme = millis();
vrijeme petlje = trenutno vrijeme;
}

Void petlja() (
trenutnovrijeme = millis();
if(trenutnovrijeme >= (vrijeme petlje + 20))(
analogWrite(9, svjetlina); // postavite vrijednost na pin 9

Svjetlina = svjetlina + fadeAmount; // dodajte korak za promjenu svjetline, koji će se uspostaviti u sljedećem ciklusu

// ako se postigne min. ili maks. vrijednosti, onda idemo u suprotnom smjeru (obrnuto):
if (svjetlina == 0 || svjetlina == 255) (
fadeAmount = -fadeAmount ;
}
vrijeme petlje = trenutno vrijeme;
}
}

Arduino rad sa koderom

Koder je dizajniran za pretvaranje kuta rotacije u električni signal. Od njega primamo dva signala (A i B), koji su suprotni u fazi. U ovom vodiču koristit ćemo SparkFun COM-09117 koder koji ima dvanaest položaja po okretaju (svaki položaj je točno 30°). Donja slika jasno pokazuje kako izlaz A i B ovise jedan o drugom kada se koder pomiče u smjeru kazaljke na satu ili suprotno od njega.

Ako signal A prijeđe s pozitivne razine na nulu, očitavamo vrijednost izlaza B. Ako je izlaz B u ovom trenutku vremena u pozitivnom stanju, tada se enkoder pomiče u smjeru kazaljke na satu, ako B emitira nultu razinu, tada enkoder se pomiče u suprotnom smjeru. Očitavanjem oba izlaza možemo pomoću mikrokontrolera izračunati smjer rotacije, a brojanjem impulsa s A izlaza enkodera kut rotacije.

Ako je potrebno, možete koristiti izračune frekvencije kako biste odredili koliko brzo se koder okreće.

Koristeći enkoder u našem primjeru tutorijala, prilagodit ćemo svjetlinu LED-a pomoću PWM izlaza. Za čitanje podataka s kodera koristit ćemo metodu temeljenu na programskim mjeračima vremena, koju smo već obradili.

S obzirom na to da u najbržem slučaju možemo zakrenuti gumb enkodera za 180° u 1/10 sekunde, to bi bilo 6 impulsa u 1/10 sekunde ili 60 impulsa u jednoj sekundi.

U stvarnosti nije moguće rotirati brže. Budući da moramo pratiti sve polucikluse, frekvencija bi trebala biti oko 120 Hertza. Da budemo potpuno sigurni, uzmimo 200 Hz.

Budući da u ovom slučaju koristimo mehanički enkoder, moguće je odbijanje kontakta i niska frekvencija savršeno filtrira takvo brbljanje.


Na temelju signala programiranog timera potrebno je stalno uspoređivati ​​trenutnu vrijednost izlaza enkodera A s prethodnom vrijednošću. Ako se stanje promijeni s pozitivnog na nulu, tada ispitujemo stanje izlaza B. Ovisno o rezultatu ispitivanja stanja, povećavamo ili smanjujemo vrijednost brojača LED svjetlina LED. U nastavku je prikazan programski kod s vremenskim intervalom od oko 5 ms (200 Hz):

Arduino kod za početnike:
/*
** Koder
** Za kontrolu svjetline LED-a koristi se enkoder tvrtke Sparkfun
*/

Int svjetlina = 120; // LED svjetlina, početak na pola
int fadeAmount = 10; // korak promjene svjetline
unsigned long currentTime;
nepredpisano dugo vrijeme petlje;
const int pin_A = 12; // igla 12
const int pin_B = 11; // pin 11
unsigned char koder_A;
unsigned char koder_B;
unsigned char encoder_A_prev=0;
void setup() (
// deklariramo pin 9 kao izlaz:
pinMode(9, IZLAZ); // postavi pin 9 kao izlaz
pinMode(pin_A, ULAZ);
pinMode(pin_B, INPUT);
trenutnovrijeme = millis();
vrijeme petlje = trenutno vrijeme;
}
void petlja() (
trenutnovrijeme = millis();
if(currentTime >= (loopTime + 5))( // provjera stanja svakih 5ms (frekvencija 200 Hz)
koder_A = digitalRead(pin_A); // čitanje stanja izlaza A enkodera
koder_B = digitalRead(pin_B); // izlaz kodera B
if((!encoder_A) && (encoder_A_prev))( // ako se stanje promijeni iz pozitivnog u nulu
if(enkoder_B) (
// izlaz B je u pozitivnom stanju, što znači da je rotacija u smjeru kazaljke na satu
// povećati svjetlinu sjaja, ne više od 255
if(svjetlina + fadeAmount )
drugo(
// izlaz B je u nultom stanju, što znači da je rotacija u smjeru suprotnom od kazaljke na satu
// smanji svjetlinu, ali ne ispod nule
if(svjetlina - fadeAmount >= 0) svjetlina -= fadeAmount;
}

}
koder_A_prev = koder_A; // spremite vrijednost A za sljedeću petlju

AnalogWrite(9, svjetlina); // postavite svjetlinu na deveti pin

Vrijeme petlje = trenutno vrijeme;
}
}

U ovom primjeru za početnike, pogledat ćemo rad s piezo emiterom za generiranje zvukova. Da bismo to učinili, uzmimo piezoelektrični senzor koji nam omogućuje generiranje zvučnih valova u frekvencijskom rasponu 20 Hz - 20 kHz.

Ovo je amaterski radio dizajn gdje su LED diode smještene po cijelom volumenu. Pomoću ove sheme možete generirati različite svjetlosne i animacijske efekte. Složeni sklopovi su čak sposobni prikazati razne trodimenzionalne riječi. Drugim riječima, ovo je elementarni surround monitor

Servo pogon je glavni element u dizajnu raznih radio upravljanih modela, a njegovo upravljanje pomoću kontrolera je jednostavno i praktično.


Upravljački program je jednostavan i intuitivan. Počinje povezivanjem datoteke koja sadrži sve potrebne naredbe za upravljanje servo pogonom. Zatim stvaramo servo objekt, na primjer servoMain. Sljedeća funkcija je setup(), u kojoj specificiramo da je servo spojen na deveti pin kontrolera.

Kodirati:
/*
Arduino Servo
*/
#uključi
Servo servoMain; // Servo objekt

Postavljanje praznine()
{
servoMain.attach(9); // Servo spojen na pin 9
}

void petlja()
{
servoMain.write(45); // Rotirajte servo lijevo za 45°
kašnjenje (2000); // Pričekajte 2000 milisekundi (2 sekunde)
servoMain.write(0); // Zakreni servo ulijevo za 0°
kašnjenje (1000); // Pauza 1 s.

kašnjenje (1500); // Pričekajte 1,5 s.
servoMain.write(135); // Rotirajte servo udesno za 135°
kašnjenje (3000); // Pauza 3 s.
servoMain.write(180); // Rotirajte servo udesno za 180°
kašnjenje (1000); // Pričekajte 1 s.
servoMain.write(90); // Rotirajte servo za 90°. Centralni položaj
kašnjenje (5000); // Pauza 5 s.
}

U glavnoj funkciji petlja(), dajemo naredbe servomotoru, s pauzama između njih.

Arduino brojački sklop na 7-segmentnom indikatoru

Ovaj jednostavni Arduino projekt za početnike uključuje stvaranje kruga brojača pomoću običnog 7-segmentnog zaslona sa zajedničkom katodom. Programski kod, dano u nastavku, omogućuje vam da počnete brojati od 0 do 9 kada pritisnete gumb.

Sedmosegmentni indikator - kombinacija je 8 LED dioda (zadnja je odgovorna za točku) sa zajedničkom katodom, koje se mogu uključiti u željenom nizu tako da stvaraju brojeve. Treba napomenuti da su u ovom krugu, pogledajte donju sliku, pinovi 3 i 8 dodijeljeni katodi.


Tablica korespondencije prikazana je desno Arduino pinovi i pinovi LED indikatora.

Kod za ovaj projekt:

brojevi bajtova = (
B11111100, B01100000, B11011010, B11110010, B01100110,
B10110110, B10111110, B11100000, B11111110, B11100110
};
void setup() (
for(int i = 2; i pinMode(i, IZLAZ);
}
pinMode(9, INPUT);
}
int brojač = 0;
bool go_by_switch = istina;
int last_input_value = LOW;
void petlja() (
if(kreni_prebacivanjem) (
int switch_input_value = digitalRead(9);
if(last_input_value == LOW && switch_input_value == HIGH) (

}
zadnja_ulazna_vrijednost = prebaciti_ulaznu_vrijednost;
) inače (
kašnjenje (500);
brojač = (brojač + 1) % 10;
}
napišiBroj(brojač);
}

Void writeNumber(int broj) (
ako (broj 9) (
povratak;
}
maska ​​bajta = brojevi;
bajt currentPinMask = B10000000;
for(int i = 2; i if(mask & currentPinMask) digitalWrite(i,HIGH);
else digitalWrite(i,LOW);
currentPinMask = currentPinMask >> 1;
}
}

Možete značajno proširiti potencijal Arduino ploča korištenjem dodatni moduli, koji se može povezati s PIN pinovima gotovo svakog uređaja. Razmotrite najpopularnije i najzanimljivije module proširenja ili štitove kako ih još nazivaju.