curs_4_ea
DESCRIPTION
4TRANSCRIPT
-
2.2. Platforma Arduino
Element principal hardware Arduino Uno Board:
-
Platforme similare
- Plcuele cu microcontroller se difereniaz n funcie de mai multe criterii cum ar fi: interfeele de comunicare (USB, UEXT, port serial, Ethernet, Wifi, etc.), numrul i tipul de I/O, tipul i caracteristicile procesorului, maniera de programare, etc.
- Cursul se va focaliza pe platformele care prezint uurin n manipulare i programare.
- n multe ramuri din industrie sunt utilizate platforme care asigur implicit un acces mai apropiat de codul main.
2.2.1 Hardware
-
Arduino Uno
Arduino Leonardo Arduino Due
-
Arduino Ethernet Arduino Yun
Rasberry Pi
-
Olimexino
Fez Panda 2 Pinguino
-
Arduino Uno Reset
USB
Power
Led RX/TX
Led pin13
Led ON
Atmega 328
AI Alimentare
DI/DO
PWM 3, 5, 6, 9, 10, 11
GND
Programare ICSP
-
Arduino Uno
www.arduino.cc, www.fritzing.org
Alimentare (7-12 V)
- extern prin convertor AC-DC
- baterie
- direct prin USB. Sursa de alimentare se alege automat, prioritate avnd alimentarea prin USB.
-
Arduino Uno
Microcontroller
- Atmega 328
- Frecven clock 16Mhz
- Memorie 32kB (0.5KB rezervai pentru Bootloader)
- SRAM 2KB, EEPROM 1KB
I/O
- curent maxim 40mA pe pini (50mA pentru 3.3V)
- 14 pini DI/DO (unii cu funcii adiionale)
- 6 dintre pinii DI/DO se pot configura ca pini de ieire PWM
(3, 5, 6, 9, 10, 11)
-
I/O (ali pini cu funcii adiionale)
- pinii 1, 2 TX/RX
- pinii 2, 3 se pot utiliza pentru ntreruperi externe
- 10, 11, 12, 13 se pot utiliza pentru comunicaie SPI
- pin 13 led implicit pe plac
- 6 pini AI (rezoluie pe 10 bii 1024 valori distingte)
- pini funcii speciale: TWI (I2C) A4, A5
Important SoftwareSerial schimb destinaia oricrui pin digital spre o comunicare serial.
-
Exemplu de conexiune pentru controlul frecvenei de aprindere a unui led.
Vedere breadboard Vedere schematic
-
Exemplu de conexiune pentru comanda unui motor DC.
-
Mediul Fritzing scheme Arduino
2.2.2 Software
-
Proteus / Labcenter diagrame de conexiune, varietate mare de plci cu microcontroller, ncrcare cod, rulare interactiv/animaie.
-
Programare
IDE Arduino
Sketch
Nou sketch
Salveaz sketch
Deschide sketch
Compileaz sketch
Upload microcontroller
- Nu necesit programator extern.
- Exist posibilitate de bypass bootloader i programare prin pinii ICSP.
-
Programare
Structur sketch:
#include // include librrii dac este cazul
#define nume aaa // definete constante dac este cazul
char cuvant[20]; // declaratii variabile
int pin_analogic = A0; // seteaza variabila sa reprezinte pinul analogic A0
int valoare_senzor=0; // initializeaza variabila in care se vor stoca date de la senzor
int pin_digital_led = 13; // seteaza variabila sa reprezinte pinul digital 13 (LED)
float valoare=0; // variabila float
void setup() // se apeleaza o singura data la inceputul rularii
{
}
void loop() // se apeleaza automat la fiecare pas de esantionare
{
}
-
Programare
Funcii:
1) pinMode (pin, mode); // se apeleaz n setup()
- pin numrul pinului care se seteaz
- mode maniera de funcionare a pin-ului
- mode: INPUT (pin de intrare)
OUTPUT (pin de ieire)
INPUT_PULLUP
(inversare polaritate implicit LOW)
Pentru pinii digitali exist dou constante predefinite: HIGH i LOW. Orice valoare peste 3V este vzut ca HIGH iar orice valoare sub 3V este LOW.
Obs. n aceast manier dac se conecteaz la un pin DI un senzor analogic atunci considernd pragul de 3V acesta poate avea o comportare de senzor digital.
-
Programare
2) digitalWrite (pin, value); // se apeleaz n loop()
- pin numrul pinului
- value valoarea setat:
HIGH (de obicei 5 V)
LOW (0 V)
3) digitalRead (pin); // se apeleaz n loop() - pin numrul pinului (int) - Returneaz valorile HIGH sau LOW. Obs. Citirea pe pinul 13 mai dificil datorit conexiunii LED
-
Programare
4) delay (timp); // se apeleaz n loop()
- timp numrul de milisecunde de ntarziere
5) millis (); // se apeleaz n loop() - Returneaz numrul de milisecunde de la pornirea
aplicaiei. 6) analogWrite (pin, factor); // se apeleaz n loop()
- pin numrul pinului digital
- factor factorul de umplere al semnalului PWM. Valorile posibile sunt ntre 0-255 (0-0%, 255-100%)
Pinul digital de ieire va furniza un semnal PWM.
-
7) analogRead (pin); // se apeleaz n loop()
- pin pinul analogic considerat
Returneaz valoarea analogic furnizat de pinul selectat. Valorile furnizate sunt ntre 0-1023.
Senzorii analogici furnizeaz de obicei nivele de tensiune. Aceste nivele de tensiune sunt preluate de Arduino pe o rezoluie de 10 bii (1024 valori). De asemenea, fiecare senzor analogic are o caracteristic (vezi figura din exemplu pentru IR Sharp). Corelaia dintre valorile pe 10 bii preluate i valoarea n unitatea de msur dorit (ex. cm) trebuie realizat software.
-
7) Serial.begin(baudrate); // se apeleaz n setup()
- baudrate frecvena considerat este 9600.
Efectul instruciunii este nceperea comunicrii seriale.
8) Serial.println(valoare); // se apeleaz n loop()
- valoare expresia care va fi transmis de ctre Arduino.
Prin intermediul SerialMonitor se poate urmri valoarea transmis.
9) Serial.available(); // se apeleaz n loop()
- returnaz 0 dac nu este disponibil comunicaia serial.
-
10) Serial.read(); // se apeleaz n loop()
- returnaz valoarea citit pe serial.
Alte elemente disponibile:
- operatori relaionali,
- operatori pe bii,
- instruciuni specifice C,
- ntreruperi,
- librrii specifice (GSM, Wire, Stepper, Servo, LiquidCrystal, Ethernet, Math, etc.),
- etc.
-
Exemplu 1: S se implementeze aprinderea LED-ului utiliznd intrarea serial prin tastele 1 aprinde, 2 - stinge, 3-intensitate aprindere 50%.
int led_pin = 11; //sau 13 implicit
int valoare=0;
void setup() {
pinMode(led_pin,OUTPUT);
Serial.begin(9600);
}
-
void loop() {
if (Serial.available() > 0) {
valoare = Serial.read();
Serial.println(valoare);
delay(100);
if (valoare==49)
{ analogWrite(led_pin, 255);
}
if (valoare==50)
{analogWrite(led_pin, 0);
}
if (valoare==51)
{analogWrite(led_pin, 128);
}
} }