Documente Academic
Documente Profesional
Documente Cultură
Curs 8
Sisteme Încorporate
7. Sistemele Arduino
Tipuri de aplicații:
Preluarea de informații de la senzori: de temperatură, umiditate, presiune,
sunet, gaz GPL, monoxid de carbon, nivel de alcool în aerul expirat, incendiu,
măsurare distanțe, detectare prezență, nivel de iluminare, accelerometru,
măsurare a consumului energetic etc.
Comanda motoarelor și actuatoarelor: motoare de curent continuu, motoare
pas cu pas;
Conectarea la Internet și comunicări prin: conexiune radio, plăci WiFi, module
GSM (pentru SMS, apeluri de voce, transfer în rețelele 3G, 4G), module
Bluetooth (pentru conectarea la telefoane mobile și laptop-uri);
Afișarea pe: led-uri, module cu 7 segmente, LCD-uri alfanumerice și grafice;
Sisteme Încorporate
7.1. Plăci de bază Arduino
Sisteme Încorporate
Diferă prin:
Microcontroler: 8, 16 sau 32 biți;
Frecvență a tactului: 8, 16, 48 sau 84 MHz;
Tensiune de alimentare nominală: 3,3 sau 5 V;
Număr de pini de intrare/ieșire digitali;
Număr de pini de intrare/ieșire analogici (PWM);
Memorie internă;
Interfețe și comunicare;
Dimensiuni;
Recomandări:
Pentru aplicații simple: UNO;
Monitorizarea și comanda mediului: Mega;
Miniaturizare: Mini;
Monitorizarea și comanda mediului + putere de calcul: Due;
Pentru aplicații complexe: Yun;
Sisteme Încorporate
Alte caracteristici:
Curent continuu la terminalul de 3,3 V: 50 mA;
Curent continuu la terminalele de intrare/ieșire: 40 mA;
Conectare la PC prin cablu USB A – B;
Sisteme Încorporate
Terminale:
void setup() {
//instrucțiuni care se execută o singură dată
}
void loop () {
//instrucțiuni care se execută repetitiv
}
După compilare, programul este încărcat pe placa Arduino, prin portul USB;
Sisteme Încorporate
7.2.3. Aplicații
Comanda unui LED conectat la pinul 13:
Programul aprinde LED-ul timp de 1 sec. și apoi îl stinge timp de 1 sec.
void setup () {
pinMode (13, OUTPUT);
}
void loop () {
digitalWrite (13, HIGH);
delay (1000);
digitalWrite (13, LOW);
delay (1000);
}
Sisteme Încorporate
float temp;
int analogPin = 0;
void setup () {
Serial.begin (9600);
}
void loop () {
temp = analogRead (analogPin);//se citește tens. analogică
temp = temp * 0,48828125; //conversie în grade C
}
Alcoolmetru
Se folosește o placă Arduino Leonardo, un senzor MQ-3, un LCD
alfanumeric și 3 led-uri (verde, galben și roșu) care se vor aprinde în
funcție de nivelul alcoolemiei; senzorul necesită o tensiune continuă de
5V care se obține de la un stabilizator extern;
Schema și conexiunile:
Sisteme Încorporate
void loop() {
lcd.setCursor(0,1); //poziționare cursor la linia 1, coloana 0
analog_reading = analogRead(analog_in); //citire de la senzor
lcd.print(analog_reading); //afișare valoare citită de la senzor
percent_reading=map(analog_reading, 0, 1023, 0, 100); //schimbare domeniu la 0-100
//aprindere led-uri în funcție de nivelul concentrației
if (percent_reading < nivel1){
digitalWrite(led_verde,HIGH);
digitalWrite(led_galben,LOW);
digitalWrite(led_rosu,LOW);
} else if (percent_reading < nivel2){
digitalWrite(led_verde,HIGH);
digitalWrite(led_galben,HIGH);
digitalWrite(led_rosu,LOW);
} else if (percent_reading < nivel3){
digitalWrite(led_verde,HIGH);
digitalWrite(led_galben,HIGH);
digitalWrite(led_rosu,HIGH);
}
}
Sisteme Încorporate
Comunicare I2C
Structura
Pini:
UNO: A4 – SDA, A5 – SCL;
Due: 20 – SDA, 21 – SCL;
Moduri de conectare/comunicare
Master transmitter – Slave receiver;
Master receiver – Slave transmitter;
Sisteme Încorporate
void loop() {
//dacă valoarea citită este 0 aprinde LED timp de 500 ms
if (x == '0') {
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
// dacă valoarea citită este 3 aprinde LED timp de 1s
if (x == '3') {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
}
Sisteme Încorporate
void setup() {
Wire.begin(); // conectare la I2C ca master
Serial.begin(9600); // deschide canalul serial UART
}
void loop() {
Wire.requestFrom(2, 2); // cere 2 octeți de la slave-ul cu adresa 2
while (Wire.available()) {
char c = Wire.read(); // citește un octet ca un caracter
Serial.print(c); // afișează caracterul
}
delay(500);
}
Sisteme Încorporate
Slave transmitter
Wire.onRequest(handler): se apelează o funcție atunci când master-ul cere date de la
slave;
#include <Wire.h>
void setup() {
Wire.begin(2); // conectare la I2C ca slave cu adresa 2
Wire.onRequest(requestEvent); // atunci când master-ul cere date se
va apela funcția requestEvent
}
void loop() {
delay(100);
}