Interactiune om-calculator (Tipuri de interfete & proiectare)
Manipularea Intrărilor și ieșirilor digitale · Pentru extinderea utilizarii si capabilitatilor,...
Transcript of Manipularea Intrărilor și ieșirilor digitale · Pentru extinderea utilizarii si capabilitatilor,...
Utilizarea platformei de dezvoltareIntel Galileo
- Manipularea Intrărilor și ieșirilor digitale -
Arduino - platforma de dezvoltare, microsistem de calcul dedicat, cu arhitectura deschisa, care s-a dezvoltat cu scopul de apermite unor persoane mai putin avizate in domeniul calculatoarelor sa programeze aplicatii simple de monitorizare si control.
• Din punct de vedere “hardware” exista o varietate de modele “oficiale” (Arduino Uno, Arduino Mega si Arduino Leonardo), care ofera utilizatorului posibilitatea de alegere, in functie de aplicatia vizata.
• Exista, de asemenea placi “compatibile Arduino” care au aceleasi caracteristici ca si placile Arduino, uneori cu elemente avansatede functionalitate.
• Software-ul Arduino’s se refera la mediul Arduino IDE (Integrated Development Enivronment), un program utilizat pentru a incarca executabile pe memoria program a placii.
Functiile de baza ale acestor platforme, sunt de a citi valori ale unui set de component hardware recunoscute ca
intrari (butoane, senzori, comutatoare etc) si activarea unui set de elemente hardware – iesiri (LED-uri, motoare, LCD-
uri etc) , prin programarea in mediul specific Arduino.
Intel® Galileo este prima dintr-o serie de placi de dezvoltare bazate pe arhitectura Intel, compatibile cu Arduino,
construita pentru a facilita dezvoltarea de proiecte.
Galileo este primul dispozitiv care foloseste procesorul Intel® Quark X1000, un procesor relativ nou, din familia x86, pe
32 biti, proiectat sa aiba un consum redus de energie, ideal pentru dispozitivele de mici dimensiuni, ce vor aparea in
viitor. Ruleaza cu frecvente pana la 400Mhz si contine 512 KB SRAM intern.
Pentru extinderea utilizarii si capabilitatilor, placile Intel® Galileo sunt dotate cu interfete standard de intrare-iesire, mini-
PCI Express*, interfata Ethernet 10/100Mb, slot Micro SD, porturi USB si interfata seriala.
Galileo foloseste sistemul de operare Linux, iar aplicatiile pot fi realizate si folosind Arduino. Intel® Galileo reuseste
astfel sa combine capabilitatile avansate oferite de sistemul de operare Linux*, si de ecosistemul sau vast de aplicatii, cu
usurinta de dezvoltare oferita de Arduino.
Intel® Galileo este prima placa de dezvoltare Intel in totalitate Open Source, compatibila atat hardware, cat si software,
aspect important pentru dezvoltatori si in acelasi timp pentru comunitatile de start-up-uri, care doresc sa realizeze
prototipuri de produse.
Intrari/iesiri digitale
Intrari/iesiri analogice
Conector Ethernet
ProcesorConector
alimentare
+5V
Conector
memorie
µSD
USB client
Buton
Reset
LED
IO13
IO0IO13
A0
A5
Platforma de dezvoltare Intel Galileo poate fi utilizată atât ca și microcontroller cât și ca un micro-computer independent integrat (eng. “standalone embedded computing system”), deoarece, poate rula un sistem de operare (ex. Windows 10 IoT, Linux, Windows Compact Embedded - CE);
Facilitatea principală, în acest caz, este că, platforma are rol de server de interfațare (ex. achiziție de date dintr-un proces fizic de la distanță, controlul proceselor de la distanță); În modul microcontroler, platforma Intel Galileo, poate fi programată, dintr-un mediu integrat de dezvoltare (eng. I.D.E. –Integrated Development Environment), sau prin intermediul mediilor de simulare / testare (Matlab Simulink sau LabVIEW);
Limbajul de sintaxă utilizat în majoritatea cazurilor, este de tip C++ sau hibrid „mixed assembly – syntax C”, Wiring;Wiring, este un limbaj hibrid, dedicat în special programării obiectual fizice (eng. hard) deoarece implică sintaxe și mnemonici încetățenite în limbajul tehnic din domeniul electric / electronic (ex. pinMode (); DigitalWrite(); );
Hardware
•400MHz Quark SoC
•512KB SRAM
•256MB DRAM
•8 MByteFlash
•Micro-SD slot
•Mini-PCI Express slot
•100Mb Ethernet port
•USB Host port
•USB Client Port
Software
•Linux OS on Board
•Intel SW Tools
Procesorul Quark X1000 se concentreaza pe aplicatii „embedded”, in
dispozitive mobile, Internet of Things, vehicule autonome si se vrea o varianta
de procesoare bazate pe arhitectura x86, dar cu consum mic de putere.
-arhitectura x86, folosita in mod uzual in computere personale, cu sistem de
operare Windows, rapide si puternice.
Procesoarele ARM, pe de alta parte, sunt folosite la scara mare in elemente
electronice portabile, cu eficienta energetica mai mare.
Diferenta dintre arhitecturile ARM si x86 se refera la dimensiunea setului de
instructiuni. ARM este o arhitectura de tip RISC (Reduced Instruction Set
Computing, cu set de instructiuni mai mic, mai simplu), iar procesoarele x86
sunt CISC (Complex Instruction Set Computing,set de instructiuni mai
complex, mai mare).
Sisteme cu microprocesoare• Limbajul de sintaxă utilizat în majoritatea cazurilor, este de tip C++ sau hibrid „mixed assembly – syntax C”, Wiring;
• Wiring limbaj hibrid, dedicat în special programării “hard” deoarece implică sintaxe și mnemonici
încetățenite în limbajul tehnic din domeniul electric / electronic (ex. pinMode (); DigitalWrite(); );
• Limbajul Wiring, stă la baza programării platformelor Arduino, dar și Intel Galileo, și se regăsește atât
sub forma Arduino IDE, cât și sub forma unui compilator, compatibil cu Microsoft Visual Studio/Visual
Basic;
• Acest limbaj a fost dezvoltat de comunitatea Open Source, și funcționează în mod nativ pe platformele
de tip Unix/Linux;
• Pentru funcționarea compilatorului din limbaj Wiring în limbaj de asamblare, apoi în cod mașină, în
sistemul de operare Windows, este necesară virtualizarea unui sistem de operare de tip Linux numit
CygWig rulat într-o așa zisă „mașină virtuală” în fundal, odată cu mediul Arduino IDE în Linux, are
loc compilarea mai rapid!
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;
Î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;
Alimentarea platformei Galileo
Intel Galileo poate fi alimentata prin USB (pe portul client), dar Intel recomanda alimentarea
prin adaptorul specific, cu 5 V cc. Folosirea unui adaptor nepotrivit va duce la arderea placii.
Important! Inainte de cuplarea cablului USB placa trebuie alimentata, folosind adaptorul din dotare. Nu este
permisa cuplarea altor tensiuni la placa (inclusiv prin USB) pe durata cat placa nu este alimentata.
Bloc de comentarii
Comentariu
Declarare variabila
Bucla executata o singura data - include
initializarile necesare pentru executia programului
Bucla executata in mod continuu- secventa de
operatii executate intr-o bucla infinita; efectueaza repetitiv
operatii de citire semnale, procesare si generare de comenzi
- biblioteca de functii (proceduri) prin intermediul carora
programatorul poate sa acceseze: semnale digitale de
intrare/iesire, semnale analogice de intare si de iesire, interfete
seriale, sau alte interfete care pot fi atasate placii Arduino.
- exemple de programare (din meniu: File->Examples).
Sisteme cu microprocesoare
• Structura unui program scris în Wiring este similară cu structura unui program scris în
sintaxă standard C, spre exemplu:
Sintaxa limbajului Wiring
#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”:
Initializarea comunicatiei seriale
- Citire si/sau scriere:
Serial.begin(baudrate)
Serial.begin(9600);//deschide comunicarea pe serial cu 9600bauds/s
‘’Serial write’’ – pentru afisarea de caractere pe portul serial:
` Serial.print(val) sau Serial.print(val,format)
‘’Serial read’’:
Serial.read() – returneaza un byte citit
Serial.available() – returneaza numarul de bytes
Senzori / dispozitive de intrare
Analogice: senzor de sunet, de temperatura, de lumina
Digitale: butoane, senzor de proximitate
Actuatoare / dispozitive de iesire: LED. LCD, Servo, contactoare etc
Intrari/iesiri digitale:
- 14 pini I/O, configurabili, 6 se pot folosi pentru PWM (3,5,6,9,10,11)
- pot lucra la 3.3 V si 5 V, max 10mA/25mA
- se configureaza ca intrari/iesiri cu sintaxa:
pinMode(pin,mode) – exemplu: pinMode(13,OUTPUT);//seteaza pinul 13 ca iesire
- configurarea pinilor ca HIGH sau LOW:
Exemplu: digitalWrite(4,LOW);//0V pe pinul 4
digitalWrite(11,HIGH);//5V pe pinul 11
-Pinii configurati ca intrari pot fi cititi:
digitalRead(8);//returneaza valoarea de pe pinul 8
Intrari/iesiri analogice:
- 6 intrari analogice (pinii A0-A5)
- convertorul A/D - AD7298, 12 biti
- masoara 0 – 5 V si rezolutia este limitata la 10 biti, in mod implicit
- 1024 unitatila 5 V=4.9 mV pe unitate
- citirea unui nivel de tensiune atasat unui pin analog:
analogRead(pin)//citeste valoarea pinului analogic
- alinierea (‘’mapping’’) valorilor la alte game de tensiune:
map(Valoare, fromLow, fromHigh, toLow, toHigh)
- PWM – tehnica de obtinere a unor semnale analogice cu mijloace digitale
Exemplu simplu de program cu LED-ul incorporat.
// semnalul de intrare/iesire digitala - IO13, pe cele mai multe placi Arduino are conectat un LED.
• Spre deosebire de limbajul standard „C”, limbajul Wiring întrebuințează câteva funcții specifice aspectelor fizice (ex): void setup() – buclă pentru inițializare;
void loop() – buclă de execuție infinită (ech: while (1));
pinMode() – stabilirea rolului unui pin (intrare / ieșire);
DigitalWrite() – stabilrea stării logice a ieșirii digitale;
DigitalRead() – preluarea 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ă;
Spre deosebire de limbajul standard „C”, limbajul Wiring întrebuințează câteva funcții specifice
aspectelor fizice:
Aplicatii propuse• Considerând aceste aspecte, se propun următoarele aplicații:
1. Semnalizare intermitentă cu o diodă electroluminiscentă LED;\
2. Semnalizare intermitentă cu două LED-uri;
+ aplicatia studentilor
3. Monitorizarea stării unui contact electric;
4. Direcționarea stării contactului înspre diodă;
5. Auto-reținere simplă;
6. Semnalizare cu 8 LED-uri
7. Comanda temporizată unui contact de forță / putere (releu analogic);
1. Semnalizare intermitentă cu o diodă electroluminiscentă LED;
Blinking LED – activarea/dezactivarea unui LED, cu intarziere de o
secunda, repetate in bucla infinita
• Elemente hardware necesare:
• 1x Breadboard
• 1x Galileo
• 1x LED
• 1x rezistenta 330Ω
• 2x conexiuni cu pini
! Partea negativa a LED-ului este reprezentata de piciorul mai scurt, marcat cu margineaplatizata.
2. Semnalizare intermitentă cu două LED-uri;
3. Monitorizarea stării unui contact electric;
4. Direcționarea stării contactului înspre diodă;
5. Auto-reținere simplă
6. Semnalizare cu 8 LED-uri
Cand sunt mai multe variabile de definit in setup(), se foloseste matrice de valori intregi, pe care, in
exemplul de fata, le numim ledPins, cu 8 elemente:
int ledPins[] = {2,3,4,5,6,7,8,9};
ulterior, referirea la elementele din matrice, se face prin pozitia acestora. Primul element are pozitia 0, al
doilea pozitia 1 etc.
digitalWrite(ledPins[0], HIGH);//LED-ul 2, adica de pe pozitia 0, este activ
- Folosirea buclelor de tip “for”
for(conditie initiala, conditie principala, conditie de continuare)
{
}
Activarea aleatoare a LED-urilor
7. Comanda temporizată unui contact de forță / putere (releu analogic);