Sunteți pe pagina 1din 26

Elementele de bază ale limbajului de programare C++

Competenţe generale
• implementarea algoritmilor într-un limbaj de programare
• aplicarea algoritmilor fundamentali în prelucrarea datelor Competenţe specifice
• transcrierea algoritmilor din limbaj pseudocod în limbaj de programare
• elaborarea unui algoritm de rezolvare a unor probleme din aria curriculară a specialităţii
• alegerea unui algoritm eficient de rezolvare a unei probleme
Limbajele de programare fac parte din categoria limbajelor artificiale, fiind utilizate în procesul
de comunicare om-calculator. Un limbaj de programare reprezintă un mijloc de comunicare între
programator şi calculator. Un limbaj de programare este un mijloc de comunicare particular, în
care informaţia ce trebuie comunicată este codificată printr-un program pe baza a trei
componente:
• un set de acţiuni, care acţionează asupra unui
• set de date într-o anumită
• secvenţă de acţionare.
Realizarea unui program scris în C++ necesită parcurgerea a patru etape:
• editare – scrierea programului sursă, prin crearea unui fişier cu extensia cpp;
• compilare – se aduce în memoria internă programul sursă, se verifică erori şi se converteşte
acest program în program obiect, având extensia obj;
• link-editare – se leagă programul obiect cu bibliotecile de sistem şi se transformă într-un
program executabil având extensia exe;
• execuţie – se lansează în execuţie programul obiect: se efectuează citirea datelor, calculele şi
scrierea rezultatelor, formându-se fişierul.
Structura generală a unui program C++
Un program C++ este constituit dintr-o succesiune de module, denumite funcţii. Una
dintre aceste funcţii este funcţia principală, denumită main() : main() este o funcţie specială, care
trebuie să apară obligatoriu o singură dată în orice program C++
Execuţia oricărui program începe cu funcţia main(). O funcţie este constituită din antet şi
corp. Antetul funcţiei conţine numele funcţiei, tipul rezultatului pe care îl calculează funcţia şi o
listă de parametri prin care funcţia comunică cu exteriorul ei, încadrată între paranteze rotunde.
Corpul funcţiei conține declarații și instrucțiuni care specifică prelucrările realizate de funcția
respectivă.
Forma funcţiei main
int main()
{
....
return 0;
}

Instrucţiunea return este utilizată pentru a încheia execuţia unei funcţii şi a returna
valoarea expresiei specificate în instrucţiunea return ca valoare a funcţiei.
Elementele de limbaj Limbajul C++ este caracterizat de:
• sintaxă – este formată din totalitatea regulilor de scriere corectă a programelor;
• semantică – reprezintă semnificaţia construcţiilor corecte din punct de vedere sintactic;
• vocabular – este format din totalitatea cuvintelor care pot fi folosite întrun program.
Vocabularul limbajului C++
Vocabularul limbajului C++ este format din:
• setul de caractere;
• identificatori;
• cuvinte cheie;
• comentarii;
• separatori.

a. Setul de caractere

