Translate

luni, 14 noiembrie 2011

Arduino Shield

Este o perioada aglomerata asa ca astazi voi trata un subiect mai putin comun; voi vorbi despre shielduri. Acestea pot fi de multe feluri si cu diferite functii. Un shield este o placuta care se introduce in toti pinii controllerului Arduino. Acesta utilizeaza o parte din pini pentru a-si atinge scopul propriu; restul sunt pur si simplu mutati pe noua placuta.

1.Sensor Shield
Arduino Sensor Shield
Acest Shield nu este mare lucru. La el se pot conecta diferiti senzori printr-un cablu cu 3 fire. De fapt, Shield-ul reuneste trei pini - alimentare 2 pini si semnal un pin. Toate mufele pe care le gasim sunt, de fapt cate un port de pe Arduino-ul original. Un Sensor Shield are si un port de comunicatii, pe care se pot folosi comunicatii I2C - pentru un ecran LCD sau un senzor de temperatura digital.
Intrucat acesta se pune peste controllerul Arduino, nu mai avem acces la ledurile sau switchurile de pe controller; asadar pe orice shield gasim si butonul reset si cel putin ledul power.
Arduino Sensor Shield a aparut in mai multe variante, de obicei create pentru diferite scopuri (senzori I2C, servomotoare sau senzori analogici).

2.Ethernet Shield

Arduino Ethernet Shield
Acest shield este inca un mister si pentru mine, asadar pana cand voi lucra cu el il voi mentiona ca fapt divers (sa stim de existenta lui). Acesta permite unui Arduino sa acceseze o retea locala. Are un port de retea cu 8 fire, RJ-45 care se poate conecta la un router. Acesta exista sub multe forme cu diferite facilitati. Exista Ethernet Shield care poate alimenta un Arduino. Spre exemplu, folosind un astfel de shield, se poate crea o conexine catre un site care ofera informatii despre vreme si se pot afiza prognozele pe un ecran. Dupa cum se poate vedea in poza, acest ethernet shield are si un cititor de carduri microSD.

3.Prototyping Shield
Prototyping Shield
Acest shield se utilizeaza pentru ca ofera un acces foarte facil la un breadboard. Desi se poate pune breadboardul langa arduino, folosind acest shield, mutarea proiectelor se poate face mai usor. Cred ca stim cu totii cand aveam un proiect pe breadboard si arduino-ul langa si am vrut sa mergem sa-l aratam si in timpul transportului a iesit fie si un singur fir si s-a dus naiba totul.










Shieldurile enumerate mai sus sunt cele mai folosite si ,exceptand ethernet shield, cele mai simple. Trebuie sa mai mentionam existenta unor shielduri complicate, cum ar fi GSM shield sau X-Bee Shield sau LCD shield. Probabil va intrebati care este rolul acestui post; ideea a fost de a explica putin conceptul de Arduino Shield, deoarece urmatorul proiect este un mic upgrade la semaforul prezentat in postul anterior; proiect pe care il voi prezenta sub forma unui shield.

marți, 8 noiembrie 2011

Semafor controlat de Arduino

Ca o scurta aplicatie a ceea ce am prezentat deja, vom incerca sa facem inca un mic proiectel; un semafor. Materiale necesare:
Materiale necesare: breadboard, fire, Arduino Board, LED Brick
  • Arduino board
  • Led-uri (verde, rosu, galben)
  • Rezistente (de 220 Ohm ar trebui sa fie suficiente)
  • Fire
Vom realiza un fel de tabel de adevar; acesta va prezenta algoritmul semaforului in pasi:
  1. Rosu
  2. Rosu + Galben
  3. Verde
  4. Galben
Acestia sunt pasii pe care ii va parcurge in timpul executarii functiei loop. Inainte de proiect trebuie sa stabilim intervalele de timp pentru fiecare pas; asadar rosu va dura 20 secunde, rosu+galben 1 secunda, verde 20 secunde, galben o secunda. Valorile le puteti schimba; pentru ca ar trebui sa stiti deja cum. Schema acestui circuit:


Conexiunile care trebuie facute:
led rosu-D10 (digital 10)
    led galben-D9
    led verde-D8 (se observa in schema ca exista acele rezistente).
La sfarsit, circuitul va arata cam asa:
Circuitul final

Pasul urmator: programul care trebuie rulat. Acesta arata cam asa:

int redLed=10;
int yelLed=9;
int grnLed=8;

void setup(){
pinMode(redLed,OUTPUT);
pinMode(yelLed,OUTPUT);
pinMode(grnLed,OUTPUT);}

void loop(){
digitalWrite(grnLed,LOW);
digitalWrite(yelLed,LOW);
digitalWrite(redLed,HIGH);
delay(20000);
digitalWrite(yelLed,HIGH);
delay(1800);
digitalWrite(redLed,LOW);
digitalWrite(yelLed,LOW);
digitalWrite(grnLed,HIGH);
delay(20000);
digitalWrite(grnLed,LOW);
digitalWrite(yelLed,HIGH);
delay(1800);}

