Posted on

UNO LED Blink – pentru începători

UNO LED Blink – pentru începători

Cel mai simplu program pentru Arduino.

Voi folosi un LED de 3v pe care îl leg la pinul 10 cu un rezistor de 1kΩ.

Blink

Acest led se aprinde atunci când pinul 13 digital este pus in HIGH şi se stinge atunci când pinul 13 este pus în LOW.

Voi scrie un cod :

void setup() {

pinMode(13, OUTPUT);

}

void loop() {

digitalWrite(13, HIGH);   // led aprins

delay(1000);

digitalWrite(13, LOW);    // led stins

delay(1000);

}

Acum voi face upload la program pe placa UNO prin USB.

Dacă mă uit la led-ul conectat la pinul 13 voi vedea că el clipeşte o dată pe secundă.

 

Să analizăm codul de mai sus.

 

La ” void setup”.

Avem o singură instrucţiune, care declară că pinul 13 digital va fi folosit ca ieşire (OUTPUT).

 

La ” void loop”.

Avem o serie de instrucţiuni :

Prima care aprinde led-ul conectat la pinul 13 adică „digitalWrite(13, HIGH)”

A doua care “aşteaptă o secundă” adică “delay(1000)” înseamnă 1000 ms.

A treia îl stinge adică „digitalWrite(13, LOW)”

Şi a patra iaraşi “aşteaptă o secundă”.

Instrucţiunile din „loop” se execută ciclic.

Exemplul următor este extrem de similar cu acesta, doar că în locul led-ului montat din fabrică voi folosi un led exterior plăcii.

Voi folosi un LED de 3v pe care îl leg la pinul 10 cu un rezistor de 1kΩ (foarte important limitează curentul prin LED).

Voi scrie un cod :

void setup() {

pinMode(10, OUTPUT);

}

void loop() {

digitalWrite(10, HIGH);   // led aprins

delay(1000);

digitalWrite(10, LOW);    // led stins

delay(1000);

}

Acum voi face upload la program pe placa UNO prin USB.

Dacă mă uit la led-ul conectat la pinul 10 voi vedea că el clipeşte o dată pe secundă.

Succes !

Colectivul Roboromania

 

Posted on

UNO Semafor cu trei Led-uri verde-galben-rosu – pentru începători

UNO Semafor cu trei Led-uri verde-galben-rosu

Un program simplu pentru Arduino.

Înainte ar fi bine sa citeşti tutorialul “Descrierea pinilor UNO R3

si tutorialul ”Arduino LED Blink”

Voi folosi trei LED-uri de 3v pe care le leg la pinii 8, 9, 10 cu rezistoare de 1kΩ.

UNO-semafor

Voi scrie un cod :

void setup() {

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

}

void loop() {

digitalWrite(10, HIGH);

delay(2000);

digitalWrite(9, HIGH);

delay(200);

digitalWrite(10, LOW);

delay(1000);

digitalWrite(9, LOW);

delay(100);

digitalWrite(8, HIGH);

delay(2000);

}

Acum voi face upload la program pe placa UNO prin USB.

Succes !

Colectivul Roboromania

 

Posted on

Cum să facem un UNO să cânte !

Cum să facem un UNO să cânte !

The imperial March – STAR WARS

muzica

Avem nevoie de un UNO și de un buzzer pasiv.

UNO-Buzzer1 UNO-Buzzer2

Montăm cablurile

Exemplu de cod :

//The imperial March – STAR WARS

// tone(8,LA3,Q)  delay(1+Q)

// toate notele definite in englezăcu exceptia,

//asta care se numeste in italiană “la” pentru că A0…A5 sunt pini “analog”.

// (Ab este definit  Ab, iar inversul(NOT) este LAb)

#define  C0 16.35

#define Db0 17.32

#define D0  18.35

#define Eb0 19.45

#define E0  20.60

#define F0  21.83

#define Gb0 23.12

#define G0  24.50

#define Ab0 25.96

#define LA0 27.50

#define Bb0 29.14

#define B0  30.87

#define C1  32.70

#define Db1 34.65

#define D1  36.71

#define Eb1 38.89

#define E1  41.20

#define F1  43.65

#define Gb1 46.25

#define G1  49.00

#define Ab1 51.91

#define LA1 55.00

#define Bb1 58.27

#define B1  61.74

#define C2  65.41

#define Db2 69.30

#define D2  73.42

#define Eb2 77.78

#define E2  82.41

#define F2  87.31

#define Gb2 92.50

#define G2  98.00

#define Ab2 103.83

