Comenzi Arduino. Arduino - Noțiuni de bază pentru programare

Vei avea nevoie

  • - Placa Arduino UNO,
  • - Cablu USB (USB A - USB B),
  • - Calculator personal,
  • - Dioda electro luminiscenta,
  • - rezistenta 220 Ohm,
  • - o pereche de fire de 5-10 cm,
  • - dacă este disponibil - panou.

Instrucțiuni

Descărcați mediul de dezvoltare Arduino pentru sistemul dvs. de operare (sunt acceptate Windows, Mac OS X, Linux) de pe pagina http://arduino.cc/en/Main/Software, îl puteți instala, puteți. Fișierul descărcat conține și drivere pentru plăcile Arduino.

Instalați driverul. Luați în considerare opțiunea pentru sistemul de operare Windows. Pentru a face acest lucru, așteptați până când sistemul de operare vă solicită să instalați driverul. Declin. Apăsați Win + Pauză, lansați Device Manager. Găsiți secțiunea „Porturi (COM și LPT)”. Veți vedea acolo un port numit „Arduino UNO (COMxx)”. Faceți clic dreapta pe el și selectați „Actualizați driverul”. Apoi, selectați locația driverului pe care tocmai l-ați descărcat.

Mediul de dezvoltare conține deja multe exemple pentru studierea funcționării plăcii. Deschideți exemplul „Blink”: File > Examples > 01.Basics > Blink.

Îndreptați mediul de dezvoltare către placa dvs. Pentru a face acest lucru, în meniul Instrumente > Placă, selectați „Arduino UNO”.

Selectați portul căruia este alocată placa Arduino. Pentru a afla la ce port este conectată placa, lansați Device Manager și căutați secțiunea Porturi (COM și LPT). Portul va fi indicat în paranteze după numele tablei. Dacă placa nu este în listă, încercați-o de pe computer și așteptați câteva secunde, încercați din nou.

Deconectați placa de la computer. Asamblați circuitul așa cum se arată în figură. Vă rugăm să rețineți că piciorul scurt al LED-ului trebuie să fie conectat la pinul GND, piciorul lung printr-un rezistor la pinul digital 13 al plăcii Arduino. Este mai convenabil să utilizați o placă, dar dacă nu este disponibilă, puteți conecta firele prin răsucire.
Notă importantă! Pinul digital 13 are deja propriul rezistor pe placă. Prin urmare, atunci când conectați un LED la placă, nu este necesar să utilizați un rezistor extern. Când conectați un LED la orice alți pini Arduino, utilizarea este obligatorie!

Acum puteți încărca programul în memoria plăcii. Conectați placa la computer, așteptați câteva secunde până când placa se inițializează. Faceți clic pe butonul „Încărcare” și al dumneavoastră va fi scris în memoria plăcii Arduino. Programarea cu Arduino este foarte intuitivă și deloc dificilă. Uită-te la imagine - există mici explicații în comentariile programului. Acest lucru este suficient pentru a vă face să începeți primul experiment.

Video pe tema

Notă

Aveți grijă când lucrați cu placa Arduino - acesta este un produs electronic care necesită o manipulare atentă. Există conductori expuși pe partea de jos a plăcii, iar dacă așezați placa pe o suprafață conductoare, există șansa de a arde placa. De asemenea, nu atingeți placa cu mâinile umede sau ude și evitați zonele umede atunci când lucrați.

Sfaturi utile

Există multe site-uri pe Internet dedicate Arduino. Citește, stăpâne, nu-ți fie frică să experimentezi și să înveți lucruri noi!

Surse:

  • LED intermitent

Programarea atrage și interesează mulți oameni moderni, în special profesioniști tineri și începători, care abia încep să aleagă o viitoare profesie. Ei se confruntă adesea cu întrebarea - de unde să înceapă în învățarea programarii? Dacă decideți să învățați cum să programați, nu ar trebui să faceți o greșeală comună - nu vă ocupați imediat de sisteme și limbaje complexe (de exemplu, C). A începe cu un limbaj prea complex vă poate oferi o impresie greșită despre programare în general. Începătorilor li se recomandă să lucreze cu cele mai simple sisteme - de exemplu, să învețe să scrie programe în BASIC. Învățarea acestei limbi vă va permite să obțineți rezultate bune într-un timp scurt. PureBasic este ușor de învățat - acest limbaj versatil, puternic compilat, vă va ajuta să înțelegeți elementele de bază ale programării și să vă îmbunătățiți abilitățile în viitor.

Instrucțiuni

Vă poate dura aproximativ un an pentru a învăța elementele de bază ale programării. Veți învăța caracteristicile programării procedurale și orientate pe obiecte, principiile de lucru cu arbori binari, matrice, liste etc. Abia după ce a învățat elementele de bază, treceți la sarcini mai complexe.

Vizitați site-urile web ale dezvoltatorilor de limbaje de programare și studiați documentația. Asigurați-vă că comunicați pe forumurile pentru programatori, de obicei, acestea răspund la majoritatea întrebărilor începătorilor.

Matematică

Dacă vrei să înveți să programezi, trebuie doar să știi matematică. În procesul de lucru, veți întâlni un număr mare de probleme care nu pot fi rezolvate fără cunoașterea elementelor de bază ale acestei științe. Există un număr mare de sisteme și teorii matematice (seria Fourier, numere Fibonacci etc.) care simplifică foarte mult procesul de programare.

