Prototipare rapidă în Epoca Arduino, mikroBUS și Processing

by donpedro

Conferințele și târgurile de expoziții sunt esențiale pentru Silicon Valley și îți dai seama seama de acest lucru și prin abundența panourilor publicitare amplasate de-a lungul tronsonului de autostradă Highway 101 dintre San Francisco și San Jose, care anunță data și locația următorului eveniment. Pe măsură ce valurile de ‘pantaloni Cargo’, ‚costume’ și ‚căști’ se intensifică în jurul sălilor de expoziții între sesiuni, devine din ce în ce mai greu să le atragi atenția. Mare parte din cariera mea de inginer de profil electric a însemnat proiectarea și implementarea echipamentelor/dispozitivelor demonstrative pentru asemenea evenimente și îmi place foarte mult această provocare. Avansul tehnologiei sistemelor embedded – și, în special, tehnologia noilor senzori – este un subiect destul de comun, iar crearea unor demo-uri captivante, care să genereze interes, nu este o sarcină ușoară.

Recent, mi-am propus să creez un demo interactiv, bazat pe un sistem compus din senzori. Pentru ca demonstrația să fie captivantă, aceasta trebuia să conțină în structura sa cel puțin doi dintre cei trei piloni de bază ai unei reușite depline: imagine, sunet și mișcare. Experiența anterioară m-a învățat să evit demonstrațiile de tipul exploziilor și laserilor montați pe rechini.

Din fericire, acum trăim în lumea prototipării rapide mulțumită unor companii precum Arduino, MikroElektronika și Adafruit. Utilizez produse de la aceste companii tot timpul, pentru a-mi construi sistemele pe care le folosesc pentru sesiunile de predare și pentru evaluarea de noi produse. Din fericire pentru mine, când am început să conturez această demonstrație, Microchip tocmai lansase o campanie promoțională împreună cu MikroElektronika, bazată pe plăcile electronice click, așa că am avut la dispoziție câteva dintre ele. Am avut un 10DOF Click, care conține doi senzori Bosch cu adevărat interesanți. Mai exact, un IMU BNO055 cu 9 axe (Inertial Measurement Unit – Unitate de Măsurare Inerțială) și un senzor de presiune digital, BMP180.

Figura 1: Modul în care plăcile se îmbină printr-un “click   ▶▶

Suntem aproape de nivelul mării aici în San Jose, iar podeaua centrului de expoziții este destul de plană, așa că fluxul de date primit de la senzorul de presiune avea să fie destul de plictisitor. Având un senzor de mișcare complet, pe 9 axe, a însemnat o cu totul altă poveste. De asemenea, aveam în biroul meu și câteva plăci de expansiune UNO click, pe care le-am folosit pentru această demonstrație. Placa de expansiune UNO click, după cum îi spune și numele său, permite unei plăci MikroElektronika Click conectarea la un shield standard Arduino UNO. Ultima piesă hardware a puzzle-ului a fost o placă ATmega328P Xplained Mini. Transformarea acestei plăci într-o platformă de tip Arduino UNO este doar o problemă de programare a bootloader-ului Arduino, dar aveam în minte o soluție mai elegantă. Din fericire, această placă de evaluare acceptă conectori standard Arduino UNO, iar eu dispuneam și de acei conectori. Am încercat să evit o mulțime de modificări hardware, așa că nu mi-a mai rămas decât o sarcină simplă și rapidă de lipire.

Figura 2: Îmbinarea celor trei plăci: modulul MikroElektronika 10DOF Click, shield-ul Arduino Uno Click și placa ATmega328P Xplained Mini.

Lucrurile păreau că toate plăcile se vor conecta așa cum am gândit. Știam că shield-ul UNO click va ruta semnalele de la senzorul BNO055 prin interfața I2C, către placa Arduino. Și totuși, a existat o problemă esențială care trebuia rezolvată. 10DOF Click este o placă cu o alimentare de numai 3.3V, în timp ce configurația implicită a plăcii 328P Xplained Mini este de operare la 5V cu alimentare printr-un port USB. Cu toate acestea, echipa de dezvoltare de la Microchip a ținut cont de acest inconvenient, adăugând un LDO pe placa 328P Xplained Mini, care poate fi pus în funcțiune folosind câțiva jumperi.

Toate cele trei plăci au fost conectate împreună și, după o verificare rapidă a stării conexiunilor și a alimentării, aveam acum pe biroul meu o stivă senzor/ microcontroler, din care, din fericire, nu a ieșit fum din componente la punerea în funcțiune 😊.