Setul de caractere utilizat pentru scrierea programelor C++ este setul de caractere al
codului ASCII. Codul ASCII este format din:
• literele mari şi mici ale alfabetului latin (A-Z, a-z);
• cifrele sistemului de numeraţie zecimal (0-9);
• caracterele speciale (blank, +, *, %, =, {, !, #, etc.)

b. Identificatori

Identificatorii (numele) au rolul de a denumi elemente ale programului precum


constante, variabile, funcţii etc. Identificatorii:
• reprezintă o secvenţă de litere, cifre şi _ (linia de subliniere) care trebuie să înceapă cu _
sau cu o literă;
• nu pot fi cuvinte cheie (rezervate) ale limbajului.
Exemple Contraexemple
suma suma 1
Suma 1suma
suma1 suma+1
suma_1 suma&nr
_suma suma nr

c. Cuvinte cheie (rezervate)

Cuvintele cheie (keywords) sunt cuvinte care au un înţeles bine definit şi nu pot fi folosite în alt
context.
Exemple!
Vocabularul limbajului C++
Bool, break, case, char, const, default ,do, double, else, float, for, if, int, long, return, struct,
switch, unsigned, void, While.

d. Comentarii

Pentru ca un program să fie uşor de înţeles se folosesc comentariile. Acestea sunt texte care vor fi
ignorate de compilator, dar au rolul de a explicita pentru programator anumite secvenţe de program.

// comentariu
sau /*comentariu
comentariu
..........*/

e. Separatori

Separatorii se folosesc pentru a delimita unităţile sintactice.


Separatori:
• blank
• TAB
• caracterele de control CR+LF generate de tasta Enter
• virgula
Tipuri simple de date
Tipuri simple de date (standard)
Prin date se înţelege, în general, tot ceea ce este prelucrat de un calculator. Fiecare dată are un anumit tip.
Un tip de date defineşte:
• mulţimea valorilor pe care le pot lua datele de tipul respectiv;
• modul de reprezentare a acestora în memorie;
• operaţiile care se pot efectua cu datele respective.
Clasificarea tipurilor de date:
• tipuri de date predefinite - asociate cu un cuvânt cheie, utilizat în declaraţie;
• tipuri de date definite de utilizator.
Tipuri standard în C++:
• int şi long – pentru memorarea numerelor întregi;
•float şi double pentru memorarea numerelor reale;
• char – pentru memorarea caracterelor;
• void – pentru tip neprecizat.
Tipul void este un tip special, pentru care mulţimea valorilor este vidă. Acest tip se utilizează
atunci când este necesar să specificăm absenţa oricărei valori. De exemplu, poate fi utilizat pentru a
specifica tipul unei funcţii care nu returnează niciun rezultat.
Tipuri standard în C++. Domeniul de valori şi dimensiunea memoriei ocupate:

Tip Valori Nr
octeți

Tip int [-2147483648, 2147483647] 4


întreg
unsigned int [0, 4294967295] 4

long int [-2147483648, 2147483647] 4

unsigned long int [0, 4294967295] 4

Tip float [3.4*10-38, 3.4*10+38]U[-3.4*10+38, 4


real -3.4*10-38]
double [1.7*10-308, 1.7*10+308]U[- 8
1.7*10+308, -1.7*10-308]
long double [3.4*10-4932, 1.1*10+4932]U[- 12
3.4*10+4932, -1.1*10-4932]
Tip char [-128, 127] 1
caracter unsigned char [0, 255] 1

Constante şi variabile O categorie aparte de date o reprezintă constantele şi variabilele.


Constantele
• constanta are un tip şi o valoare fixă pe toată durata execuţiei programului care o conţine;
• tipul şi valoarea unei constante se definesc prin caracterele care compun constanta respectivă.
Constantele se clasifică astfel:
• numerice: - întregi - reale
• caracter
• şir de caractere
Declararea constantelor
Sintaxa:
const [tip_dată] nume=valoare;
unde:
• const este un cuvânt cheie care înseamnă definirea unei constante simbolice;
• tip_dată precizează tipul constante (poate lipsi);
• nume este identificatorul constantei;
• valoare este valoarea constantei.

 Exemple
const int a=0;
const int x=-5;
const b=0;
const float PI=3.14;
const char a=„a‟;
const char sir[]=“info”;

Variabile
• nume asociat cu una sau mai multe locaţii de memorie;
• valoarea păstrată în aceste locaţii se poate modifica în cursul execuţiei programului;

.
• trebuie declarate – se specifică tipul şi numele
Declararea variabilelor
Sintaxa:
tip_dată nume;
unde:
•tip_dată precizează tipul datei memorate în variabila de memorie;
• nume este identificatorul variabilei de memorie.
 Exemple
int a;
int x,y;
char b;
int a,b=1, c=2;
float d=1;
float e=1.234;
char f='a';
long x1,x2;
unsigned int p,q;
char sir[]="info";

Operatori şi expresii
Operatori Operatorii sunt caractere speciale care indică operaţia care se efectuează în cadrul unui
program. Clasificarea operatorilor:
• operatori aritmetici;
• operatori relaţionali;
• operatori de egalitate;
• operatori de incrementare şi decrementare;
• operatori logici;
• operatori de atribuire;
• operatorul „,‟ (virgulă);
• operatorul de conversie explicită.
a. Operatori aritmetici
•- minus (unar) – pentru semn
•+ plus (unar) – pentru semn
•+ (binar) – adunare
•- (binar) – scădere
•* (binar) – înmulţire
•/ (binar) – împărţire întreagă
•% (binar) – restul împărţirii întregi

 Exemple
int a=3,b=4,p,c,r;
p=a*b;
c=a/b+p;
r=a%b;

b. Operatori de comparaţie (relaţionali )


•< mai mic
•> mai mare
•<= mai mic sau egal
•>= mai mare sau egal Rezultatul obţinut în cazul aplicării unuia dintre operatorii relaţionali este true sau
false. 
Exemple
2<=5
4<3
int x=4,y=5,c;
c=x>y;
c. Operatori de egalitate
•== egal
•!= diferit
Rezultatul obţinut în cazul aplicării unuia dintre operatorii de egalitate este true sau false.
 Exemple
3==3
5==8
3!=6
4!=4
int a=8,b=8,x;
x=a==b;
d. Operatori de incrementare şi decrementare
•++ incrementare (adună 1)
•-- decrementare (scade 1)
 Exemple
int a=8,b=4,c=6,x;
a++; //a=9
x=b--; //x=4, b=3
x=++c; //x=7, c=7
e. Operatori logici
•&& ŞI logic
•|| SAU logic
•! negaţie
Rezultatul obţinut în cazul aplicării unuia dintre operatorii logini este true sau false.
 Exemple a<=b && a<=c
a>5 || b<8
!(a==b)
f. Operatori de atribuire
•= egal
•*=
•/=
•%=
•+=
•-=
 Exemple i
nt a=2,b=3,c=4;
a=b;
b+=a; //b=b+a
c=b=a;
g. Operatorul ‘,’ (virgulă)
Separă mai multe expresii.
 Exemple
int a=1, b=5;
float c;
c=a=b+1,a=c+2,b=b+1;
//b+1=6; a=6; c=6
//a=6+2=8;
//b=5+1=6;

h. Operatorul de conversie explicită


Pentru ca un operand să intre în calcul convertit aşa cum ne dorim (nu implicit) înaintea
operandului se trece tipul său.

 Exemple

float x=25.79; //x=25.79


int y; y=x; //y=25
x=(int)x; //x=25
x=int(x); //x=25
float a=8, b=3, c;
c=a/b; //c=2.66667

Prioritatea operatorilor

Expresii
O expresie este alcătuită din unul sau mai mulţi operanzi legaţi între ei prin operatori. Operanzii
pot fi constante, variabile sau funcţii. Operanzii reprezintă valorile care intră în calcul, iar operatorii
desemnează operaţiile care se execută în cadrul expresiei.
expresie = operatori + operanzi
Tipul unei expresii reprezintă tipul valorii expresiei. Expresiile se împart în două categorii:
• expresii aritmetice;
• expresii logice.
a. Expresii aritmetice
• expresiile aritmetice sunt cele care efectuează operaţii aritmetice având ca rezultat un număr
 Exemple
int x=7, y=2, r;
r=x/y; //r=3
float x=7, y=2, r;
r=x/y; //r=3.5
int a;
a=25/2*4-3+7/2; //a=48
b. Expresii logice
• o expresie logică descrie o condiţie
• valoarea unei expresii logice reprezintă valoarea de adevăr a expresiei aferente
• o condiţie poate fi falsă/false (valoarea 0) sau adevărată/true (o valoare diferită de 0)
 Exemple
int x=7, y=2;
x>=y //true
x!=y //true x<y //false
Operaţii de citire şi scriere
În limbajul C++ operaţiile de introducere şi extragere date se execută prin fluxurile de date.
Un flux de date (stream) reprezintă fluxul datelor de la sursă (de exemplu tastatură) la destinaţie
(de exemplu ecranul monitorului). Prin fluxurile de date echipamentele periferice de intrare-ieşire sunt
conectate la programul C++.
Fluxuri de date standard
1. flux de date de intrare (cin);
2. flux de date de ieşire (cout).
Pentru operaţiile de citire şi scriere se folosesc instrucţiunile expresie prin care se creează
fluxurile de date, cu ajutorul operatorilor >> şi <<.
a. Flux de date de intrare (cin)
•conectează tastatura la program
•execută operaţii de citire
•datele de intrare sunt furnizate programului
•datele sunt păstrate în variabile de memorie
•cin reprezintă tastatura
•operatorul de intrare >> înseamnă transmiterea unei valori de la tastatură
Sintaxa: cin>>nume_var;
sau
cin>>nume_var1>>nume_var2 >> … >>nume_varn;
Exemplu
int x=7,y=2,z=4;
cin>>x;
cin>>y;
cin>>z;
// considerăm că se introduc de la tastatură valorile 10, 20 şi 30
2. Flux de date de ieşire (cout)
•conectează monitorul la program
•execută operaţii de scriere
•datele de ieşire sunt furnizate de program
•datele sunt transmise către monitor
•cout reprezintă monitorul
•operatorul de ieşire << înseamnă transmiterea unei valori către monitor Sintaxa: cout<<nume_var|
constantă; sau cout<<nume_var1|constantă1<< nume_var 2|constantă2<< … <<nume_varn|
constantăn;
Exemplu
int x=7,y=2,z=4;
cout<<x;
cout<<y;
cout<<z;
se va afişa: 724
iar pentru
cout<<x<<“ “;
cout<<10<<endl;
cout<<z;
se va afişa: 7 10
4
Funcţiile de sistem cin>> şi cout<< sunt definite în fişierele biblioteci ale limbajului C++. Informaţiile
despre funcţiile de sistem (nume funcţiei, numărul şi tipul parametrilor, tipul rezultatului funcţiei) se
numesc prototipul funcţiei. Prototipurile funcţiilor de sistem se găsesc în fişierele antet (header). Pentru
a putea folosi în program funcţiile de sistem se scrie în program directiva pentru procesor:
#include<iostream>
Instrucţiunile limbajului C++
Pentru a genera rezultatele dorite, un program trebuie să acţioneze asupra datelor într-un mod
bine precizat. Descrierea acestor acţiuni se face cu ajutorul instrucţiunilor limbajului de programare.
Comenzile pe care programul le dă calculatorului, atunci când programul este rulat se numesc
instrucţiuni.
Instrucţiunile limbajului C++ sunt:
• instrucţiunea expresie;
• instrucţiunea compusă;
• instrucţiunea if;
• instrucţiunea switch;
• instrucţiunea break;
• instrucţiunea while;
• instrucţiunea do while;
• instrucţiunea for.
Instrucţiunile limbajului C++ se împart în două categorii:
• instrucţiuni simple;
• instrucţiuni de control (structurate).
Instrucţiunile simple nu conţin alte instrucţiuni (exp. instrucţiunea de atribuire).
Instrucţiunile de control specifică ordinea în care se execută instrucţiunile programului,
controlând fluxul de execuţie al programului.
a. Instrucţiunea expresie Instrucţiunea expresie (de atribuire) este destinată atribuirii de valori
variabilelor sau returnarea de valori în cazul funcţiilor.
Sintaxa:
expresie;
Efect:
• se evaluează expresia.
Se scrie caracterul “;” după o expresie (de atribuire, apelul unei funcţii).
Exemple
s=a+5;
a=b=c=d=10;
i++;
p=abs(8);
clrscr();
p=1;
x+=2;
k=2*a-b*b+c;
b. Instrucţiunea compusă
Reprezintă o succesiune de declaraţii urmate de instrucţiuni, incluse între acolade.
Sintaxa:
{
declaraţii;
instrucţiuni;
}
Efect:
• se execută în ordine instrucţiunile specificate.
Exemplu
{
int a,x,p=5;
a=0;
x=p+2;
x++;
p+=x;
cout<<a<<x<<p;
}

c. Instrucţiunea if
Instrucţiunea decizională (condiţională) if realizează selectarea în vederea execuţiei a unei singure
instrucţiuni din mai multe posibile.
Există două forme ale instrucţiunii decizionale if.
Forma 1
Sintaxa:
if(expresie logică)
instrucţiune1;
else
instrucţiune2;
Efect:
• pasul 1: se evaluează expresie logică;
• pasul 2: dacă valoarea produsă de expresie logică este diferită de 0 (este adevărată) se execută
instrucţiune1, iar dacă valoarea produsă este 0 (este falsă) se execută instrucţiune2.
Forma 2
Sintaxa:
if(expresie logică)
instrucţiune;
Efect:
• pasul 1: se evaluează expresie logică;
• pasul 2: dacă valoarea produsă de expresie logică este diferită de 0 (este adevărată) se execută
instrucţiune.
Exemple
1. if(n%2==0)
cout<<“Numarul este par“;
else
cout<<“Numarul este impar“;
2. if(x>10)
{
x++;
y=10;
}
else
x--;
y=20;
3. if(x>y)
{
if(y>z)
x=y+z;
}
else
x=y-z;
4. if(x>y)
{
if(y>z)
x=y+z;
}
else
x=y-z;
d. Instrucţiunea switch Instrucţiunea decizională switch realizează selectarea în vederea execuţiei a unei
singure instrucţiuni din mai multe posibile. Instrucţiunea switch este o generalizare a instrucţiunii
decizionale if, putând fi înlocuită cu instrucţiuni decizionale if imbricate.
Sintaxa:
switch(expresie logică)
{
case c1: instrucţiune1;
break;
case c2: instrucţiune2;
break;
.................
case cn: instrucţiunen;
break;
[default: instrucţiunen+1;]
}
Efect:
• pasul 1: se evaluează expresie logică
• pasul 2: dacă aceasta produce o valoare egală cu cea produsă de ci, se execută instrucţiunei şi se
încheie execuţia instrucţiunii switch, altfel se execută instrucţiune n+1.
Exemplu
a=b=5;
cout<<“1: adunare“;
cout<<“2: scadere“;
cout<<“Introdu optiune:“;cin>>op;
switch(op)
{
case 1: cout<<a+b;
break;
case 2: cout<<a-b;
break;
default: cout<<“optiune gresita“;
}
e. Instrucţiunea break Instrucţiunea break se foloseşte în instrucţiunea decizională switch sau în
instrucţiunile repetitive. Sintaxa: break; Efect:
• determină ieşirea necondiţionată din instrucţiunea în care apare (switch, while, do while sau for).

 Exemplu
int i;
cin>>i;
switch(i)
{
case 1:cout<<“am citit 1“;
break;
case 2:cout<<“am citit 2“;
break;
default:cout<<“am citit altceva“;
}
f. Instrucţiunea while Instrucţiunea repetitivă while specifică faptul că anumite instrucţiuni se execută de
mai multe ori. Instrucţiunea while este o instrucţiune repetitivă:
• cu test iniţial;
• cu număr necunoscut de paşi.
Sintaxa: while(expresie logică) instrucţiune; Efect:
• pasul 1: se evaluează expresie logică;
• pasul 2: dacă valoarea produsă de aceasta este adevărată (diferită de 0), se execută instrucţiune, apoi se
trece la pasul 1, altfel (are valoarea 0) se trece la instrucţiunea următoare din program.
Exemple
1. int a=1;
while(a<5)
{
a++;
cout<<a<<endl;
}
2. int a=1;
while(a<5) a++;
cout<<a<<endl;
3. int a=10;
while(a<5);
a++;
cout<<a<<endl;
4. int a=1;
while(a<5);
a++;
cout<<a<<endl;
g. Instrucţiunea do while Instrucţiunea repetitivă do while specifică faptul că anumite instrucţiuni se
execută de mai multe ori. Instrucţiunea do while este o instrucţiune repetitivă:
• cu test final;
• cu număr necunoscut de paşi.
Sintaxa:
do
instrucţiune;
while(expresie logică);
Efect:
• pasul 1: se execută instrucţiune;
• pasul 2: se evaluează expresie logică; dacă valoarea produsă de aceasta este 0, execuţia se încheie, altfel
se trece la pasul 1.
Exemple
1. int a=1;
do
{
a++;
cout<<a<<endl;
}while(a<5);
2. int a=10;
do
{
a++;
cout<<a<<endl;
}while(a<5);
3. int a=10;
do
{
}while(a<5);
cout<<a;
4. int a=10;
do
;
while(a<5);
cout<<a<<endl;

h. Instrucţiunea for Instrucţiunea repetitivă for specifică faptul că anumite instrucţiuni se execută de mai
multe ori. Instrucţiunea for este o instrucţiune repetitivă:
• cu număr cunoscut de paşi.
Sintaxa: for(expresie1;expresie2;expresie3) instrucţiune; Efect:
• pasul 1: se evaluează expresie1;
• pasul 2: se evaluează expresie2; dacă aceasta produce o valoare diferită de 0, se execută instrucţiune,
apoi se trece la pasul 3, altfel instrucţiunea for se încheie;
• pasul 3: se evaluează expresie3 şi se revine la pasul 2.
Exemple
1. int i;
for(i=1;i<5;i++)
cout<<i<<“ “;
2. int i;
for(i=5;i<5;i++)
cout<<i<<“ “;
3. int i;
for(i=5;i>1;i--)
cout<<i<<“ “;
4. int i;
for(i=5;i>1;i=i-2)
cout<<i<<“ “;
Fişe de lucru
•Operatori şi tipuri de date
•Instrucţiunea de atribuire
•Instrucţiunea decizională if
•Instrucţiunea repetitivă while
•Instrucţiunea repetitivă do while
•Instrucţiunea repetitivă for
III. CE ESTE ARDUINO ?
Arduino este una dintre cele mai simplu de utilizat platforme cu microcontroller.
Te poti gandi la el ca la un minicalculator (are puterea de calcul a unui computer obisnuit de
acum 15 ani), fiind capabil sa culeaga informatii din mediu si sa reactioneze la acestea. In jurul lui
Arduino exista un ecosistem de dispozitive extrem de bine dezvoltat. Orice fel de informatie ti-ai dori sa
culegi din mediu, orice fel de conexiuni cu alte sisteme ai avea nevoie, exista o sansa foarte mare sa
gasesti un dispozitiv pentru Arduino capabil sa iti ofere ceea ce ai nevoie. Astfel, daca discutam despre
preluarea de informatii din mediu, mai jos sunt doar cateva exemple de senzori : senzori ce determina
nivelul de alcool in aerul respirat, senzor de incediu, gaz GPL, monoxid de carbon, acceleratii ale
dispozitivelor in miscare, curent consumat de diverse dispozitive casnice, forta de apasare, gradul de
rotire, cartele RFID, distante, nivel de iluminare, directia nordului, prezenta umana, sunet, temperatura,
umiditate, presiune atmosferica sau video. Daca ne referim la posibilitatea de a ne conecta cu alte sisteme,
exista placi de retea Ethernet pentru Arduino capabile sa comunice informatii prin Internet, dispozitive
capabile sa transmita date prin conexiune radio, placi de retea WIFI, dispozitive GSM pentru Arduino
(capabile sa trimita / receptioneze SMS-uri, sa initieze apeluri de voce sau sa trimita date prin reteaua 3G)
sau conectori Bluetooth pentru conectarea Arduino cu telefonul mobil sau laptop. In zona mecanica,
exista motoare de curent continuu (utilizate pentru robotica), motoare pas cu pas (utilizate de obicei in
zona industriala) sau servomotoare, controlate foarte exact. Pentru afisarea informatiilor preluate, exista
ecrane LCD pentru Arduino, incepand cu cele mai simple (LCD text cu 16 caractere) pana la ecran LCD
grafice. In prima parte a acestui curs vom dezvolta integrarea Arduino cu fiecare dintre dispozitivele pe
care le-am amintit mai sus (si alte cateva in plus). In cea de-a doua parte a cursului vom prezenta pe larg o
serie de proiecte interesante realizate prin combinarea Arduino cu unul sau mai multe dispozitive dintre
cele enumerate mai devreme. Pentru a-ti face o idee despre ceea ce se poate face cu Arduino, in
continuare iti prezint cateva exemple de proiecte care se pot realiza cu Arduino (proiecte pe care le vom
detalia pe larg in cea de-a doua parte a cursului) : – senzor de alcool conectat la Arduino, Arduino
conectat la PC; atunci cand nivelul de alcool in aerul expirat depaseste un anumit nivel prestabilit,
computerul iti da un warning cand incerci sa postezi lucruri pe Facebook. Aici poti gasi un articol cu mai
multe poze despre acest proiect. – robot autonom care ocoleste obstacole. Cateva exemple de filme cu
roboti care fac acest lucru :
– http://www.youtube.com/watch?v=Xk3-HZpSm2U – robot care parcheaza singur
– http://www.youtube.com/watch?v=4nMNOugxf3I – masina de taiat iarba (autonoma)
– http://www.youtube.com/watch?v=X5nqCcMxGBs – robot cu recunoastere video a obstacolelor
– http://www.youtube.com/watch?v=6b4ZZQkcNEo – robot dezvoltat de armata americana
– http://www.youtube.com/watch?v=cNZPRsrwumQ – un alt robot dezvoltat de armata americana
– robot controlat prin Bluetooth folosind telefonul mobil sau laptop-ul
– aici poti gasi mai multe exemple de filme cu un astfel de robot http://www.robofun.ro/magician-
robot-arduino-driver-bluetooth
– dispozitiv pentru pictat oua ("the EggBot"). – http://www.youtube.com/watch?v=ZC-VTRjaHk0
– Arduino + senzor temperatura + senzor umiditate + senzor presiune atmosferica + placa de retea
Ethernet care transmite datele de mediu pe Google Docs, la fiecare 10 secunde.
– mana robotica, bazata pe o manusa cu senzori de indoire si servomotoare. – aici gasesti un film cu
acest gen de mana - http://www.tehnorama.ro/animatronic-hand
– Quadcopter-e – aici gasest un film cu mai multe quad-uri care zboara in formatie -
http://www.youtube.com/watch?v=YQIMGV5vtd4
– OpenEnergyMonitor, sistem bazat pe Arduino care monitorizeaza energia electrica consumata in
casa.
– prastie reala (din lemn) combinata cu Arduino, un accelerometru si Bluetooth, pentru jucat Angry
Birds pe PC.
Instalare Drivere Arduino
Primul lucru pe care trebuie sa il faci inainte de a putea programa placa Arduino, este sa ii
instalezi driver-ele pe PC. Daca rulezi Linux sau MAC, ai scapat, nu ai nevoie de driver-e. Daca insa
rulezi Window, va trebui instalezi si drivere-le, ca pentru orice alt dispozitiv hardware. Driver-ele sunt
disponibile in mediul de dezvoltare, pe care il vei descarca de la adresa
http://arduino.cc/en/Main/Software . Descarca arhiva .zip, si dezarhiveaz-o intrun director la alegerea ta.
Conecteaza apoi placa Arduino la portul USB. PC-ul va detecta ca ai un nou dispozitiv, si iti va cere sa
instalezi drivere pentru el. Alege optiunea de instalare prin care ii spui Windows ca ai tu drivere, si ii ceri
sa nu se conecteze la Internet pentru a cauta in mod automat. Selecteaza directorul "drivers" din directorul
unde ai dezarhivat arhiva .zip de la pasul precedent (NU directorul "FTDI Drivers" !). Procesul continua
apoi cu "Next". In final, daca deschizi Device Manager, in sectiunea "Ports (COM & LPT)" ar trebui sa
vezi o intrare numita "Arduino UNO". Aici - http://arduino.cc/en/Guide/Windows - gasesti un ghid
detaliat, cu screenshot-uri, referitor la instalarea driver-elor pentru Arduino.
Arduino IDE, Program Arduino, Upload
Dupa ce ai instalat drivere-ele, urmatorul pas este sa iti programezi placa Arduino. Ruleaza
programul "arduino", din mediul de dezvoltare pe care tocmai l-ai descarcat la pasul precedent (vezi
screenshot-ul de mai jos). Arduino se conecteaza la PC prin intermediul unui port serial. Primul pas pe
care il ai de facut este sa determini acest port. Cea mai simpla cale este de conectezi placa, astepti circa 30
de secunde – 1 minut, ca sa fii sigur ca a fost detectata de PC, iar apoi deschizi meniul "Tools -> Serial
Port". Ar trebui sa vezi una sau mai multe intrari. Memoreaza-le (sau scrie-le pe o foaie de hartie / fa un
screenshot). Deconecteaza placa Arduino din portul USB (scoate cablul din PC). Deschide din nou
meniul "Tools -> Serial Port". Acel port care a disparut este portul asociat placii Arduino. Conecteaza din
nou placa Arduino la PC, asteapta sa fie recunoscuta de PC, si apoi selecteaza portul respectiv din meniul
"Tools -> Serial Port". Urmatorul pas este selectarea tipului de placa cu care lucrezi. Din meniul "Tools -
> Board", selecteaza tipul de placa cu care lucrezi (Arduino Uno, Leonardo, Mega, etc).
Anatomia unui program Arduino
Orice program Arduino are doua sectiuni. Sectiunea "setup", care este rulata doar o singura data,
atunci cand placa este alimentata (sau este apasat butonul "Reset"), si sectiunea "loop", care este rulata in
ciclu, atat timp cat este alimentata placa. Sa luam un exemplu.
void setup() {
//codul scris aici ruleaza o singura data
}
void loop() {
//codul scris aici ruleaza tot timpul
}
Astfel, in rutina "setup" vom pune de obicei cod de initializare, iar in rutina "loop" vom scrie
partea principala a programului nostru.
Arduino Blink Pentru cel de-al doilea exemplu Arduino, vom folosi un led montat din fabricatie
pe placa. Placa Arduino are din constructie un led conectat la pinul digital 13. Acest led se aprinde atunci
cand pinul 13 digital este pus in HIGH (din
programul scris pe Arduino) se stinge atunci
cand pinul 13 este pus in LOW.
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

Daca urci acest program pe placa Arduino si urmaresti led-ul conectat la pinul 13 vei observa ca
el clipeste o data pe secunda. Sa analizam un pic programul de mai sus. In sectiunea "setup" avem o
singura instructiune, care declara ca pinul 13 digital va fi folosit in continuare pentru a controla un
dispozitiv (daca am fi vrut sa citim informatie din mediul – sa atasam un senzor la el – am fi scris
"pinMode(13, INPUT)"). Aceasta instructiune se executa o singura data. Urmeaza sectiunea "loop", care
aprinde led-ul conectat la pinul 13 ("digitalWrite(13, HIGH)"), asteapta o secunda, il stinge si iarasi
asteapta o secunda. Asa cum am spus mai sus, instructiunile din sectiunea "loop" se executa ciclic, astfel
ca imediat dupa ce s-a terminat un ciclu, led-ul iarasi se aprinde, apoi iarasi se stinge si tot asa pana cand
taiem alimentarea placii. Exemplul urmator este extrem de similar cu acesta, doar ca in locul led-ului
montat din fabrica pe placa Arduino vom utiliza un led fizic conectat la pinul 13 al placii.

APLICAȚII PRACTICE

Lucrare de laborator 1: Led Brick, ON/OFF

Un led brick reprezinta cea mai simpla posibilitate de a genera un semnal luminos folosind
Arduino. Un led brick necesita un port digital liber pentru a fi controlat de catre Arduino.

void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Rutina setup, care se executa exact o singura data cand Arduino este alimentat, declara pinul
digital 13 (cel la care am conectat led-ul) ca fiind un pin de iesire (in sensul ca va controla un dispozitiv
extern conectat la Arduino, si nu va citi o informatie digitala din mediu). Rutina loop, care se executa
atata timp cat Arduino este alimentat, aprinde led-ul ridicand pinul 13 in HIGH (mai exact, face ca
tensiunea pinului sa fie 5 V), apoi asteapta o secunda, stinge led-ul (tensiunea pinului devine 0 V) si apoi
iarasi asteapta o secunda.
De ce nu merge ?
–sigur ai conectat corect firele ?
–sigur programul s-a incarcat pe Arduino (ai vazut mesajul "Done Uploading" ) ?
–daca scoti firul de conectare din pinul 13 (marcat pe led cu "IN") si il muti in pinul VCC, se
aprinde led-ul ? (daca nu, atunci led-ul probabil este defect
Lucrare de laborator 2. Folosirea unui întrerupător cu Arduino Uno
În acest experiment, vei învăța cum aprindem sau stingem un LED, utilizând un port de intrare-
ieșire și un întrerupător. Vom utiliza functia input, de pe placa Arduino I/O portnpentru a citi ieșirea
dispozitivului extern. Deoarece Arduino are un LED conectat la pinul 13, vom utiliza LED-ul de pe placa
pentru a realiza acest experiment.
Componente:

- 1 placa Arduino
- 1 cablu USB
- 1 intrerupător (6mm mini intrerupător) În figură, pinii conectați cu săgeți de aceeași culoare
se conectează împreună.

- 1 rezistor 10kΩ
- Fire de legătură
- 1 breadboard

Mod de lucru:

Pas1. Conectați circuitul ca in figură:

Schema corespunzătoare este


- Pas 2. Scrierea programului corespunzător.
- Pas 3. Compilați programul
- Pas 4: Rulați programul pe placa Arduino.

Daca apasam întrerupătorul, LED-ul de pe placa va lumina.

Temă de laborator: Repetați experimentul pentru 8 LED-uri.

Lucrare de laborator 2. Utilizarea unui Buzzer activ

Materiale necesare:

- 1 placa Arduino
- 1 breadboard
- 1 cablu USB
- 1 buzzer (activ)
- Fire de legătură
- Un buzzer activ este utilizat adesea în calculatoare, copiatoare, imprimante, alarme, jucării
electronice, telefoane sau alte device-uri folosite pentru voce.
- Buzzer-ele pot fi active și pasive. În figură, cele active sunt cu negru la terminale.
Un buzzer activ are in interiorul lui un oscilator, care va produce sunete atunci când îl vom
pune sub tensiune. Un bizzer pasiv nu are un oscilator, de aceea va trebui să utilizăm un
oscilator extern cu frecvențe cuprinse între 2 și 5 kHz, pentru a putea fi utilizat.
Mod de lucru:
Pas 1. Conectați circuitul ca in figură:

Pas 2: Scrieți programul corespunzător.


- Pas 3. Compilați programul
- Pas 4: Rulați programul pe placa Arduino.
Acum va trebui să auziți cum buzzer-ul scoate sunete.
IV. Prezentarea PLC
PLC-ul (Programmable Logic Controller – Automat Programabil) este un dispozitiv electronic digital,
dotat cu memorie programabila care permite gestionarea unui proces, cu ajutorul unui program memorat
in interiorul sau. Utilizarea in masa a acestor aparaturi in fabrici, pentru controlul masinilor si gestiunea
proceselor industriale, este justificata de faptul ca acestea inlocuiesc tablourile mari electrice care
functioneaza cu dispositive electromecanice (relee, contori, temporizatori, etc…), reducand spatiul
ocupat; si nu numai atat, daca procesul ce trebuie controlat trebuie sa sufere o variatie la instalatiile
tradizionale, trebuia refacuta instalatia, fapt ce implica pierdere de zile de productie, in timp ce cu ajutorul
PLC-ului, este suficienta modificarea programului, in baza noilor exigente.
Particularitatea care, cu siguranta, a facilitat raspandirea lui este faptul ca primul limbaj de programare
(LADDER) se bazeaza pe schemele electrice conventionale, utilizand simbolurile si dispozitivele de uz
frecvent in campul electric. Fata de instalatiile tradizionale, PLC-ul ofera anumite vantaje care ii justifica
costul:
􀂃 Fiabilitate: programul, odata redactat, poate fi incarcat pe alte PLC-uri, reducand timpii de
programare; pe langa acestea, nu exista probleme de erori de montaj, dat fiind ca singurele conexiuni sint
cele ale intrarilor, iesirilor si de alimentare a PLC-ului.
􀂃 Flexibilitate: pentru modificarea programului, este suficienta utilizarea unui computer obisnuit, chiar
si portabil, iar eventualele actualizari pot fi trimise de catre producatori, inclusiv pe cale telematica,
eliminand costurile prezentei unui tehnician specializat la fata locului.
􀂃 Intretinere redusa: daca sint utilizate in conformitate cu normativele cerute, intretinerea este practic
nula.
􀂃 Functionare rapida: anumite procese industriale necessita o anumita viteza a productiei, si, prin
urmare, semnale cu frecventa inalta, provenind de la senzori, si numai PLC-urile pot garanta o gestionare
rapida a unor astfel de informatii.
􀂃 Diagnosticare: in PLC sint cuprinse proceduri de identificare a problemelor de functionare atat
hardware cat si software, reducand la minim oprirea procesului de productie.
􀂃 Comunicare: PLC-urile permit comunicarea intre ele pentru un schimb de informatii, in scopul
optimizarii productiei si depasirea in scurt timp a eventualelor anomalii aparute in timpul ciclului de
productie.
Din punct de vedere al structurii, PLC-urile sint modulare si, oricare ar fi caracteristicile
acestora, elementele de baza cuprind:
􀂃 Intrare: reprezinta acel modul (sau ansamblu de module) prin care PLC-ul “se informeaza”
continuu asupra starii procesului ce trebuie controlat. Aceste informatii sint furnizate de senzori
cu iesire digitala, plasati in puncte strategice ale procesului. PLC-urile mari sint in masura sa
citeasca inclusiv senzori cu iesire analogica.
􀂃 Iesire: reprezinta acel modul (sau ansamblu de module) prin care PLC-ul interactioneaza cu procesul,
actionand servomecanismele, releele, valvele pneumatice, alarmele, semnalele acustice si luminoase,
etc… Comanda poate fi efectuata prin dispozitive diverse:
􀂃 Relee: sint dispozitive electromecanice utilizate atat cu curent continuu cat si alternativ,
suportand sarcini de pana la cativa amperi, dar sint relativi lente si cu durata prestabilita datorita
arcului electric dintre contacte si slabirii resortului.
􀂃 Tranzistor, FET si TRIAC: dispositive electronice in stare solida care suporta sarcini de cativa
amperi, chiar si fara aripioara de racire (semiconductorul este facut sa functioneze in modalitate
ON - OFF). Sint silentioase, ocupa putin spatiu, sint relativ rapide, dar sint sensibile la
suprasarcini care le-ar putea deteriora.
􀂃 CPU: Unitatela centrala de programare este un modul impartit in doua mari elemente, microprocesorul
si memoriile. Cel dintai citeste semnalele de intrare, executa logica dictata de programul de aplicatie,
efectueaza calculele respective si controleaza iesirile succesive. Memoriile, rescriptibile, pot fi volatile
(RAM) si nevolatile (EPROM), in functie de faptul ca in caz de intrerupere a alimentarii programul este
sters. Aceasta problema este rezolvata prin introducerea unei mici baterii, dat fiind consumul redus al
circuitelor. CPU efectueaza un ciclu operativ dupa o secventa foarte precisa:
􀂃 Controlul intrarilor: In timpul acestei faze PLC-ul examineaza starea intrarilor pentru a citi
nivelul acestora.
􀂃 Controlul programului: In aceasta faza, PLC-ul citeste programul dupa logica LADDER si
inlocuieste in acesta valorile intrarilor intalnite anterior.
􀂃 Controlul iesirilor: PLC-ul activeaza sau dezactiveaza iesirile, in functie de datele furnizate de
program.
􀂃 Alimentator: Este vorba de un modul care furnizeaza energia pentru functionarea intregului
PLC. Acest modul este proiectat pentru a suporta variatii de tensione de aproximativ 10 %
(variatie cauzata de pornirea unor sarcini mari), si permite mici intreruperi de tensiune (citeva
milisecunde).
PLC-ul poate receptiona programul prin doua dispozitive: PC-ul (Personal Computer) care
permite
crearea, modificarea, tiparirea si memorarea programului, in mod simplu si usor, si HHP-ul
(Hand-
Held Programmer - Dispozitiv de Programare Portabil), care permite programarea, dar mai ales
identificarea problemelor in timpul functionarii, fundamentala pentru tehnicieni. Pentru
programarea unui PLC, sint utilizate limbaje diverse:
􀂃 LADDER DIAGRAM: limbaj cu contacte, a fost primul si cel mai raspandit program de
programare utilizat la PLCuri. Se bazeaza pe circuitele cu releu, pe contactele normal deschise si
inchise, prin adaugarea de temporizatori si contori dupa un desen la scara (LADDER), printr-o
serie de instructiuni orizontale unind alimentarile laterale, ca treptele (rung) unei scari.
Aceasta structura urmeaza fidel modalitatea de executie a schemelor electrice.
􀂃 SFC (Sequential Functional Chart): diagrama functionala secventiala, este un limbaj grafic de
productie recenta care permite trecerea de la o faza la alta a procesului prin depasirea unei
conditii (tranzitie). Este un limbaj rapid si practic, dar nu toate PLC-urile reusesc sa-l suporte,
necesitand traducerea SFC-ului in limbaj LADDER.
􀂃 Diagrama bloc: bazata pe logica binara, utilizeaza o reprezentare grafica a unor elemente
logice (AND, OR, NOT).
􀂃 Lista de instructiuni Assembler-like.

􀂃 Text structurat Pascal-like.

Programarea PLC-ului
Standardul IEC 61131 stabileste 5 limbaje de programare utilizabile pentru programarea
dispozitivelor de tip PLC:

- LD – Lader Diagram – limbaj grafic de tip “schemă cu relee”


- FBD – Function Block Diagram – limbaj grafic de tip “flux de date” (cu blocuri funcţionale
interconectate)
- ST – Structured Text – limbaj de nivel înalt asemănător cu Csau Pascal
- IL – Instruction List – limbaj de nivel scăzut de tip limbaj de asamblare
- SFC – Sequential Function Chart – limbaj care permite exprimarea secventelor de pasi pentru
un automat de stare

În Figura 1 sunt prezentate simbolurile grafice de bază ale limbajului LAD, conform IEC 61131-3.

%I0.0 %I0.1 %I0.2 %I0.3 %Q0.0 %Q0.1 %Q0.2 %Q0.3


P N S R
a) b) c) d) e) f) g) h)
Figura 1. Simbolurile grafice de bază ale limbajului LAD.