Învățarea nu se termină niciodată

Evoluția limbajelor de programare nu stă pe loc; Încercați să citiți cât mai multă literatură legată de domeniul de programare în care intenționați să lucrați. Căutați întotdeauna modalități alternative de a rezolva problemele care apar, acest lucru vă va ajuta să îmbunătățiți constant eficiența codului pe care îl creați. Discutați cu programatori profesioniști; aceștia vor putea întotdeauna să vă sfătuiască cum să rezolvați o anumită problemă. Citirea codurilor lor vă va ajuta foarte mult.
Este imposibil să păstrezi totul în minte tot timpul. Simțiți-vă liber să utilizați cărțile de referință în limbajul de programare.

Problemele de programare, oricât de simple ar fi, nu sunt niciodată rezolvate deodată. Ele necesită întotdeauna dezvoltarea unui algoritm corect de acțiuni care este eficient într-o anumită situație specifică. Găsirea algoritmilor optimi necesită practică și antrenament constant. Încercați să rezolvați mai des micile probleme de programare (le puteți găsi pe site-uri specializate), acest lucru vă va ajuta să vă perfecționați treptat abilitățile în acest domeniu.

Introducere

Freeduino/Arduino este programat într-un limbaj de programare special - se bazează pe C/C++ și vă permite să utilizați oricare dintre funcțiile sale. Strict vorbind, nu există un limbaj Arduino separat, la fel cum nu există un compilator Arduino - programele scrise sunt convertite (cu modificări minime) într-un program în C/C++ și apoi compilate de compilatorul AVR-GCC. Deci, de fapt, se folosește o variantă de C/C++ specializată pentru microcontrolere AVR.

Diferența este că obțineți un mediu de dezvoltare simplu și un set de biblioteci de bază care simplifică accesul la perifericele situate „la bord” microcontrolerului.

De acord, este foarte convenabil să începeți să lucrați cu un port serial la o viteză de 9600 de biți pe secundă, efectuând un apel într-o singură linie:

Serial.begin(9600);

Și atunci când utilizați C/C++ „nud”, ar trebui să vă ocupați de documentația pentru microcontroler și să apelați ceva de genul acesta:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Iată o scurtă prezentare a principalelor funcții și caracteristici ale programării Arduino. Dacă nu sunteți familiarizat cu sintaxa limbajelor C/C++, vă recomandăm să consultați orice literatură despre această problemă sau surse de pe Internet.

Pe de altă parte, toate exemplele prezentate sunt foarte simple și, cel mai probabil, nu veți avea dificultăți în înțelegerea textelor sursă și în redactarea propriilor programe chiar și fără a citi literatură suplimentară.

O documentație mai completă (în engleză) este prezentată pe site-ul oficial al proiectului - http://www.arduino.cc. Există, de asemenea, un forum, link-uri către biblioteci suplimentare și descrierile acestora.

Prin analogie cu descrierea de pe site-ul oficial al proiectului Arduino, un „port” se referă la un contact de microcontroler conectat la un conector sub numărul corespunzător. În plus, există un port de comunicație serial (port COM).

Structura programului

În programul dumneavoastră trebuie să declarați două funcții principale: setup() și loop().

Funcția setup() este apelată o dată, după fiecare pornire sau resetare a plăcii Freeduino. Folosiți-l pentru a inițializa variabile, pentru a seta moduri de operare ale porturilor digitale etc.

Funcția loop() execută secvențial comenzile descrise în corpul său din nou și din nou. Acestea. După finalizarea funcției, va fi apelată din nou.

Să ne uităm la un exemplu simplu:

void setup() // setările inițiale
{
beginSerial(9600); // setează viteza portului serial la 9600 bps
pinMode(3, INPUT); // setarea celui de-al 3-lea port pentru introducerea datelor
}

// Programul verifică al 3-lea port pentru prezența unui semnal pe el și trimite un răspuns către
// ca mesaj text către portul serial al computerului
void loop() // corpul programului
{
if (digitalRead(3) == HIGH) // condiție pentru interogarea celui de-al 3-lea port
serialWrite("H"); // trimite un mesaj sub forma literei „H” la portul COM
altfel
serialWrite("L"); // trimite un mesaj sub forma literei "L" la portul COM
întârziere (1000); // întârziere 1 sec.
}

pinMode(port, mod);

Descriere:

Configura portul specificat pentru a intra sau a ieși un semnal.

Opțiuni:

port – numărul portului al cărui mod doriți să îl setați (o valoare întreagă de la 0 la 13).

modul - fie INPUT (intrare) fie OUTPUT (ieșire).

pinMode(13, IEȘIRE); //Al 13-lea pin va fi ieșirea
pinMode(12, INPUT); //iar al 12-lea este intrarea

Notă:

Intrările analogice pot fi utilizate ca intrări/ieșiri digitale prin accesarea lor folosind numerele 14 (intrare analogică 0) la 19 (intrare analogică 5)

digitalWrite(port, valoare);

Descriere:

Setează nivelul de tensiune la ridicat (HIGH) sau scăzut (LOW) pe portul specificat.

Opțiuni:

port: numărul portului

valoare: HIGH sau LOW

digitalWrite(13, HIGH); // setați pinul 13 la starea „înalt”.

valoare = digitalRead(port);

Descriere:

Citește valoarea pe portul specificat

Opțiuni:

port: numărul portului interogat