Partea hardware: aplicația demonstrativă

Eram deja familiarizat cu senzorul BNO055 IMU cu 9 axe de la Bosch din proiectele anterioare, așa că aveam deja un cod de test de la Adafruit, pentru a valida fluxul de date de bază de la toți cei trei senzori de mișcare. Adafruit livrează, de asemenea, și o bibliotecă completă pentru BNO055, care conține codul de test pe care îl foloseam.

BNO055 este o unitate de măsurare inerțială destul de puternică, capabilă să furnizeze nu numai date brute de la accelerometru, giroscop și magnetometru, dar și soluții senzoriale complete în formate precum unghiuri Euler și cuaternion. Codul de test de la Adafruit exista deja în format ‘sketch’ (n.trad.: Un program scris în IDE pentru Arduino se numește sketch) și a fost scris fix pentru același dispozitiv, BNO055. Adafruit este una dintre soluțiile mele preferate atunci când dezvolt sisteme pentru demonstrații sau cursuri. Nu numai că modelele hardware sunt solide, dar documentația este de cel mai bun nivel. Fiecare produs este lansat pe piață împreună cu o mulțime de lucruri suplimentare, inclusiv note de aplicație și ghiduri de conectare.

Întrucât am folosit funcția de importare a sketch-ului Arduino în Atmel Studio 7, nu a fost necesară programarea bootloader-ului Arduino pe placa mega328P Xplained Mini. Așa cum era de așteptat, codul de test de la Adafruit a fost importat în Atmel Studio 7 fără probleme. Lucrul cu Studio 7 a oferit două avantaje reale în ceea ce privește realizarea acestei demonstrații, pe lângă faptul că am putut folosi cantitatea mare de cod deja aflată în domeniul public. Primul și cel mai important avantaj este abilitatea de a depana codul la nivel de sursă pentru un sketch Arduino, inclusiv posibilitatea de a utiliza puncte de întrerupere și de a inspecta / modifica datele din memorie fără a fi nevoie să utilizez funcția Serial.print (). Această capabilitate de vizibilitate și control, care este o parte normală a sistemelor embedded profesionale de dezvoltare, îmi permit să găsesc rădăcina problemei și să corectez toate acele mici greșeli enervante care apar atunci când cineva încearcă să dezvolte rapid un demo cod. În al doilea rând, deoarece fluxul principal de date de la placa Mini Xplained a fost transmis prin portul USB CDC, nu a fost nevoie să intervin în vreun fel în fluxul de date de la IMU cu informații de depanare. Singura problemă reală pe care am întâmpinat-o atunci, a fost o adresă I2C care nu se potrivea, dar placa BNO055 de la Adafruit și schemele electrice ale 10DOF Click nu semnalau vreo problemă.

Am descărcat codul, mi-am pornit aplicația pe laptop în modul consolă și am fost întâmpinat plăcut de următorul flux de date ACSII.

Calibration: 0 3 0 3
Orientation: 201.25 -17.62 103.00
Calibration: 0 3 0 3
Orientation: 204.69 -27.37 110.81
Calibration: 0 3 0 3
Orientation: 216.69 -34.06 121.69
Calibration: 0 3 0 3
Orientation: 217.81 -41.63 127.25
Calibration: 0 3 0 3
Orientation: 204.88 -56.00 135.44
Calibration: 0 3 0 3
Orientation: 187.94 -70.69 156.00
Calibration: 0 3 0 3
Orientation: 169.75 -75.12 -135.13
Calibration: 0 3 0 3
Orientation: 154.13 -61.13 -91.31
Calibration: 0 3 0 3
Orientation: 138.19 -36.94 -76.37
Calibration: 0 3 0 3
Orientation: 130.94 -16.37 -63.44
Calibration: 0 3 0 3
Orientation: 134.56 -9.06 -48.00
Calibration: 0 3 0 3
Orientation: 137.94 -5.00 -28.75
Calibration: 0 3 0 3
Orientation: 143.75 -6.44 -7.13
Calibration: 0 3 0 3
Orientation: 151.38 -12.31 21.75

Perfect!

În afară de unele probleme de calibrare a senzorilor, datele au avut relevanță atât ca amplitudine, cât și ca răspuns în timp, atunci când am început să mișc sistemul în toate direcțiile. În acest moment mă aflu la jumătatea drumului, deoarece am un IMU pe 9 axe, care îmi trimite un flux rezonabil de date de telemetrie. Este un flux bazat pe caractere ASCII, deci este mai puțin eficient în cazul unei sarcini concrete, dar este perfect pentru un mediu demonstrativ, deoarece pot separa sistemul în două părți, pentru a vorbi și pentru a prezenta cum arată datele de bază ale unui IMU.