#define LA2 110.00

#define Bb2 116.54

#define B2  123.47

#define C3  130.81

#define Db3 138.59

#define D3  146.83

#define Eb3 155.56

#define E3  164.81

#define F3  174.61

#define Gb3 185.00

#define G3  196.00

#define Ab3 207.65

#define LA3 220.00

#define Bb3 233.08

#define B3  246.94

#define C4  261.63

#define Db4 277.18

#define D4  293.66

#define Eb4 311.13

#define E4  329.63

#define F4  349.23

#define Gb4 369.99

#define G4  392.00

#define Ab4 415.30

#define LA4 440.00

#define Bb4 466.16

#define B4  493.88

#define C5  523.25

#define Db5 554.37

#define D5  587.33

#define Eb5 622.25

#define E5  659.26

#define F5  698.46

#define Gb5 739.99

#define G5  783.99

#define Ab5 830.61

#define LA5 880.00

#define Bb5 932.33

#define B5  987.77

#define C6  1046.50

#define Db6 1108.73

#define D6  1174.66

#define Eb6 1244.51

#define E6  1318.51

#define F6  1396.91

#define Gb6 1479.98

#define G6  1567.98

#define Ab6 1661.22

#define LA6 1760.00

#define Bb6 1864.66

#define B6  1975.53

#define C7  2093.00

#define Db7 2217.46

#define D7  2349.32

#define Eb7 2489.02

#define E7  2637.02

#define F7  2793.83

#define Gb7 2959.96

#define G7  3135.96

#define Ab7 3322.44

#define LA7 3520.01

#define Bb7 3729.31

#define B7  3951.07

#define C8  4186.01

#define Db8 4434.92

#define D8  4698.64

#define Eb8 4978.03

// DURATION OF THE NOTES

#define BPM 120    //  you can change this value changing all the others

#define H 2*Q //half 2/4

#define Q 60000/BPM //quarter 1/4

#define E Q/2   //eighth 1/8

#define S Q/4 // sixteenth 1/16

#define W 4*Q // whole 4/4

void setup() {

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

digitalWrite(9,LOW);

}

// the loop routine runs over and over again forever:

void loop() {

//tone(pin, note, duration)

tone(8,LA3,Q);

delay(1+Q); //delay duration should always be 1 ms more than the note in order to separate them.

tone(8,LA3,Q);

delay(1+Q);

tone(8,LA3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,H);

delay(1+H);

tone(8,E4,Q);

delay(1+Q);

tone(8,E4,Q);

delay(1+Q);

tone(8,E4,Q);

delay(1+Q);

tone(8,F4,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,Ab3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,H);

delay(1+H);

tone(8,LA4,Q);

delay(1+Q);

tone(8,LA3,E+S);

delay(1+E+S);

tone(8,LA3,S);

delay(1+S);

tone(8,LA4,Q);

delay(1+Q);

tone(8,Ab4,E+S);

delay(1+E+S);

tone(8,G4,S);

delay(1+S);

tone(8,Gb4,S);

delay(1+S);

tone(8,E4,S);

delay(1+S);

tone(8,F4,E);

delay(1+E);

delay(1+E);//PAUSE

tone(8,Bb3,E);

delay(1+E);

tone(8,Eb4,Q);

delay(1+Q);

tone(8,D4,E+S);

delay(1+E+S);

tone(8,Db4,S);

delay(1+S);

tone(8,C4,S);

delay(1+S);

tone(8,B3,S);

delay(1+S);

tone(8,C4,E);

delay(1+E);

delay(1+E);//PAUSE QUASI FINE RIGA

tone(8,F3,E);

delay(1+E);

tone(8,Ab3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,LA3,S);

delay(1+S);

tone(8,C4,Q);

delay(1+Q);

tone(8,LA3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,E4,H);

delay(1+H);

tone(8,LA4,Q);

delay(1+Q);

tone(8,LA3,E+S);

delay(1+E+S);

tone(8,LA3,S);

delay(1+S);

tone(8,LA4,Q);

delay(1+Q);

tone(8,Ab4,E+S);

delay(1+E+S);

tone(8,G4,S);

delay(1+S);

tone(8,Gb4,S);

delay(1+S);

tone(8,E4,S);

delay(1+S);

tone(8,F4,E);

delay(1+E);

delay(1+E);//PAUSE

tone(8,Bb3,E);

delay(1+E);

tone(8,Eb4,Q);

delay(1+Q);

tone(8,D4,E+S);

delay(1+E+S);

tone(8,Db4,S);

delay(1+S);

tone(8,C4,S);

delay(1+S);

tone(8,B3,S);

delay(1+S);

tone(8,C4,E);

delay(1+E);

delay(1+E);//PAUSE QUASI FINE RIGA

tone(8,F3,E);

delay(1+E);

tone(8,Ab3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,H);

delay(1+H);

delay(2*H);

}