Valoare returnată: returnează valoarea curentă pe portul (HIGH sau LOW) de tip int

int val;
val = digitalRead(12); // sondaj al 12-lea pin

Notă:

Dacă nu există nimic conectat la portul de citire, atunci funcția digitalRead() poate returna valorile HIGH sau LOW în mod neregulat.

Intrare/ieșire semnal analogic

valoare = analogRead(port);

Descriere:

Citește o valoare de la portul analog specificat. Freeduino conține 6 canale, convertor analog-digital de 10 biți fiecare. Aceasta înseamnă că tensiunea de intrare de la 0 la 5V este convertită într-o valoare întreagă de la 0 la 1023. Rezoluția citirii este: 5V/1024 valori = 0,004883 V/valoare (4,883 mV). Este nevoie de aproximativ 100 nS (0,0001 C) pentru a citi o valoare de intrare analogică, astfel încât rata maximă de citire este de aproximativ 10.000 de ori pe secundă.

Opțiuni:

Valoare returnată: returnează un număr int în intervalul de la 0 la 1023 citit de la portul specificat.

int val;
val = analogRead(0); // citește valoarea la a 0-a intrare analogică

Notă:

Porturile analogice sunt definite ca semnal de intrare în mod implicit și, spre deosebire de porturile digitale, nu trebuie să fie configurate prin apelarea funcției pinMode.

analogWrite(port, valoare);

Descriere:

Emite o valoare analogică către port. Această funcție funcționează pe: 3, 5, 6, 9, 10 și 11 porturi digitale Freeduino.

Poate fi folosit pentru a schimba luminozitatea unui LED, a controla un motor etc. După apelarea funcției analogWrite, portul corespunzător începe să funcționeze în modul de modulare a lățimii impulsului de tensiune până când există un alt apel la funcția analogWrite (sau funcțiile digitalRead / digitalWrite pe același port).

Opțiuni:

port: numărul intrării analogice interogate

valoare: un număr întreg între 0 și 255. O valoare de 0 generează 0 V pe portul specificat; o valoare de 255 generează +5V pe portul specificat. Pentru valori între 0 și 255, portul începe să alterneze rapid între nivelurile de tensiune 0 și +5 V - cu cât valoarea este mai mare, cu atât portul generează mai des nivelul HIGH (5 V).

analogWrite(9, 128); // setați pinul 9 la o valoare echivalentă cu 2,5V

Notă:

Nu este nevoie să apelați pinMode pentru a seta portul să iasă semnale înainte de a apela analogWrite.

Frecvența de generare a semnalului este de aproximativ 490 Hz.

timp = milis();

Descriere:

Returnează numărul de milisecunde de când Freeduino a executat programul curent. Contorul se va depăși și se va reseta după aproximativ 9 ore.

Valoare returnată: returnează o valoare lungă nesemnată

nesemnat de mult timp; // declararea unei variabile de timp de tip unsigned long
timp = milis(); // transferă numărul de milisecunde

întârziere (timp_ms);

Descriere:

Întrerupe programul pentru numărul specificat de milisecunde.

Opțiuni:

time_ms – timpul de întârziere al programului în milisecunde

întârziere (1000); //pauză 1 secundă

întârziereMicrosecunde

delayMicrosecunde(timp_μs);

Descriere:

Întrerupe programul pentru numărul specificat de microsecunde.

Opțiuni:

time_μs – timpul de întârziere al programului în microsecunde

delayMicrosecunde(500); //pauză 500 de microsecunde

pulseIn(port, valoare);

Descriere:

Citește un impuls (înalt sau scăzut) de la un port digital și returnează durata pulsului în microsecunde.

De exemplu, dacă parametrul „valoare” este setat la HIGH la apelarea funcției, atunci pulseIn() așteaptă să ajungă un nivel ridicat de semnal pe port. Din momentul în care sosește, numărătoarea inversă începe până când un nivel scăzut al semnalului este primit la port. Funcția returnează lungimea pulsului (nivel ridicat) în microsecunde. Funcționează cu impulsuri de la 10 microsecunde până la 3 minute. Rețineți că această funcție nu va returna un rezultat până când nu este detectat un puls.

Opțiuni:

port: numărul portului din care citim pulsul

valoare: tip puls HIGH sau LOW

Valoarea returnată: returnează durata pulsului în microsecunde (tip int)

int durata; // declararea unei variabile durate de tip int
durata = pulseIn(pin, HIGH); // măsoară durata pulsului

Transfer de date în serie

Freeduino are un controler încorporat pentru transmiterea datelor în serie, care poate fi folosit atât pentru comunicarea între dispozitivele Freeduino/Arduino, cât și pentru comunicarea cu un computer. Pe un computer, conexiunea corespunzătoare este reprezentată de un port USB COM.

Comunicarea are loc prin porturile digitale 0 și 1 și, prin urmare, nu le veți putea folosi pentru I/O digitale dacă utilizați funcții seriale.

Serial.begin(baud_rate);

Descriere:

Setează rata de transfer a informațiilor portului COM în biți pe secundă pentru transmisia de date în serie. Pentru a comunica cu un computer, utilizați una dintre aceste viteze standardizate: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 sau 115200. Puteți, de asemenea, să comunicați cu alte microcontroloare. porturile 0 și 1.

Opțiuni:

baud_rate: Rata de flux de date în biți pe secundă.

