curs_4_ea

Upload: maria-rmaria

Post on 06-Jan-2016

228 views

Category:

Documents


0 download

DESCRIPTION

4

TRANSCRIPT

  • 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);

    }

    } }