Gata!

Succes !

Colectivul Roboromania

 

Posted on

UNO LED cu intensitate variabila – pentru începători

UNO LED cu intensitate variabila

Un program simplu pentru Arduino.

Voi folosi un LED de 3v pe care îl leg la pinul 10 cu un rezistor de 1kΩ.

UNO-led

Acest led se aprinde atunci când pinul 10 digital este pus in HIGH şi se stinge atunci când pinul 10 este pus în LOW.

Acum îi voi varia aprinderea.

Deşi UNO nu scoate tensiune variabilă pe porturile digitale, exista o posibilitate de a genera un semnal dreptunghiular între 0V și 5V, foarte rapid, şi în funcție de cât timp stă în 5V și cat timp sta in 0V, puterea semnalului variază.

Numele acestui gen de semnal este „PWM„.

De remarcat faptul că doar pinii 3, 5, 6, 9, 10 şi 11 sunt capabili să genereze semnal PWM.

 

Voi scrie un cod :

void setup() {

pinMode(10, OUTPUT);

}

void loop() {

for (int i = 0; i < 255; i++) {

analogWrite(10, i);

delay(50);

}

for (int i = 255; i > 0; i–) {

analogWrite(10, i);

delay(50);

}

}

 

Acum voi face upload la program pe placa UNO prin USB.

Să analizăm codulul de mai sus.

La ” void setup”.

Avem o singură instrucţiune, care declară că pinul 10 digital va fi folosit ca ieşire (OUTPUT).

La ” void loop”.

Avem instrucţiunea analogWrite, care defineşte puterea semnalului PWM de ieşire.

Ca parametri, instrucţiunea analogWrite primeste pinul (10, în cazul meu), şi puterea

semnalului (variabilă, de la 0 la 255).

Aceasta instrucţiune este apelată într-un ciclu “for”, care modifică

valoarea variabilei “I” între 0 si 255.

Efectul va fi ca led-ul se va aprinde gradat pană la maxim, iar apoi se va stinge treptat.

Succes !

Colectivul Roboromania

Posted on

Descrierea pinilor la placa UNO R3

Descrierea pinilor la placa UNO  R3

Uno-roboromania-fata  Uno-MCU-MEGA328PU-ATMEGA16U2-roboromania-fata

Începând de sus.

Există 14 pini digitali de intrare / ieşire (I/O sau input/output).

Aceştia operează la o tensiune de 5 volţi şi pot fi controlaţi cu una din funcţiile pinMode(), digitalWrite() şi digitalRead().

Fiecare pin poate primii sau trimite o intensitate de maxim 40 mA şi au o rezistenţă internă între 20-50 kOhmi (default deconectată). În afară de semnalul standard I/O, unii dintre pini mai au şi alte funcţii specializate.

  • 0 (serial) RX – pin serial, utilizat în special pentru recepţia (intrare – Rx) datelor seriale asincrone (asynchronous serial communication) Protocolul serial asincron este o metodă foarte răspândită în electronică pentru a trimite şi recepţiona date între dispozitive. Acest protocol este implementat în dispozitiv numit UART (Universal Asynchronous Receiver/Transmitter)
  • 1 (serial) TX – pin serial, utilizat pentru trimiterea datelor asincrone (ieşire – Tx). TTL vine de la transistor-transistor logic.
  • 2 (External Interrupts) întrerupere externă. Acest pin poate fi configurat pentru a declanșa o întrerupere la o valoare mică, un front crescător sau descrescător, sau o schimbare în valoare. Vezi detalii despre posibile comenzi la attachInterrupt()
  • 3 (External Interrupts + PWM) întrerupere externă. Identic cu pinul 2. Suplimentar, toţi pinii marcaţi cu semnul ~ pot fi folosiţi şi pentru PWM (pulse with modulation)
  • 4 (I/O) pin standard intrare/iesire
  • 5 (PWM) poate furniza control de ieşire pe 8-bit pentru controlul PWM. Vezi detalii despre posibile comenzi la analogWrite()
  • 6 (PWM)
  • 7 (I/O) pin standard intrare/ieşire
  • 8 (I/O) pin standard intrare/ieşire
  • 9 (PWM)
  • 10 (PWM + SPI) – suportă comunicare prin interfaţa serială (Serial Peripheral Interface). SPI-ul are patru semnale logice specifice iar acest pin se foloseste pentru SS – Slave Select (active low; output din master). Pinii SPI pot fi controlaţi folosind libraria SPI.
  • 11 (PWM + SPI) – suportă SPI, iar acest pin se foloseşte pentru MOSI/SIMO – Master Output, Slave Input (output din master)
  • 12 (SPI) – suportă SPI, iar acest pin se foloseşte pentru MISO/SOMI – Master Input, Slave Output (output din slave)
  • 13 (LED + SPI) – suportă SPI, iar acest pin se foloseşte pentru SCK/SCLK – Ceas serial (output din master). De asemenea, pe placă este încorporat un LED care este conectat la acest pin. Când pinul este setat pe valoarea HIGH este pornit, când are valoarea LOW este oprit.
  • 14 (GND) – împământare. Aici se pune negativul.
  • 15 (AREF) – Analog REFference pin – este utilizat pentru tensiunea de referinţă pentru intrările analogice. Se poate controla folosind funcţia analogReference().
  • 16 (SDA) – comunicare I2S
  • 17 (SCL) – comunicare I2S

 