Executia programului se face de sus in jos si de la stanga la dreapta

In cadrul liniilor de program se utilizează diferite tipuri de “dispozitive” incluse in structura PLC-
ului, dupa cum urmeaza:

- X – Intrari fizice (ex: X000-X007 la PLC-ul utilizat) – intrari digitale de tip contact
- Y – Iesiri fizice (ex: Y000-Y007 la PLC-ul utilizat) – iesiri digitale de tip contact
- M – Relee auxiliare (ex: M000-...) – dispozitive bistabile de tip releu folosite pentru memorarea
temporara a unor stari
- S – Relee de stare – folosite in limbajul STL pentru a indica un pas (o stare) din diagrama de stare
a automatului
- T – timer – dispozitive de masurare a timpului tip “timer”; sunt de 3 feluri: cu increment la
100ms, 10ms sau 1ms; timerele sunt pe 16 biti; pot fi cu retinere (pastreaza valoarea pana se
reseteaza) sau fara retinere; iesirea timerului este un contact care se inchide i
- n momentul in care se atinge valoarea prefixata a timerului; valoarea prefixata se specifica printr-o
constanta (precedata de litera “K”, valoarea maxima 32767) sau un registru de date (precedat de
litera ”D”)
- C – contoare – sunt similare cu timerele, doar ca incrementarea nu este controlata de timp ci de
impulsuri de semnal
- D – registre de date – sunt registre de 16 biti care se folosesc pentru păstrarea unor parametrii sau
date de proces; se pot adresa la nivel de bit; de exemplu adresarea bitului 3 din registrul 0 se face
astfel: D0.3
- K, H, E – constante numerice in zecimal, hexazecimal sau in forma exponentiala

Simbolurile grafice cele mai des folosite sunt sunt indicate în tabelul de mai jos:

Contact normal deschis; X001 este numele semnalului care


controleaza releul

Contact normal inchis; M0 este numele semnalului care


controleaza releul

--| ↑ |-- Contact cu detectie de front urcator

--| ↓ |-- Contact cu detectie de front coborator

Controlul bobinei unui releu; Y001 este controlul iesirii

Apel comanda

Exercitii:

1)Srieti programarea in limbaj Ladder pentru:


a)Y000 = X000 SI X001\ SI X002

b) Y000 = X000 SAU X001\ SAU X002

2)Transcrieti cu porti logice punctual 1).

3) Se da schema:
Sa se realizeze programarea in limbaj LAD.

S-ar putea să vă placă și