Serial.begin(9600); //setează viteza la 9600 bps

Serial.disponibil

count = Serial.available();

Descriere:

Octeții primiți prin portul serial ajung în bufferul microcontrolerului, de unde programul dumneavoastră îi poate citi. Funcția returnează numărul de octeți acumulați în buffer. Bufferul serial poate stoca până la 128 de octeți.

Valoare returnată:

Returnează o valoare int - numărul de octeți disponibili pentru citire în memoria tampon serial sau 0 dacă nu este nimic disponibil.

if (Serial.available() > 0) ( // Dacă există date în buffer
// aici ar trebui să existe recepția și procesarea datelor
}

char = Serial.read();

Descriere:

Citește următorul octet din bufferul portului serial.

Valoare returnată:

Primul octet disponibil de date primite de la portul serial sau -1 dacă nu există date de intrare.

incomingByte = Serial.read(); // citire octet

Descriere:

Șterge bufferul de intrare a portului serial. Datele din buffer se pierd, iar apelurile ulterioare către Serial.read() sau Serial.available() vor avea sens pentru datele primite după apelul Serial.flush().

Serial.flush(); // Ștergeți memoria tampon - începeți să primiți date „de la zero”

Descriere:

Datele de ieșire pe portul serial.

Opțiuni:

Funcția are mai multe forme de apel în funcție de tipul și formatul datelor de ieșire.

Serial.print(b, DEC) tipărește un șir ASCII - reprezentarea zecimală a numărului b.

int b = 79;

Serial.print(b, HEX) tipărește un șir ASCII - reprezentarea hexazecimală a numărului b.

int b = 79;

Serial.print(b, OCT) tipărește un șir ASCII - reprezentarea octală a numărului b.

int b = 79;
Serial.print(b, OCT); //va scoate șirul „117” către port

Serial.print(b, BIN) tipărește un șir ASCII - reprezentarea binară a numărului b.

int b = 79;
Serial.print(b, BIN); //va scoate șirul „1001111” în port

Serial.print(b, BYTE) tipărește octetul inferior al lui b.

int b = 79;
Serial.print(b, BYTE); //va afișa numărul 79 (un octet). În monitor
//din portul serial obținem simbolul „O” - its
//codul este 79

Serial.print(str) dacă str este un șir de caractere sau o matrice de caractere, trimite str la byte-ul portului COM.

octeți de caractere = (79, 80, 81); //matrice de 3 octeți cu valorile 79,80,81
Serial.print("Aici octeții noștri:"); // scoate linia „Aici octeții noștri:”
Serial.print(octeți); //imite 3 caractere cu codurile 79,80,81 –
//acestea sunt caracterele „OPQ”

Serial.print(b) dacă b este de tip octet sau char, imprimă numărul b însuși în port.

char b = 79;
Serial.print(b); //va scoate caracterul „O” în port

Serial.print(b) dacă b este de tip întreg, tipărește reprezentarea zecimală a lui b în port.

int b = 79;
Serial.print(b); //va scoate șirul „79” către port

Descriere:

Funcția Serial.println este similară cu funcția Serial.print și are aceleași opțiuni de apel. Singura diferență este că două caractere suplimentare sunt scoase după date - un caracter de întoarcere carucior (ASCII 13, sau „\r”) și un caracter newline (ASCII 10 sau „\n”).

Exemplul 1 și exemplul 2 vor scoate același lucru în port:

int b = 79;
Serial.print(b, DEC); //va scoate șirul „79” către port
Serial.print("\r\n"); //va afișa caracterele „\r\n” – line feed
Serial.print(b, HEX); //va scoate șirul „4F” către port
Serial.print("\r\n");//va imprima caracterele "\r\n" – line feed

int b = 79;
Serial.println(b, DEC); //va scoate șirul „79\r\n” către port
Serial.println(b, HEX); //va scoate șirul „4F\r\n” în port

În monitorul portului serial obținem.

Arduino, de fapt, este dezvoltarea de proiecte unice pentru toate ocaziile. După cum am scris deja, Arduino este un fel de placă cu un microcontroler plasat pe ea, care poate fi programată fără probleme.

Scopul final al acestor manipulări este de a asigura o gestionare ușoară a numeroaselor dispozitive externe. Această placă interacționează cu lumea exterioară prin multe suplimente:

  • senzori,
  • LED-uri,
  • motoare,
  • Internet
  • și așa mai departe.

Acest lucru îl va face o platformă destul de universală pentru multe proiecte de niveluri foarte diferite. În prezent, există destul de multe microcontrolere diferite, printre care Arduino este deosebit de popular, care este asociat cu postarea activă a celor mai incredibile proiecte și dezvoltări în rețea.

Pentru a implementa cu ușurință una dintre milioanele de idei, puteți utiliza cu ușurință cele mai actuale informații care sunt disponibile independent pe multe site-uri. Mai jos este un exemplu de implementare a uneia dintre aceste idei - un clopoțel de Crăciun care poate fi controlat:

Vom vedea cum să o facem într-una dintre lecțiile următoare.

În cazul în care nu aveți nici măcar puțină experiență de lucru cu microcontrolere (programare și configurare), datorită caracteristicilor, puteți învăța cu ușurință pe cont propriu prin efectuarea de experimente relativ scurte. Mai jos îmi propun să analizez câteva dintre capacitățile Arduino, exemple de unde este cel mai bine să folosiți acest constructor unic.