Am vrut totuși să pun în aplicare ceva mult mai interesant pe ecranul PC-ului decât un fundal cu numere în derulare. La acea expoziție nu erau prezenți prea mulți contabili, așa că se impunea o soluție ceva mai elegantă decât niște coloanele de numere. O aplicație demonstrativă tipică pentru senzorii de mișcare este reprezentarea unui grafic al gravitației terestre sau a trei grafice separate reprezentând fiecare un vector gravitațional pe o anumită axă. Este o aplicație bună, dar nu demonstrează cu adevărat întreaga putere a senzorului BNO055. Există o modalitate mai bună de a prezenta fuziunea de senzori ce are loc în interiorul dispozitivului.

Figura 3: “Bunny” cod este primul exemplu de sketch, care apare în lista de exemple a bibliotecii Adafruit BNO055.

Din nou, Adafruit este salvarea. Când intrați pe pagina web a plăcii electronice BNO055, există un scurt videoclip în care vedeți un iepuraș digital 3D care urmărește mișcarea unei plăci de test conectate wireless. Acest “bunny” (iepuraș) cod este, de asemenea, primul exemplu de sketch care apare în lista de exemple a bibliotecii Adafruit BNO055.

Exemplul de sketch cu iepuraș a fost asociat cu o altă aplicație (de asemenea, numită sketch) care rulează în ‚Processing’.

Eram deja familiarizat cu ‚Processing’. Este un limbaj excelent pentru proiectanții de sisteme embedded, ca mine, utilizat pentru a obține date pe un ecran de PC, mai presus de un simplu text ASCII primit pe consola unui program. ‚Processing’ a fost, de asemenea, baza pentru ‚Wiring’, iar ‚Wiring’ este limbajul de bază pentru Arduino. Totul se combină frumos. Importul exemplului ‘bunny’ sketch Arduino în Atmel Studio 7 a mers perfect, așa cum era de așteptat și, după ce am instalat alte câteva pachete de asistență pentru ‚Processing’ în sistemul meu principal de dezvoltare, am decis să verific fluxul de date prin intermediul unui terminal consolă înainte de a rula sketch-ul cu iepurașul.

Calibrare: 0 3 0 0
Orientare: 0,00 0,63 2,19
Calibrare: 0 3 0 0
Orientare: 0,00 0,63 2,19
Calibrare: 0 3 0 0

Formatul fluxului de date a confirmat că lucram cu unghiuri Euler și nu cuaternion. Acest fapt era important, deoarece eram destul de sigur că ar fi putut apărea probleme de blocare cardanică, în cazul în care dezvoltatorii de biblioteci de algoritmi de rotație nu ar fi avut grijă de acest aspect.

Figura 4: Codul 3D ‘bunny’ în Processing.

O privire rapidă la codul 3D ‘bunny’ din ‚Processing’ mi-a atras atenția că dimensiunea ferestrei de pe PC era de 640 × 480 pixeli. Nu am mai văzut de mult afișaje CRT VGA de 20” la saloanele de expoziții și nici măcar maldărul de electronice ‚vintage’ din garajul meu nu conține un CRT, așa că am ridicat rezoluția la una modestă, de 1024 × 768 și am optimizat totul, în acord cu noua rezoluție.

Iepurașul s-a ‚rotit’ așa cum era de așteptat când eu am rotit stiva de plăci electronice în spațiu. Aveam acum un demo interactiv, care îndeplinea toate cerințele de bază pentru o prezentare demonstrativă rapidă:

  • A fost ușor reproductibilă, rapid de instalat și cu un cost redus
  • Poate fi demontată în componentele sistemului
  • Exceptând modul de alimentare utilizat de Mega328P Xplained Mini, nu au fost necesare ,,blue wires(n.trad. prin expresia fire albastre” se face referire la cabluri care sunt adăugate din fabrică unui produs pentru a rezolva probleme de proiectare) sau complicații hardware.

Demonstrația a arătat într-adevăr efectul de blocare cardanică, atunci când, în rotația iepurașului, apărea un salt, ori de câte ori orientarea plăcii electronice se apropia de limitele de 90° sau 180° pe o axă. Este mult mai ușor să prezinți direct acest concept decât să explici matematica din spatele problemei.

Figura 5: Am apăsat butonul ‚play’, iar iepurașul demonstra rotirea stivei de plăci în spațiu.

