Utilizarea platformei de dezvoltare Arduino
Transcript of Utilizarea platformei de dezvoltare Arduino
Utilizarea platformei de dezvoltareArduino
- Manipularea intrărilor și ieșirilor digitale -
❖ Arduino este o platformă de dezvoltare sau un microsistem de calcul dedicat, cu arhitectură simplă, care afost dezvoltat(ă) cu scopul de a permite dezvoltarea aplicațiilor simple de achiziție și generare de semnal.Platforma de dezvoltare are la bază microcontrolerul ATMega 328P din familia AVR produs de Atmel;
• Din punct de vedere constructiv există mai multe variante oficiale ale platformei Arduino (Uno, Nano, Mega,Leonardo etc...), care oferă dezvoltatorului posibilitatea de alegere, în funcție de complexitatea aplicației;
• Există, de asemenea platforme de dezvoltare „compatibile cu mediul Arduino” care au aproximativ aceleașicaracteristici constructive ca și platforma Arduino, uneori având mai multe posibilități funcționale;
• Mediul de dezvoltare Arduino se referă la așa - zisul Arduino IDE (eng. Integrated Development Enivronment),un program utilizat pentru a depana, compila și încărca aplicația executabilă generată în memoria flash;
• Funcțiile de bază ale acestor platforme, sunt de a citi valori ale unui set de componente fizice recunoscute caperiferice simple de intrare (butoane, senzori, sesizori etc.) și activarea unui set de periferice simple de ieșire(diode electroluminiscente, motorașe, afișaje etc.), prin programarea în mediul specific Arduino IDE.
Platforma de dezvoltare Arduino
• Frecvență de operare maximă 16 MHz (frecvența oscilatorului);
• 32 KB memorie flash programabilă;
• 1 KB memorie EEPROM
• 2 KB memorie sRAM (static RAM);
• 10 000 cicluri - scriere / citire în flash și 100 000 în EEPROM;
• Numărător cu rezoluție de 8 biți (255 de trepte pentru PWM);
• Convertor analog – numeric pe 10 biți (1023 de trepte pentru ADC);
• Interfețe serial (sincrone și asincorne – USART / UART);
• Interfață I2C + OneWire și intrări / ieșiri de uz general digitale (GPIO);
• Interfață SPI pentru interfațare directă a memoriei cu programatorul;
Aspecte funcționale și caracteristici ale platformei Arduino
Sisteme cu microprocesoare• Wiring este un limbaj de programare hibrid, specific domeniului de dezvoltare al aplicațiilor cu microcontrolere și
sisteme integrate microprogramabile, deoarece (acest limbaj) permite adresarea în mod direct a componentelorfizice (eng. Hardware) prin intermediul unor declarații - funcții standard (ex. pinMode(), digitalWrite()).
• La baza procesului de programare și dezvoltare a aplicațiilor în cod - sintaxă cu ajutorul platformelor Arduino, seregăsește limbajul Wiring. De asemenea, și alte platforme de dezvoltare compatibile cu acest limbaj pot fiutilizate în același mod. Limbajul de programarea Wiring poate fi apelat și în cadrul mediului Visual Studio.Sistemul de operare original pentru care a fost dezvoltat limbajul Wiring este Unix / Linux. Totodată, Wiring esteun produs rezultat al activității, comunității OpenSource, și este disponibil în spațiul public în mod gratuit. Încadrul sistemului de operare Microsoft Windows, Wiring, se regăsește sub forma programului Arduino IDE.
• Pentru a permite funcționarea compilatorului Wiring în limbaj de asamblare, iar mai apoi în cod mașină specificarhitecturii AVR – ATMega 328P, în cadrul mediului Arduino IDE rulând în Windows, este prevăzută virtualizareaunui sistem de operare de tip Unix / Linux numit CygWig. Acesta rulează într-o așa zisă „mașină virtuală” înfundal, odată cu inițializarea mediului Arduino IDE. Astfel limbajul Wiring funcționează artificial în Windows.
Mediul și limbajul de programare al platformei Arduino
Bloc de comentarii
Comentariu
Declarare variabilă
Buclă executată o singură dată - include inițializările
necesare pentru execuția programului
Bucla executată în mod continuu - secvența de operații
executate într-o bucla infinită; efectuează în mod repetitiv operații de citire semnale, procesare și generare de comenzi
- biblioteca de funcții (proceduri) prin intermediul cărora programatorul
poate să acceseze: semnale digitale de la intrări / ieșiri, semnale analogice de
intare și de iesire, interfețe seriale, sau alte interfețe care pot fi atașate
platformei Arduino.
- exemple de programare (din meniu: File -> Examples).
Mediul și limbajul de programare al platformei Arduino
Sisteme cu microprocesoare
• În baza limbajului Wiring s-au concretizat mai multe medii de programare cu compilatoare specifice platformelor destinate:
• Arduino I.D.E. – familia Atmega – Atmel;• Energia I.D.E. – familiile C, MSP, etc. – Texas Instruments;• MP I.D.E. – familia Microchip / ChipKit;• LeafLabs I.D.E. – familia Maple și Maple FPGA;• Processing I.D.E. – familia RaspberryPI, Arduino;• Wiring I.D.E. – toate platformele;
Pe baza limbajului Wiring s-au concretizat mai multe medii de programare cu
compilatoare specifice platformelor destinate, precum:
• Arduino I.D.E. – familia Atmega – Atmel;
• Energia I.D.E. – familiile C, MSP, Stellaris, etc. – Texas Instruments;
• MP I.D.E. – familia Microchip / ChipKit;
• LeafLabs I.D.E. – familia Maple și Maple FPGA;
• Processing I.D.E. – familia RaspberryPI, Arduino;
• Wiring I.D.E. – toate platformele;
• Visual Micro I.D.E. – limbaj Wiring pentru mediul VisualStudio;
Mediul și limbajul de programare al platformei Arduino
Sisteme cu microprocesoare• Structura unui program scris în Wiring este similară cu structura unui program scris în sintaxă C
standard / C++, spre exemplu:
#include <stdio.h>int main(){
// printf() displays the string inside quotation
printf("Hello, World!");return 0;
}
void setup() {//LED_BUILTIN as an output.pinMode(LED_BUILTIN, OUTPUT);
}void loop() {digitalWrite(LED_BUILTIN, HIGH);delay(1000);digitalWrite(LED_BUILTIN, LOW);delay(1000);
}
SINTAXA „C” STANDARD: SINTAXA „WIRING”:
Mediul și limbajul de programare al platformei Arduino
Spre deosebire de sintaxa limbajulu standard „C”, sintaxa limbajului Wiring include câteva funcții specifice domeniului sistemelor microprogramabile:
✓ void setup() – buclă pentru inițializare;
✓ void loop() – buclă de execuție infinită (echivalent: while (1));
✓ pinMode() – stabilirea modului de funcționare a unui pin (intrare / ieșire);
✓ digitalWrite() – stabilrea stării logice a ieșirii digitale (ON / OFF);
✓ digitalRead() – preluarea în memorie a stării logice a intrării digitale;
✓ Serial.begin(baud) – inițializarea comunicației serial;
✓ Serial.println(„Afișează!”) – afișare text în consola serial;
Mediul și limbajul de programare al platformei Arduino
Funcția pentru inițializarea comunicației serial:
- Citire / scriere:
Serial.begin(<rată_baud>);
Serial.begin(9600); //inițializare comunicare serial cu viteza 9600 [bit / s];
„Serial.println()” – pentru afișarea de caractere pe portul serial:
Serial.println(„șir_de_caractere”) sau Serial.println(variabilă.format);
„Serial.parse<tip_de_date>” – preluarea informației într-un anumit tip de date de pe magistrala serial;
Serial.available() – verificarea disponibilității magistralei serial.
Mediul și limbajul de programare al platformei Arduino
Pentru a concepe aplicații pe baza platformei Arduino, se vor utiliza atât senzori cât și alte dispozitive de intrare:
Senzori sau dispozitive de intrare analogice: senzor de sunet, de temperatură, de lumină, potențiometru etc.;
Senzori sau dispozitive de intrare digitale: butoane, senzori de proximitate, senzori magnetici cu efect Hall etc.;
Totodată se vor utiliza actuatoare sau dispozitive de ieșire ca și elemente de execuție:
Elemente de execuție digitale: diode electroluminiscente în regim fix, afișaje, servomotoare, relee, motorașe pas cu pas etc.;
Elemente de execuție analogice: motoraș de curent continuu, diode electroluminiscente în regim variabil, difuzoare etc.;
Pentru a genera sau a achiziționa semnale digitale, cu ajutorul platformei Arduino, se vor utiliza intrările și ieșirile digitale:
- 14 pini de intrare sau ieșire, configurabili, iar 6 pot furniza semnale modulate în lățime (3, 5, 6, 9, 10, 11);
- nivelul de tesniune generat se poate situa între 3.3 sau 5 [V], iar ca și nivel maxim admisibil de curent, între 10 – 25 [mA];
Funcții specifice procedeului de manipulare al intrărilor și ieșirilor digitale:
pinMode(nr_pin, mod_de_operare) – exemplu: pinMode(6, OUTPUT) // configurare pin 6 ca ieșire digitală;
digitalWrite(nr_pin, stare_digitală) – exemplu: digitalWrite(6, HIGH) // impunerea stării digitale „ACTIV” (ON) a pinului 9;
digitalRead(nr_pin) – exemplu: digitalRead(6) // preluarea în memorie a stării digitale aferente pinului 6;
analogWrite(nr_pin, treaptă_PWM) – exemplu: analogWrite(6, 125) // generare semnal modulat în lățime (PWM);
Mediul și limbajul de programare al platformei Arduino
➢ Exemplu simplu – Semnalizare cu dioda electroluminiscentă pe ieșirea digitală nr. 6:
Mediul și limbajul de programare al platformei Arduino
Mediul și limbajul de programare al platformei Arduino
Cod mașină (binar) – limbaj la nivel fizic
Limbaj de asamblare – tranziție – mnemonici
Sintaxă – nivel mediu – inteligibil (ex. C++)
Mediu grafic - nivel înalt (ex. Simulink)
ex. pinMode(), digitalWrite()
Compilare = găsirea unor „comenzi echivalente” în limbajul de la nivel inferior;
ÎN SINTAXA WIRING ÎN LIMBAJUL HIBRID ASAMBLARE - SINTAXĂ
void setup() { void setup() {pinMode(6, OUTPUT); DDRD = B11111111;
} }void loop() { void loop() {
digitalWrite(6, HIGH); PORTD = B00100000;} }
DDRD = B00100000, PORTD = B00100000
10010101 00000101 00000001 .....
1. Semnalizare intermitentă cu o diodă electroluminiscentă;
2. Semnalizare intermitentă cu două diode electroluminiscente;
3. Semnalizare cu opt diode electroluminiscente;
4. Citirea stării unui buton;
5. Acționarea diodei electroluminiscente prin intermediul butonului;
6. Autoreținere simplă cu două butoane și o diodă electroluminiscentă;
Teme propuse pentru studenți
Clipire = activarea și dezactivarea a ieșirii digitale la care este conectată dioda,
având o întârziere de o secundă:
• Componente necesare:
• 1x plăcuță de prototip fără lipire (eng. Breadboard);
• 1x platformă de dezvoltare Arduino;
• 1x diodă electroluminiscentă;
• 1x rezistența 330 sau 220 sau 100 [Ω];
• 2x cabluri pentru record;
Catodul diodei (terminalul negative „-”) este marcat prin teșitura de la bază.
Semnalizare intermitentă cu o diodă electroluminiscentă
Semnalizare intermitentă cu o diodă electroluminiscentă
Semnalizare intermitentă cu două diode electroluminiscente
Pentru a define mai multe constante de program pentru numerotarea pinilor, se vor utiliza matrice liniare (șiruri):
int ledPins[] = {5, 6, 7, 8, 9, 10, 11, 12};
Pentru selectarea elementelor din șir, se utilizează un indice – contor de poziție. Primul element are indicele 0!
digitalWrite(ledPins[0], HIGH); // Aprinde prima diodă din șir!
Pentru parcurgerea integrală a șirului se folosește bucla iterativă finită de tip „for”:
for(condiție inițială, condiție principală, condiție de continuare) {...}
Semnalizare cu opt diode electroluminiscente
R1
D1
Micro-controller
R2
D2
R3
D3
R4
D4
R5
D5
R6
D6
R7
D7
R8
D8
Semnalizare cu opt diode electroluminiscente
R1
D1
Micro-controller
R2
D2
R3
D3
R4
D4
R5
D5
R6
D6
R7
D7
R8
D8
Citirea stării unui buton
Acționarea diodei electroluminiscente prin intermediul butonului
Autoreținere simplă cu două butoane și o diodă electroluminiscentă