Clonă Arduino

3 IULIE 2012

Locul de origine al proiectului Arduino este Institutul de Design Interactiv din Ivrea, Italia. Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino și David Mellis sunt inițiatorii acestui proiect, care a avut ca idee diriguitoare realizarea unui mediu prietenos, simplu de folosit, ludic (chiar), care să capteze un număr cât mai ridicat de utilizatori în domeniul embedded software.
Istoric vorbind, conceptul software Arduino își trage seva din mediul de dezvoltare Processing (processing.org), o extensie Java (Casey Reas și Ben Fry) și limbajul Wiring (wiring.org.co – Hernando Barragan, Universidad de Los Andes, Bogota, Columbia). Chiar pe site-ul wiring.org.co este precizată filiația dintre Wiring și Processing, iar Arduino și Fritzing (Universitatea de Științe Aplicate din Potsdam, Germania) sunt denumite “proiecte surori”. Nu este deloc surprinzător că aceste proiecte au originea și o amplă utilizare în mediul academic.

Autor: Viorel Bianu
viorel.bianu@yahoo.com

Arduino este o platformă hardware + software de dezvoltare de prototipuri electronice open-source, proiectată pentru a face accesibilă utilizarea electro­nicii în proiecte multidisciplinare. Hardware-ul constă dintr-o placă cu arhitectură deschisă, cu procesor Atmel AVR şi suport I/O on-board. Software-ul constă dintr-un limbaj de programare standard şi un bootloader care este programat în MCU de la început.

Observație: se face astfel economie de utilizare a unui programator dedicat. Totuși, nu uitați: un programator este necesar chiar în etapa de scriere în chip a bootloader-ului.

Placa hardware Arduino este programată utilizând un limbaj foarte similar cu C / C++. De fapt, mediul este bazat pe această extensie Java (despre care am amintit deja, Processing) și celebrul compilator gcc (GNU C Compiler din mediul Linux, care rulează în fundal).
Limbajului i s-au adus câteva simplificări și modificări și constituie un mediu de dezvoltare integrat (IDE).
Arduino este simplu pentru începători, dar este însă foarte bun şi pentru profesionişti, aceştia putând programa în C++ sau o combinație între limbajul Arduino și C++. Conceptul este unul de mare succes, comunitatea este numeroasă și foarte puternică și în acest sens există mii de proiecte ce pot fi utilizate pentru iniţiere, nefiind practic domenii în care entuziaştii Arduino să nu fi abordat deja aplicaţii.

Descrierea plăcii
Aplicația prezentată este o clonă Arduino. Schema este cea foarte cunoscută – comunicare USB, MCU de tip Atmel (ATMega 8 / 168 / 328), conectoare mamă de intrare / ieșire și conectorul de programare ICSP (în acest caz este varianta cu 10 pini). Nu am folosit ideea de comutare automată a tensiunii de alimentare (LM358 + tranzistor MOS); soluția cu jumper este mai simplă și directă.

Schema electronică

Plăcile de dezvoltare Arduino se bazează pe comunicarea USB, iar o soluție foarte cunoscută este utilizarea chip-urilor FTDI (FT232, www.ftdi.tw.com). Deoarece în regim de amator nu este comod să faci cablaje pentru lipire de dispozitive SMD, o idee la îndemână a fost utilizarea unui “clasic” modul de dezvoltare USB, numit FT232RL (produs tot de FTDI). Între timp, există soluții mai noi, mai simple și mai moderne (FTDI Basic, de exemplu). În rest, de-a lungul timpului, mai multe MCU din gama AVR cu memorii Flash din ce in ce mai mari, au fost folosite (ATMega 8 / 168 / 328, apoi ATMega 1280 / 2560).

Observație: până de curând, microcontrolerele produse de către Atmel nu erau înzestrate nativ cu USB. Mai nou, Atmega 32U4 apare pe o variantă relativ recentă – Arduino Leonardo, eliminând astfel circuitul FTDI.

În privința plăcilor de extensie, conceptul (Arduino) se bazează pe așa-numitele “shield”-uri. Acestea sunt plăci cu conectoare mamă cu pini lungi (aliniate cu cele ale plăcii “de bază”), care se pot plasa deasupra plăcii Arduino. Rezultă un avantaj în privința spațiului și un design foarte compact. Totuși conectoarele cu pini lungi nu sunt foarte accesibile, iar soluția a fost să le înlocuiesc cu conectoare de cablu plat (10 pini, de multe ori numite în literatura de specialitate HE10). Toate conectoarele “de semnal” (inclusiv cel de programare, ICSP) sunt de tipul HE10 (J1, J2, J3 + ICSP). Numai conectorul auxiliar de alimentare (Vin, +5V, 3V3 și GND) este diferit. Astfel, placa de extensie nu va fi deasupra, ci lângă placa “de bază”. Poate fi un avantaj mai ales la testarea de prototip, când este nevoie ca pinii să fie accesibili pentru măsurători. În plus, realizarea cablurilor plate este imediată, nepresupunând desizolare și sertizare atentă de pini.
Partea de alimentare folosește un conector cu 2 pini (J4, nu neapărat unul de tip “barrel jack”, ca originalul), un buton de comutare a tensiunii de intrare (SW1, pentru a nu fi nevoit permanent a întrerupe alimentarea prin scoaterea mufei) și o diodă (D1, tip 1N4003) pentru protecție la conectare inversată a alimentării. O aplicație clasică cu LM7805 (U3) asigură tensiunea de alimentare. Acesta este prevăzut cu un mic radiator, pentru situațiile frecvente în care tensiunea de alimentare trebuie transmisă pe placa țintă.
Led-ul verde (PWR), polarizat prin rezistența R1 (470 ohmi) atestă prezența tensiunii de alimentare. Alegerea între VUSB și +5V se face cu un jumper cu 3 poziții (JP1, alegerea implicită este +5V – tensiunea de alimen­tare este luată de pe LM7805).