Acest proiect nu ar trebui sa puna niciun fel de probleme; trebuie doar atentie si rabdare. Eu am folosit niste elemente numite brick. Acestea fac parte din primul meu kit Arduino (pe care l-am primit de la colegii mei de facultate si carora vreau sa le multumesc pe aceasta cale). Ele sunt, de fapt niste componente foarte scumpe care se pot conecta aproape (pentru ca toate GND se conecteaza in acelasi punct) direct la Arduino. LED brick-ul de fapt este un PCB care contine un LED si o rezistenta. Costurile unui brick se ridica la 5 lei sau chiar 8; componentele esentiale nu costa nici macar 1 leu. Eu le-am folosit pentru ca le aveam si ca era mai comod.

sâmbătă, 5 noiembrie 2011

"Hello, world" - Arduino Version

Ei bine, acum ca ne-am ales board-ul care ne va insoti in continuare putem sa trecem la crearea unui program clasic pentru orice limbaj de programare. Ca sa ne apucam de treaba avem nevoie de programelul Arduino. La momentul publicarii postului ultima versiune este 0022, disponibila aici. Acum ca avem si programelul, pentru primul program avem nevoie de urmatoarele:
  • Arduino board
  • USB cable
Codul este disponibil deja in exemplele Arduino 0022. Il putem accesa, dupa cum se vede in imagine.
Programul se numeste blink.
Ce face el?
Desi este un program banal, care aprinde si stinge un led montat deja pe board, acest program reprezinta primul contact cu limbajul de programare Arduino. Voi explica, pe scurt fiecare linie de comanda din program.


/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
 */

void setup() {               
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);    
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(1000);              // wait for a second
}

  • /* bla bla bla  */   -  Ceea ce este cuprins intre /* si */ este considerat comentariu si nu este luat in considerare la compilare; se poate folosi pentru comentarii pe mai multe linii
  • void setup(){....} - este o functie care in timpul rularii programului se ruleaza o singura data; aici se seteaza starea pinilor (intrare sau iesire, se intializeaza ecranele LCD, modulele SD, etc)
  • //  - este simbolul folosit pentru comentarii ce nu depasesc o linie
  • pinMode(13,OUTPUT); - este sitnaxa pentru setarea starii unui pin; in cazul de fata pinul 13 este setat ca pin de iesire. In comanda se face referire la pinii digitali (numerotati 0-13)  si modurile sunt INPUT sau OUTPUT)
  • void loop(){...} - este o a doua functie esentiala a unui program Arduino. Aceasta functie se ruleaza incontinuu, cand ajunge la sfarsit, se reia executarea de la inceput. 
  • digitalWrite(13,HIGH); - este o comanda care aplica tensiune de 5V pe pinul 13 al controllerului. In cazul de fata, exista un LED conectat intre pinul 13 care se va aprinde. Pinii controllerului reprezinta borna pozitiva a oricarui dispozitiv conectat  (led, spre exemplu); a doua borna se conecteaza la GND.
  • delay(1000); - este functia care creeaza o pauza in rularea programului. Parametrul functiei este numarul de milisecunde cat dureaza pauza.
  • pinMode(13,LOW); - aceasta comanda taie voltajul de pe pinul 13; acesta are acelasi potential ca GND; nu exista cadere de potential, nu exista curent.
Acesta este faimosul  "Hello, world" in limba Arduino. Cu aceste comenzi se pot face diferite secvente de leduri; Arduino accepta si comenzi gen for sau while pentru a face jocuri de leduri mai complexe.

joi, 3 noiembrie 2011

Sunt Arduino. Hai sa ne cunoastem mai bine!

Consecinta prezentarii optiunilor de Arduino, cel putin pentru inceput, deoarece exista variante mai complexe, gen Arduino Mega 2560 sau variante miniaturale Arduino Mini,consecinta fireasca este intrarea in posesie a uneia. Acest post isi propune sa prezinte ce gasim pe o placa Arduino si ce ne mai trebuie pentru a trece la "primul meu proiect".
Board-ul Arduino Duemilanove

 In imagine se poate observa controllerul Arduino. In partea de sus sunt cei 14 pini digital I/O configurabili. Acestia vor fi configurati in timpul programarii. Exista niste pini mai speciali, cum ar fi pin-ul 13; acesta are un LED instalat din fabrica, marcat prin "L".