Demonstrația în sine este destul de simplă. Ceea ce m-a luat cu adevărat prin surprindere a fost efortul redus și perioada scurtă de timp necesare pentru a ajunge de la câteva componente electronice la un demo de rotire 3D complet, prezentat pe laptop-ul meu. În final, a durat în jur de o oră punerea în funcțiune a tuturor componentelor. Din punct de vedere hardware demonstrația utilizează două standarde diferite de prototipare: Arduino și mikroBUS. Partea software folosește trei platforme de dezvoltare: Arduino IDE, Atmel Studio 7 și Processing. Fiind un sistem inteligent, totul s-a conectat într-o singură secvență și a funcționat corect. În trecut, timp de câțiva ani, am fost inginer pentru aplicații de sistem la o companie de giro­scoape MEMS, iar o demonstrație ca aceasta dura de obicei aproape o săptămână.

Desigur, următorul pas a fost adăugarea la acest demo a unei conexiuni wireless, bazată pe o combinație – soclu mikroBUS / modul click cu conectivitate RF de la MikroElektronika. A trebuit să fie analizată și problema blocajului cardanic, dar, la sfârșitul zilei, aveam pregătită o demonstrație, care încăpea, împreună cu laptopul, în rucsacul meu.

Este clar că epoca prototipării rapide este în plină expansiune. Companii precum MikroElektronika, Adafruit și bineînțeles Microchip, depun eforturi mari pentru a le permite proiectanților să îmbine diferite concepte de bază într-o perioadă foarte scurtă de timp. Compatibilitatea extinsă a standardelor de prototipare hardware înseamnă mai puțin timp lângă stația de lipit și mai mult timp de optimizare a proiectului. Multe exemple de soluții sunt deja disponibile pe plăcile din piață, deci nu vă fie teamă să vă îndrăzniți și să achiziționați una.

Bibliografie

Hardware

  • 10DOF click board: https://shop.mikroe.com/10dof-click
  • Arduino UNO Click Shield: https://shop.mikroe.com/arduino-uno-click-shield
  • Mini ATMEGA328P Xplained: https://www.microchipdirect.com/ProductSearch.aspx?Keywords=ATMEGA328P-XMINI
  • Senzor de orientare absolută IMU BNO055 9-DOF de la Adafruit: https://www.adafruit.com/product/2472

Software

  • Biblioteca BNO055 din mediul Arduino, codul de test și codul cu iepurașul 3D: https://github.com/adafruit/Adafruit_BNO055
  • Processing: https://www.processing.org

 

Autor:
Bob Martin

 

DESPRE AUTOR:

Un creator (Maker) pasionat încă dinainte ca acest termen să devină răspândit, Bob Martin a demontat toată viața sa dispozitive și echipamente din jurul său pentru a vedea modul lor de funcționare. După obținerea unui B.S.E.E. la Universitatea din Saskatchewan, cariera sa timpurie s-a dezvoltat pe mai multe domenii, de la instalarea instrumentelor specializate în stațiile meteo de la Polul Nord, la proiectarea sistemelor de control industrial și sprijinirea campaniilor de cercetare a straturilor atmosferice superioare pentru Environment Canada.

S-a mutat în Bay Area acum 20 de ani și de atunci a continuat să se concentreze pe proiectarea sistemelor embedded. După un deceniu petrecut la National Semiconductor, unde a descoperit și lumea minunată a electronicii analogice în care a și rămas, a mai trecut prin câteva start-up-uri înainte de a se stabili în laboratorul principal Arduino de la Atmel, unde a condus o echipă care dezvolta aplicații pentru microcontrolere. Aici a devenit profund implicat în mișcarea Arduino / Maker susținând platformele bazate pe 8, și 32-biți.

Cu 30 de ani de experiență în sistemele embedded, el lucrează acum ca „Wizard of Make” pentru Microchip, unde menține în viață spiritul de creator, prin educarea noilor aspiranți și continuând să creeze, să experimenteze și să exploreze pe cât de mult poate. Locuiește în Sunnyvale CA, împreună cu soția și fiicele sale gemene și are un garaj plin cu extrem de multe cabluri și cutii cu „electronice vintage”, care chiar ar trebui reciclate.

Microchip Technology   |   https://www.microchip.com

Sigla-Microchip

 

 

Contact:
Brian Thorsen (Brian.Thorsen@microchip.com)

Social Media:
Twitter: @MicrochipTech
Facebook: @microchiptechnology

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

Adaugă un comentariu