Schițe Arduino

De fapt, programul pentru un microcontroler de acest tip este numit schiță. Orice astfel de program constă direct din două funcții principale.

Înființat

Setup() – este prevăzut ca în cadrul acestei funcții, utilizatorul să poată seta toate setările cheie.

De exemplu, se determină ce pini vor funcționa ulterior ca ieșire sau intrare, determinând conexiunea unor biblioteci specifice, chiar inițialând variabile, toate acestea fiind determinate prin utilizarea acestei funcționalități.

Lansarea se efectuează strict o dată pe parcursul întregii schițe, când se notează chiar începutul execuției acestui program.

Buclă

Loop() - este funcția principală care este efectuată imediat după lansare (în acest caz este utilizată înființat()).

De fapt, acesta este programul în sine, această funcție va rula la infinit până când utilizatorul oprește alimentarea dispozitivului.

Exemple de schițe

Puteți lua în considerare câteva exemple de schițe care vor deveni un ghid pentru funcționarea ulterioară a echipamentului. Voi încerca să implementez fiecare dintre exemple în materialele următoare. Astăzi vom vorbi doar despre posibilități.

Exemplul 1

Una dintre schițele interesante poate fi folosită pentru a afișa timpul real de funcționare al controlerului, urmat de adoptarea comenzii „clipire”, care are scopul de a inițializa procedura de clipire a elementelor LED.

De fapt, nu este nimic deosebit de util în schiță, dar include și posibilitatea de a scoate aleatoriu o anumită expresie „Date primite” care poate fi folosită în viitor direct pentru testarea și analiza regulilor stabilite pentru funcționarea unui modular element.

Exemplul 2

Conectarea unui special senzor de nivel curent al apei, senzor de ploaie. Pentru a implementa un anumit proiect, trebuie să aveți:

Senzorul de apă în sine,
- controler Arduino,
- un set de fire de conectare,
- un calculator cu cabluri si program IDE, placa de dezvoltare corespunzatoare.

Drept urmare, datorită configurației relativ simple a microcontrolerului, se asigură crearea condițiilor optime pentru funcționarea senzorului.

Exemplul 3

Posibilitatea de implementare ieșire de caractere, instalarea ulterioară a fonturilor pe LCD5110, care va oferi cel mai ușor și mai fiabil control asupra stării echipamentului în sine.

Fonturile sunt scoase și modificate folosind capabilitățile Arduino. În acest caz, va trebui să utilizați o bibliotecă de date gata făcută, precum și codul sursă.

Exemple de utilizare a Arduino

Privind numeroase exemple de Arduino, nu putem decât să fii uimit de abordarea creativă a dezvoltatorilor de proiecte și de imaginația extraordinară. De fapt, poți crea cele mai incredibile lucruri, de exemplu, la fel player muzical cu set LED.

O astfel de dezvoltare va fi foarte apreciată de iubitorii de muzică, permițându-le să creeze nu doar o coloană sonoră originală, ci și să le ofere posibilitatea de a se bucura de o combinație de culori strălucitoare și extraordinară.

Chiar și animalele de companie, de exemplu, pisicile, vor putea evalua proiectele. Motivul va fi alimentator automat pentru pisici, care poate fi dezvoltat pe baza unui CD player convențional, de exemplu, și nu numai.

Printre avantajele acestui echipament, este necesar să se remarce posibilitatea de alimentare dozată a animalului, acum nu este nevoie să se verifice regulat cantitatea de hrană din bol. Se ajustează ora de deschidere, după care pisica va primi alimente hrănitoare strict după programul stabilit, bucurându-se de ideea originală a stăpânului său.

Dacă vorbim despre proiecte complet neobișnuite, putem evidenția echipament automat pentru flori, care acum va putea transmite informații despre starea sa actuală direct către Twitter. Toate acestea se realizează prin utilizarea capacităților microcontrolerului Arduino, care vă va permite să transferați date direct folosind o conexiune la Internet. După cum puteți vedea, exemplele pot fi foarte diferite, voi încerca să acord atenție fiecăruia dintre ele în articolele următoare.

Limbajul de programare Arduino pentru începători este prezentat în detaliu în tabelul de mai jos. Microcontrolerul Arduino este programat într-un limbaj de programare special bazat pe C/C++. Limbajul de programare Arduino este o variantă a C++, cu alte cuvinte, nu există un limbaj de programare separat pentru Arduino. Puteți descărca cartea PDF la sfârșitul paginii.

În Arduino IDE, toate schițele scrise sunt compilate într-un program în C/C++ cu modificări minime. Compilatorul Arduino IDE simplifică foarte mult scrierea programelor pentru această platformă, iar crearea de dispozitive pe Arduino devine mult mai accesibilă persoanelor care nu au cunoștințe extinse despre limbajul C/C++. Mai jos vom oferi o scurtă referință care descrie principalele funcții ale limbajului Arduino cu exemple.

Referință detaliată la limbajul Arduino

Limbajul poate fi împărțit în patru secțiuni: instrucțiuni, date, funcții și biblioteci.

Limbajul Arduino Exemplu Descriere

Operatori