In partea stanga, este interfata USB prin care se programeaza si se alimenteaza controllerul. Conectorul negru este de alimentare; acesta se poate folosi dupa programare, pentru a folosi circuitul realizat. Se alimenteaza  cu o tensiune de maxim 12V; exista conector pentru aceasta mufa cu suport de baterie de 9V, sau cu array de 4 baterii normale sau chiar catre USB (care nu permite si programare).
In partea de jos, exista 6 pini denumiti "Analog in"; acestia sunt pini de intrate; multi senzori fiind conectati la acestia. Senzorii analogici (de obicei bazati pe voltaj) se conecteaza si iesirea din senzori este procesata si transformata in valori accesibile omului. Langa porturile Analog In, se alfa porturile "Power". Aceste porturi pot asigura alimentarea diferitelor componente. Acestea au valori de 5V si 3.3V; aceasta tensiune se obtine conectand borna negativa la orice pin notat GND (borna negativa).
Butonul push de pe placa este butonul "Reset"; acesta restarteaza practic controllerul. Aceasta restartare provoaca reincarcarea programului in memorie si poate remedia anumite erori aparute.
Pe placa mai exista inca trei LED-uri, munite "RX", "TX" si "PWR". Ultimul este evident un bec ce arata ca Arduino este alimentat cu energie electrica. Celelalte doua, se aprind cand exista transfer de date catre calculator; r - received si t - transmitted.
Un alt element necesar este un programel Arduino 0022 disponibil gratuit aici. Acest program va fi interfata dintre utilizator si Arduino. Elementele de baza ale programelului vor fi explicate in postul urmator cand va fi realizat si "Primul Proiect".

marți, 1 noiembrie 2011

Original vs. Clone vs. Handmade

Ei bine, titlul este destul de sugestiv.... Cand trebuie sa ne alegem Arduino-ul ne intrebam ce ar trebui sa facem. Voi incerca sa dau un raspuns disecand fiecare varianta in parte.

Rasunsurile la aceasta intrebare depind foarte mult de cel pe care il intrebati. Fiecare comerciant isi va lauda marfa, probabil asta voi face si eu, dar voi incerca sa gandesc in afara cutiei. Consider ca ce isi face omu' cu mana lui nu e lucru manual, ci este sfant. De departe cel mai bun Arduino este cel facut de fiecare in parte folosind piese de calitate. Exista mai multe problemute care intervin:
  1. Trebuie sa facem un PCB. Acesta se gaseste pe site-ul oficial Arduino, schema este gratuita si disponibila oricui. Una din probleme este obtinerea PCB-ului functional; folosind metoda fotografica implica ceva experienta, metoda markerului nici nu trebuie luata in discutie, deci ramane sa apelam la o firma specializata, fapt care ridica mult costurile.
  2. Trebuie sa folosim unele componente SMD care pot crea si ele probleme, nefiind tocmai usor de lipit.
Avantajele acestuia ar fi mai multe:
  1. Stim ce componente folosim, de obicei mai capabile decat cele din fabrica (majoritatea fabricantilor folosesc piesele aproape de limita lor de exploatare - un exemplu graitor acum vreo 5 ani au aparut niste boxe 5.1 Genius pe care a trebuit sa le repar de cateva ori pana mi-a zis un meserias sa tin volumul de la calculator pe la 30% si sa folosesc  volumul lor ca daia le-am ars :-??)
  2. Componentele care se defecteaza pot fi schimbate, fiind folosite componente mari putem sa el dezlipim si inlocuim
  3. Lipind prindem experienta pentru viitoarele proiecte
  4. Ne intalnim cu diferite componente si pe care le vom recunoaste in alte proiecte, unii chiar isi vor pune intrebari despre cum le-ar putea folosi in alte proiecte
  5. Satisfactia unei realizari personale.
 In imagine, este un Arduino handmade(95%) PCB si SMD-ul sunt facute de roboti; toate componentele se gasesc in magazinele de piese electronice. Pentru cei interesati, mai multe detalii aici.


In caz ca am renuntat la prima varianta, avem doua optiuni: original sau clone. Ei bine, depinde de fiecare. In imagini, am incercat sa compar doua board-uri: un clone si un original. Dupa aproximativ jumatate de ora de studiu, singura diferenta pe care am reusit sa o remarc, din punct de vedere constructiv, este prezenta pinilor X3; acesti patru pini sunt prezenti pe placa clone, iar pe cea originala nu. Cu mici diferente de aspect (recunosc ca originalul arata mai vesel cu steagul Italiei si cu harta) cele doua placi arata si functioneaza absolut identic. Singura diferenta pe care am mai observat-o este diferenta de pret; un clone costa cu aproximativ 25-30% mai putin decat originalul. Am mai intrebat diferite persoane si am primit diferite raspunsuri "cele originale sunt testate garantat functioneaza", ei bine, cu banii de doua originale cumpar trei clone-uri si tot or merge doua. Eu am lucrat cu ambele si nu am observat nicio diferenta in comportament. Ca opinie, strict personala, as alege un clone, deoarece este mai ieftin si daca din neatentie gresec un proiect parlesc o suma mai mica de bani. Un atu al clone-ului este ca microcontrollerul poate fi schimbat si cu un ATMega328 fara bootloader si instalarea bootloaderului (toate acestea cu un singur Arduino!)

Alegerea placii pe care sa lucram este o decizie personala, eu mi-am facut datoria sa prezint variantele posibile si sa fac recomandarile de rigoare. Puteti dezbate in continuare subiectul prin comentarii.