În partea de jos.

Există o serie de 6 pini pentru semnal analogic, numerotaţi de la A0 la A5.

Fiecare din ei poate furniza o rezoluţie de 10 biţi (adică maxim 1024 de valori diferite). În mod implicit se măsoară de la 0 la 5 volţi, deşi este posibil să se schimbe limita superioară a intervalului lor folosind pinul 15 AREF şi funcţia analogReference(). De asemenea, şi aici anumiţi pini au funcţii suplimentare descrise mai jos:

  1. A0 standard analog pin
  2. A1 standard analog pin
  3. A2 standard analog pin
  4. A3 standard analog pin
  5. A4 (SDA) suportă comunicarea prin 2 fire (I2C (I-two-C) sau TWI (Two wire interface)). Acest pin este folosit pentru SDA (Serial Data) la TWI.
  6. A5 (SCL) identic cu pinul 4, doar că acest pin este folosit pentru SCL (Serial Clock) la TWI. Pentru controlul TWI se poate folosi librăria Wire.

Lângă pinii analogici arătaţi mai există o secţiune de pini notată POWER.

Acestia sunt ( începând de lângă pinul analog A0) :

  • 1 Vin – intrarea pentru tensiune din sursă externă (input Voltage)
  • 2 GND – negativul pentru tensiune din sursă externă (ground Voltage)
  • 3 GND – negativ. Se foloseşte pentru piesele şi componentele montate la arduino ca şi masă/împământare/negativ.
  • 4 5V – ieşire pentru piesele şi componentele montate la arduino. Scoate fix 5V dacă placa este alimentată cu tensiune corectă (între 7 şi 12 v)
  • 5 3,3V – ieşire pentru piesele şi senzorii care se alimentează la această tensiune. Tensiunea de ieşire este 3.3 volţi şi maxim 50 mA.
  • 6 RESET – se poate seta acest pin pe LOW pentru a reseta controlerul de la Arduino. Este de obicei folosit de shield-urile care au un buton de reset şi care anulează de obicei butonul de reset de pe placa Arduino.
  • 7 5VREF – este folosit de unele shield-uri ca referinţă pentru a se comuta automat la tensiunea furnizată de placa arduino (5 volţi sau 3.3 volţi) (Input/Output Refference Voltage)
  • 8 pin neconectat, este rezervat pentru utilizări ulterioare (la reviziile următoare ale plăcii probabil).

Comunicarea cu calculatorul, altă placă arduino sau alte microcontrolere se poate realiza fie prin portul USB (şi este văzut ca un port standard serial COMx), fie prin pinii 0 şi 1 (RX şi TX) care facilitează comunicarea serială UART TTL (5V). Folosind librăria SoftwareSerial.

Se poate face comunicaţii seriale folosind oricare din pinii digitali.

Pentru comunicarea I2C (TWI) este inclusă o librărie Wire. Pentru comunicarea SPI se poate folosi librăria SPI.

După cum vedeţi în imagine,in  partea dreapta, placa mai are o serie de pini marcaţi ICSP (In-Circuit Serial Programming). Aceşti pini pot fi folosiţi pentru reprogramarea microcontrolerului, sau ca pini de expansiune cu alte microcontrolere compatibile. Sunt conectaţi standard şi se poate folosi un cablu de 6 fire (MOSI, MISO, SCK, VCC, GND, şi pinul RESET).