înființat() void setup()
{
pinMode(3, INPUT);
}
Funcția este folosită pentru a inițializa variabile, pentru a determina modurile de funcționare ale pinii de pe placă etc. Funcția rulează o singură dată, după fiecare alimentare a microcontrolerului.
buclă() buclă goală ()
{
digitalWrite(3, HIGH);
întârziere (1000);
digitalWrite(3, LOW);
întârziere (1000);
}
Funcția de buclă se desfășoară, permițând programului să efectueze calcule și să reacționeze la calcule. Funcțiile setup() și loop() trebuie să fie prezente în fiecare schiță, chiar dacă aceste instrucțiuni nu sunt folosite în program.

Declarații de control

dacă
dacă(x>
dacă (x< 100) digitalWrite (3, LOW );
Instrucțiunea if este utilizată în combinație cu operatorii de comparare (==, !=,<, >) și verifică dacă condiția este adevărată. De exemplu, dacă valoarea variabilei x este mai mare de 100, atunci LED-ul de la ieșirea 13 se aprinde dacă este mai mic, LED-ul se stinge.
daca..altfel
if (x > 100) digitalWrite (3, HIGH );
else digitalWrite(3, LOW);
Declarația else vă permite să efectuați o altă verificare decât cea specificată în if, pentru a efectua mai multe verificări care se exclud reciproc. Dacă niciunul dintre verificări nu primește un rezultat ADEVĂRAT, atunci blocul de instrucțiuni din else este executat.
comutator...caz
comutator(x)
{


cazul 3: rupere ;

}
La fel ca o instrucțiune if, o instrucțiune switch controlează un program permițându-vă să specificați acțiuni care vor fi efectuate în diferite condiții. Break este o comandă pentru a ieși dintr-o instrucțiune implicită, dacă nu este selectată nicio alternativă.
pentru void setup()
{
pinMode(3, OUTPUT);
}
buclă goală ()
{
pentru (int i=0; i<= 255; i++){
analogWrite(3, i);
întârziere (10);
}
}
Construcția for este folosită pentru a repeta instrucțiunile cuprinse între acolade. De exemplu, diminuarea lină a unui LED. Antetul buclei for este format din trei părți: for (inițializare; condiție; increment) - inițializarea se efectuează o dată, apoi condiția este verificată, dacă condiția este adevărată, atunci se realizează incrementul. Bucla se repetă până când condiția devine falsă.
in timp ce buclă goală ()
{
în timp ce (x< 10)
{
x = x + 1;
Serial.println(x);
întârziere (200);
}
}
Instrucțiunea while este folosită ca o buclă care se va executa atâta timp cât condiția din paranteze este adevărată. În exemplu, instrucțiunea while loop va repeta codul între paranteze la nesfârșit până când x este mai mic de 10.
face în timp ce buclă goală ()
{
do
{
x = x + 1;
întârziere (100);
Serial.println(x);
}
în timp ce (x< 10);
întârziere (900);
}
Instrucțiunea do...while loop funcționează în același mod ca bucla while. Totuși, dacă expresia dintre paranteze este adevărată, bucla continuă mai degrabă decât iese din buclă. În exemplul de mai sus, dacă x este mai mare de 10, operația de adăugare va continua, dar cu o pauză de 1000 ms.
pauză
continua
comutator(x)
{
cazul 1: digitalWrite (3, HIGH );
cazul 2: digitalWrite (3, LOW );
cazul 3: rupere ;
cazul 4: continua ;
implicit: digitalWrite (4, HIGH);
}
Break este folosit pentru a forța ieșirea din buclele switch, do, for și while fără a aștepta finalizarea buclei.
Instrucțiunea continue omite instrucțiunile rămase în pasul curent al buclei.

Sintaxă

;
(punct şi virgulă)

digitalWrite(3, HIGH);
Un punct și virgulă este folosit pentru a marca sfârșitul unei declarații. Uitarea punctului și virgulă la sfârșitul unei linii are ca rezultat o eroare de compilare.
{}
(bretele)
void setup()
{
pinMode(3, INPUT);
}
Paranteza de deschidere „(” trebuie urmată de paranteza de închidere „)”. Parantezele nepotrivite pot duce la erori ascunse și de neînțeles la compilarea unei schițe.
//
(un comentariu)
x = 5; // un comentariu

Buna ziua! Sunt Alikin Alexander Sergeevich, profesor de educație suplimentară, conduc cluburile „Robotică” și „Inginerie radio” la Centrul pentru Tehnologia Tineretului și Tineretului din Labinsk. Aș dori să vorbesc puțin despre o metodă simplificată de programare a Arduino folosind programul ArduBlock.

Am introdus acest program în procesul educațional și sunt încântat de rezultat, este foarte solicitat în rândul copiilor, mai ales atunci când scriu programe simple sau pentru crearea unei etape inițiale de programe complexe. ArduBlock este un mediu de programare grafic, adică toate acțiunile sunt efectuate cu imagini desenate cu acțiuni semnate în limba rusă, ceea ce simplifică foarte mult învățarea platformei Arduino. Copiii din clasa a II-a pot stăpâni cu ușurință lucrul cu Arduino datorită acestui program.

Da, cineva ar putea spune că Scratch încă există și este, de asemenea, un mediu grafic foarte simplu pentru programarea Arduino. Dar Scratch nu flashează Arduino, ci îl controlează doar printr-un cablu USB. Arduino este dependent de computer și nu poate funcționa autonom. Atunci când vă creați propriile proiecte, autonomia este principalul lucru pentru Arduino, mai ales atunci când creați dispozitive robotizate.

Chiar și roboții LEGO cunoscuți, precum NXT sau EV3, nu mai sunt atât de interesanți pentru studenții noștri odată cu apariția programului ArduBlock în programarea Arduino. Arduino este, de asemenea, mult mai ieftin decât orice trusă de construcție LEGO și multe componente pot fi pur și simplu luate din electronicele de uz casnic vechi. Programul ArduBlock va ajuta nu numai începătorii, ci și utilizatorii activi ai platformei Arduino.

Deci, ce este ArduBlock? După cum am spus deja, acesta este un mediu de programare grafică. Aproape complet tradus în rusă. Dar punctul culminant al ArduBlock nu este doar acesta, ci și faptul că programul ArduBlock pe care l-am scris se convertește în codul IDE Arduino. Acest program este integrat în mediul de programare Arduino IDE, adică este un plugin.

Mai jos este un exemplu de LED intermitent și un program convertit în Arduino IDE. Toate lucrările cu programul sunt foarte simple și orice student o poate înțelege.

Ca urmare a lucrului cu programul, puteți nu numai să programați Arduino, ci și să studiați comenzi pe care nu le înțelegem în formatul text al IDE-ului Arduino, dar dacă vă este prea lene să scrieți comenzi standard, puteți utiliza rapid mouse-ul pentru a schița un program simplu în ArduBlok și a-l depana în Arduino IDE.

Pentru a instala ArduBlok, trebuie mai întâi să descărcați și să instalați Arduino IDE de pe site-ul oficial Arduino și să înțelegeți setările atunci când lucrați cu placa Arduino UNO. Cum să faceți acest lucru este descris pe același site web sau pe Amperka, sau vizionați-l pe YouTube. Ei bine, când toate acestea sunt descoperite, trebuie să descărcați ArduBlok de pe site-ul oficial, aici. Nu recomand să descărcați cele mai recente versiuni, sunt foarte complicate pentru începători, dar versiunea din 2013-07-12 este cea mai bună, acest fișier este cel mai popular acolo.

Apoi, redenumiți fișierul descărcat în ardublock-all și în folderul „documente”. Creăm următoarele foldere: Arduino > instrumente > ArduBlockTool > instrument și în acesta din urmă aruncăm fișierul descărcat și redenumit. ArduBlok funcționează pe toate sistemele de operare, chiar și pe Linux, eu personal l-am testat pe XP, Win7, Win8, toate exemplele sunt pentru Win7. Instalarea programului este aceeași pentru toate sistemele.

Ei bine, ca să spun simplu, am pregătit o arhivă pe discul 7z Mail, despachetând care vei găsi 2 foldere. Într-unul există deja un program Arduino IDE care funcționează, iar în celălalt folder conținutul trebuie trimis în folderul documente.

Pentru a funcționa în ArduBlok, trebuie să rulați IDE-ul Arduino. Apoi mergem la fila Instrumente și acolo găsim articolul ArduBlok, facem clic pe el - și iată-l, scopul nostru.

Acum să ne uităm la interfața programului. După cum înțelegeți deja, nu există setări în el, dar există o mulțime de pictograme pentru programare și fiecare dintre ele poartă o comandă în format text Arduino IDE. Noile versiuni au și mai multe pictograme, așa că înțelegerea celei mai recente versiuni de ArduBlok este dificilă și unele dintre pictograme nu sunt traduse în rusă.

În secțiunea „Management” vom găsi o varietate de cicluri.

În secțiunea „Porturi”, putem gestiona valorile porturilor, precum și emițătorul de sunet, servo sau senzorul de proximitate ultrasonic conectat la acestea.

În secțiunea „Numere/Constante”, putem selecta valori digitale sau crea o variabilă, dar este puțin probabil să utilizați ceea ce este mai jos.

În secțiunea „Operatori” vom găsi toți operatorii de comparare și calcul necesari.

Secțiunea Utilități utilizează în principal pictograme cronometrate.

„TinkerKit Bloks” este secțiunea pentru senzorii TinkerKit achiziționați. Noi, desigur, nu avem un astfel de set, dar asta nu înseamnă că pictogramele nu sunt potrivite pentru alte seturi, dimpotrivă, este foarte convenabil pentru băieți să folosească pictograme precum aprinderea unui LED sau a unui buton. Aceste semne sunt folosite în aproape toate programele. Dar au o particularitate - atunci când le selectați, există pictograme incorecte care indică porturi, așa că trebuie să le eliminați și să înlocuiți pictograma din secțiunea „numere/constante” din partea de sus a listei.

„Robot DF” - această secțiune este utilizată dacă senzorii specificați în ea sunt prezenți, uneori sunt găsiți. Iar exemplul nostru de astăzi nu face excepție, avem un „Comutator IR reglabil” și un „Senzor de linie”. „Senzorul de linie” este diferit de cel din imagine, deoarece este de la compania Amperka. Acțiunile lor sunt identice, dar senzorul Ampere este mult mai bun, deoarece are un regulator de sensibilitate.

„Seedstudio Grove” - Nu am folosit niciodată senzorii din această secțiune, deși există doar joystick-uri. În versiunile noi, această secțiune a fost extinsă.

Iar ultima secțiune este „Ktul de linkuri”. Nu am dat peste senzorii prezentați în ea.

Aș dori să arăt un exemplu de program pe un robot care se mișcă de-a lungul unei benzi. Robotul este foarte simplu, atât de asamblat, cât și de achiziționat, dar pe primul loc. Să începem cu achiziția și asamblarea acestuia.

Iată setul de piese în sine, totul a fost achiziționat de pe site-ul Amperka.

  1. AMP-B001 Scut motor (2 canale, 2 A) 1.890 RUB
  2. AMP-B017 Troyka Shield 1.690 RUB
  3. AMP-X053 Compartiment baterie 3×2 AA 1 60 RUR
  4. AMP-B018 Senzor digital de linie 2.580 RUB
  5. ROB0049 Platformă cu două roți MiniQ 1.1890 RUB
  6. SEN0019 Senzor de obstacol cu ​​infraroșu 1.390 RUB
  7. FIT0032 Suport pentru senzor infraroșu obstacol RUB 1,90
  8. A000066 Arduino Uno 1 1150 RUR

Mai întâi, să asamblam platforma cu roți și să lipim firele la motoare.

Apoi vom instala rack-uri pentru a monta placa Arduino UNO, care au fost luate de pe o placa de baza veche sau alte suporturi similare.

Apoi atașăm placa Arduino UNO la aceste rafturi, dar nu putem fixa un șurub - conectorii sunt în cale. Puteți, desigur, să le dezlipiți, dar acest lucru este la discreția dvs.

Apoi atașăm senzorul de obstacol în infraroșu la suportul său special. Vă rugăm să rețineți că regulatorul de sensibilitate este situat în partea de sus, acesta este pentru ușurință de reglare.

Acum instalăm senzori digitali de linie, aici va trebui să căutați câteva șuruburi și 4 piulițe pentru ele. Instalăm două piulițe între platformă în sine și senzorul de linie și fixăm senzorii cu restul.

Apoi instalăm Motor Shield, sau altfel îl puteți numi driverul motorului. În cazul nostru, acordați atenție jumperului. Nu vom folosi o sursă de alimentare separată pentru motoare, așa că este instalată în această poziție. Partea inferioară este sigilată cu bandă electrică, astfel încât să nu existe scurtcircuite accidentale de la conectorul USB Arduino UNO, pentru orice eventualitate.

Instalăm Troyka Shield deasupra motorului Shield. Este necesar pentru confortul conectării senzorilor. Toți senzorii pe care îi folosim sunt digitali, astfel încât senzorii de linie sunt conectați la porturile 8 și 9, deoarece sunt numiți și pini, iar senzorul de obstacol în infraroșu este conectat la portul 12. Asigurați-vă că rețineți că nu puteți utiliza porturile 4, 5, 6, 7 deoarece sunt folosite de Motor Shield pentru a controla motoarele. Chiar am pictat special peste aceste porturi cu un marker roșu, astfel încât elevii să-și poată da seama.

Dacă ați observat deja, am adăugat o bucșă neagră, pentru orice eventualitate, pentru ca compartimentul bateriei pe care l-am instalat să nu zboare. Și, în sfârșit, asigurăm întreaga structură cu o bandă elastică obișnuită.

Există 2 tipuri de conexiuni la compartimentul bateriei. Prima conexiune a firelor la Troyka Shield. De asemenea, este posibil să lipiți ștecherul de alimentare și să îl conectați la placa Arduino UNO în sine.

Robotul nostru este gata. Înainte de a începe programarea, va trebui să învățați cum funcționează totul, și anume:
- Motoare:
Porturile 4 și 5 sunt folosite pentru a controla un motor, iar 6 și 7 pe celălalt;
Reglam viteza de rotatie a motoarelor folosind PWM pe porturile 5 si 6;
Înainte sau înapoi, trimițând semnale către porturile 4 și 7.
- Senzori:
Toți suntem digitali, așa că dau semnale logice sub formă de 1 sau 0;
Iar pentru a le regla, au regulatoare speciale, iar cu ajutorul unei surubelnite potrivite pot fi calibrate.

Detalii pot fi găsite la Amperke. De ce aici? Pentru că există o mulțime de informații despre lucrul cu Arduino.

Ei bine, probabil că am privit totul superficial, l-am studiat și, bineînțeles, am asamblat robotul. Acum trebuie programat, iată-l - programul mult așteptat!

Și programul a fost convertit în Arduino IDE:

Void setup() (pinMode(8, INPUT); pinMode(12, INPUT); pinMode(9, INPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); pinMode(5, OUTPUT); pinMode(6) , OUTPUT ) void loop() ( if (digitalRead(12)) ( if (digitalRead(8)) ( if (digitalRead(9)) ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite( 6, 255); digitalWrite(7, HIGH); else ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7, LOW); ) else ( if (digitalRead); (9)) ( digitalWrite(4, LOW); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7, HIGH); ) else ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7, HIGH); else ( digitalWrite(4, HIGH); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7, HIGH); )

În concluzie, vreau să spun că acest program este pur și simplu o mană divină pentru educație, chiar și pentru auto-studiu, vă va ajuta să învățați comenzile Arduino IDE; Principalul punct culminant este faptul că există mai mult de 50 de pictograme de instalare, începe să „se defecteze”. Da, într-adevăr, acesta este punctul culminant, deoarece programarea numai pe ArduBlok tot timpul nu vă va învăța să programați în Arduino IDE. Așa-numitul „glitch” vă oferă posibilitatea de a gândi și de a încerca să vă amintiți comenzile pentru depanarea precisă a programelor.

Vă doresc succes.