Cu limitările de curent ale USB, este o idee mai robustă.
UM232RL (U2) asigură implementarea comuni­cației USB.
Modulul iese cu semnalele Rx și Tx (de comunicare serială) prin 2 rezis­tori (R2, R3 valoare 1K), conectaţi respectiv către pinii Tx / Rx ai microcontrolerului.

Codul sursă al aplicaţiei

/*
Test pentru comunicarea seriala cu mesajul „Hello Electronica Azi!”
modified by me (Hobby concurs EA), 13 June 2012, 14:49
Placa este o clona Arduino (MCU ATMega168 @16MHz), echivalenta cu Arduino Diecimila sau Duemilanove
*/
int i;
void setup()
{
Serial.begin(9600); // se seteaza viteza de comunicatie
}
void loop()
{
for(i=0; i<=2; i++) { Serial.println("Hello Electronica Azi!"); Serial.println("This is for the Hobby Contest EA!"); Serial.println("Arduino clone == (equivalent) to Arduino Diecimila or Duemilanoven"); Serial.println("Thank you!n"); // mesajele transmise pe linia seriala + caracter escape } delay(5000); // cu o pauza de 5 secunde } // Done compiling, 2040 bytes / 7168 bytes max /* 14:52, Jun 13 2012*/ /* 2272 bytes (of a 14336 byte maximum) on Diecimila board */ /* 2012 Jun 13, 18:11 */ Pe CBUS0 și CBUS1 (pini de tip GPIO ai FT232) sunt conectate cele două led-uri (LED2, LED3 - galben și roșu) pentru transmisie / recepție USB (am folosit configurarea de la producător a celor 2 pini). Led-urile pun în evidență, în etapa de programare, comunicarea și sensul acesteia (interior / exterior). Rezistența R8 (100 ohmi) în paralel cu C7 (10nF) sunt conectate cu pinul de RESET. De pe modulul UM232, tensiunea de 3V3 este pre­luată și plasată pe conectorul auxiliar de alimentare (J5).

Conectorul este util

pentru transmiterea tensiunilor și a semnalului de RESET (când este necesar) către placa țintă. Oscilatorul este realizat cu un cuarț extern de 16MHz (X1 plus condensatorii ceramici de 22p alăturați – C5, C6). Este vizibil și butonul de RESET (cu rezistența de “pull-up” a acestuia – R6, 10K).
Reamintesc, diferențele sunt doar la conectoare. Fiind cu 10 pini, pe ele pot apărea și tensiunea de alimentare și GND (prezența acestora fiind din nou un avantaj – conectorul auxiliar va fi folosit mai rar, doar atunci când se lucrează strict la 3.3 Volți). Pe placă regăsim conectorul ICSP, în varianta cu 10 pini, foarte utilizată și cunoscută. Legat cu pinul SCK (prin R7, 330 ohmi) este led-ul LED4 (albastru) folosit la testarea inițială, care se face prin tradiție cu faimosul program “Hello world!”. În lumea embedded software, “Hello world” înseamnă aprinderea / stingerea ritmică a unui led.

Descrierea aplicației şi precizări
Aplicația este simplă și utilizează comunicarea pe portul serial. Dupa inițializare, se transmite pe acesta mesajul “Salut Electronica Azi”. Este prezentată o captură a ecranului în care sunt vizibile cele două fe­restre de aplicații (fereastra mediului Arduino, în care este scris sketch-ul + fereasta de aplicație a programului de tip serial terminal). Ideea de flexibilitate a fost importantă de la bun început: s-au folosit (datorită compatibilității la pini) atât MCU tip ATMega8 cât și ATMega168 / 328. În cazul utilizării ATMega8, clona realizată se poate declara în mediul Arduino ca o placă de tip Arduino NGV. În celălalt caz, plăcile pot fi declarate drept Diecimila sau Duemilanove. În fond, toată problema se rezumă la bootloader: pentru fiecare tip de placă (conform denumirilor specificate de către Arduino, www.arduino.cc), trebuie scris în MCU tipul de bootloader potrivit.
Precizare finală: clona Arduino a fost realizată inițial pe o placă protototip cu găuri (“perfboard” într-un limbaj care tinde să devină consacrat) de la Comet Electronics. Toate conexiunile au fost făcute cu fir de wrapping, iar placa (după cum se poate vedea și din aplicația software) funcționează foarte bine.

NOTA REDACŢIEI
În numerele viitoare vom continua prezentarea aplicaţiilor primite de la cititorii noştri în urma concursului organizat de revista Electronica Azi şi sponsorizat de compania Farnell.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

  • Folosim datele dumneavoastră cu caracter personal NUMAI pentru a răspunde comentariilor/solicitărilor dumneavoastră.
  • Pentru a primi raspunsuri adecvate solicitărilor dumneavoastră, este posibil să transferăm adresa de email și numele dumneavoastră către autorul articolului.
  • Pentru mai multe informații privind politica noastră de confidențialitate și de prelucrare a datelor cu caracter personal, accesați link-ul Politica de prelucrare a datelor (GDPR) si Cookie-uri.
  • Dacă aveți întrebări sau nelămuriri cu privire la modul în care noi prelucrăm datele dumneavoastră cu caracter personal, puteți contacta responsabilul nostru cu protecția datelor la adresa de email: gdpr@esp2000.ro
  • Abonați-vă la newsletter-ul revistei noastre