SEPTEMBRIE, 2014 NR. 4 VOL. 2 PREţ: 10 LEI
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Sumar
DESIGN HOBBY
4 Module GSM, GPS de la Fibocom - calitate la un preţ rezonabil De ce să investeşti în kilometri de cabluri, când poţi folosi câteva module ieftine GSM, transmiţând astfel fără obstacole cantităţi enorme de informaţii? Una dintre firmele care produce asemenea module este Fibocom.
6 Home Automation System Când vine vorba despre sisteme home automation, domeniul este atât de vast încât pot intra în discuție mulți factori în strânsă legătură cu mediul, locația, dimensiunile casei/apartamentului. Acest proiect a fost dezvoltat în cadrul Școlii de Vară organizată de Eap-Ingear în parteneriat cu compania Microchip.
11 Kit Robot Motor – urmăritor de linie (MRK + Line) Alegând module adecvate funcțiilor din familia de module periferice (Pmods™), în permanentă extindere, oferită de Digilent Inc. aveți posibilitatea să proiectați aproape orice aplicație!
Revista Electronica Azi Hobby poate fi cumpărată de la partenerii noştri: Direct de la magazinele: CONEX ELECTRONIC - Bucureşti Str. Maica Domnului nr. 48, Sector 2 Tel.: 021-242.22.06 office@conexelectronic.ro vinzari@conexelectronic.ro www.conexelectronic.ro
12 Proiectarea, construirea și programarea unui dispozitiv cu comandă numerică Numerical Control (NC) sau controlul numeric implică automatizarea uneltelor folosite în cadrul unui proces tehnologic și controlul precis al acestora. Majoritatea dispozitivelor de acest gen sunt comandate de calculatoare (CNC).
16 Raspberry PI Model B+ este disponibil la Compec Vestea bună este că cei de la Fundaţia Raspberry Pi au urmărit comunitatea de utilizatori Raspberry Pi în continuă dezvoltare şi au realizat o versiune îmbunătăţită a Raspberry Pi numită Model B+.
18 GameBoy cu BeagleBone Black
Sau online de la: O’BOYLE - Timişoara Tel. +40 256-201346 office@oboyle.ro www.oboyle.ro
23 Robot vs Maze Una dintre probele concursului Robochallenge București 2014 a presupus realizarea unui robot capabil să rezolve și să parcurgă un labirint construit în acord cu anumite restricții impuse de organizatori.
Câştigaţi cu Electronica Azi Hobby
26 Priză inteligentă Utilitatea principală a acestui dispozitiv este de a monitoriza buna funcţionare a unui aparat conectat la aceasta.
29 Detector de dispozitive de înaltă frecvenţă (microfoane, camere spion) 30 MPLAB Starter Kit for PIC24H Microcontrollers O soluţie completă pentru iniţierea în programarea microcontrolerelor pe 16 biţi de la Microchip.
33 Aplicație interactivă cu placa de dezvoltare de la Silicon Labs Precision32 SiM3U1xx-B-DK Pentru a putea face cea mai bună alegere când veți avea de achiziționat un astfel de microcontroler, astăzi vom analiza un produs al unei companii mai puțin populare în România decât rivalii săi Atmel și Microchip, și anume Silicon Labs.
Trimiteţi la redacţie proiectul unei aplicaţii practice şi aveţi şansa de a câştiga un sistem de evaluare şi dezvoltare “ENERGY-HARVEST-RD” de la Silicon Labs.
Colaboratori la această ediţie: Revista Electronica Azi - HOBBY apare de 6 ori pe an.
Management Director General - Ionela Ganea Director Editorial - Gabriel Neagu Director Economic - Ioana Paraschiv Publicitate - Irina Ganea
Revista este publicată numai în format tipărit.
Redacţie:
2014© Toate drepturile rezervate.
office@electronica-azi.ro www.electronica-azi.ro
Preţul revistei este de 10 Lei. Preţul unui abonament pe 1 an (6 apariţii Hobby + 10 apariţii Electronica Azi) este de 100 Lei.
Ing. Emil Floroiu - emilfloroiu@gmail.com Ing. Daniel Rosner - daniel.rosner@cs.pub.ro Asis. Drd. Ing. Răzvan Tătăroiu - razvan.tataroiu@cs.pub.ro Asis. Dr. Ing. Alexandru Radovici - msg4alex@gmail.com Șl. Dr. Ing. Dan Tudose - dan.tudose@cs.pub.ro Daniel Ghiţă - daneelg@yahoo.com Corbu Mihaela - mihaelacorbu19@gmail.com Gugilă Marin Ovidiu - ovidiugugila@yahoo.com Popa Marian Cătălin - popacatalin24@gmail.com
EURO STANDARD PRESS 2000 srl Tel.: +40 (0) 31 8059955 Mobil: 0722 707-254 office@esp2000.ro www.esp2000.ro
O parte din articolele prezentate în această ediţie au fost realizate de către tinerii pasionaţi din cadrul laboratoarelor:
Andrei Duluţă - andrei.duluta@gmail.com Alexandru Aungurencei - alex.aungurencei@gmail.com Mihai Crăciunescu - mihaiacr@gmail.com Cristian Dobre - dobrecristian@nighttime.ro
CUI: RO3998003 J03/1371/1993 Tiparul executat la Tipografia Everest
2
Vlăsceanu Giorgiana Violeta - vlasceanu.giorgiana@gmail.com
ROBOLAB - wonderbots.cs.pub.ro
Iulian Calciu - iuliancalciu@gmail.com Luca Vasile Răzvan - luca.vasile.razvan@gmail.com
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Module GSM, GPS de la Fibocom - calitate la un preţ rezonabil Tehnica fără fir este una dintre tehnologiile cu cea mai rapidă dezvoltare în acest moment. Transmiterea semnalului la distanţă fără ajutorul unui cablu este deja atât de răspândită încât este utilizată în aproape fiecare domeniu al vieţii noastre. Este greu să ne imaginăm astăzi activitatea noastră fără telefon mobil sau fără navigaţia auto. Tehnologia GSM, rezervată cândva doar telefoniei, este întâlnită astăzi în numeroase aplicaţii. Parcometre, contoare de energie electrică, automatizări pentru construcţii, sisteme de informaţii rutiere. Această situaţie îşi are, bineînţeles, o justificare economică. De ce să investeşti în kilometri de cabluri, când poţi folosi câteva module ieftine GSM, transmiţând astfel fără obstacole cantităţi enorme de informaţii? Una dintre firmele care produce asemenea module este Fibocom.
Cel mai popular modul din oferta Fibocom este G510-Q50. Acesta este un modul GSM/GPRS care funcţionează în domeniul de frecvenţă 850/900/1800/1900MHz. Inima dispozitivului este procesorul de 32 de biţi RDA8851BL tactat la o frecvenţă de 312MHz, cu o memorie cache de 8kB (4kB pentru instrucţiuni, 4kB pentru date). Datorită acestei configuraţii, modulul asigură o mare putere de calcul. G510-Q50 oferă o mulţime de periferice. Interfaţa audio, RTC şi memoria integrată Flash reprezintă mai degrabă un standard pentru această clasă de echipamente, însă numărul disponibil de interfeţe UART depăşeşte concurenţa. G510 deţine 3 asemenea interfeţe (basic UART, full UART, host UART) în timp ce module populare ale concurenţei doar 2 (full UART, host UART). G510 este, de asemenea, unul dintre cele mai mici module de pe piaţă. Carcasa LCC42, în care este închis modulul, are dimensiunile 20,2mm × 22,2mm × 2,5 mm. Pentru a facilita implementarea modulului în aplicaţie, firma Fibocom pune la dispoziţie şi o versiune lipită de o placă PCB cu conectori (ADAPTOR-G510). G510 poate fi alimentat la o tensiune din intervalul 3,3-4,5V. Modulul este astfel foarte potrivit pentru aplicaţiile în care o caracteristică importantă este consumul redus de curent. 4
MODULE GSM
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
În starea de sleep, consumul de curent nu depăşeşte 1mA. Modulul respectă, de asemenea, condiţii restrictive ale mediului de lucru. Temperatura la care modulul poate funcţiona este situată în intervalul: -40°C … +85°C. Pentru aplicaţiile mai pretenţioase, în care este necesar transferul unor mari cantităţi de pachete de date într-un timp scurt, firma Fibocom oferă module 3G. Din acest punct de vedere, aceste echipamente sunt foarte eficiente, fiind bazate pe chipset-uri Intel. Este vorba de modulele H350 şi H330.
A/C şi un codec audio integrat, astfel încât devine soluţia ideală pentru utilizări multimedia. O altă caracteristică a H330 este conectorul suplimentar de antenă. Acest sistem permite comutarea între antene, activând-o pe cea care primeşte, în acel moment, un semnal cu putere mai mare. H330 este disponibil în carcase LLG120 şi miniPCI Express. Aceasta din urmă facilitează montarea rapidă în modemuri şi echipamente mobile. Portofoliul firmei nu se limitează însă la modulele GSM. Fibocom produce şi module de poziţionare satelitară GPS.
H350 este unul dintre cele mai mici module 3G de pe piaţă. Carcasa LGA110 cu dimensiunile 29,8mm × 17,8mm × 2 mm permite economisirea unui spaţiu mare pe placă. Modulele sunt disponibile în versiunea cu 4 domenii: 850/900/1900/ 2100MHz (UMTS/HSPA+),850/900/1800/ 1900MHz (GSM/GPRS). La bordul modulului H350 găsim o paletă bogată de interfeţe, precum: UART (full UART, host UART), I2C, SPI, I2S, USB 2.0, datorită cărora modulul devine unul universal. În plus, producătorul a inclus un convertor monocanal de 10 biţi A/C pentru utilizări în aplicaţii telemetrice şi drept ceas pentru timp real. Ca la G510, găsim şi aici o memorie Flash de 1GB şi 256B DDRAM. Produsul vedetă al firmei Fibocom este modulul H330. Ca în cazul lui H350, avem la dispoziţie 4 domenii de frecvenţă: 850/900/1900/2100MHz pentru UMTS/ HSPA+ şi 850/900/1800/1900MHz pentru GSM/GPRS. Similaritatea celor două module este valabilă şi pentru interfeţele integrate. H330 are acelaşi număr de interfeţe ca H350. Diferenţele dintre module pot fi identificate dacă aprofundăm perifericele. H330 are 1 canal mai mult la convertorul
GTS-4E-60, căci despre ele este vorba, au la bază chipset-ul Sirf IV. Comunicaţia cu microcontrolerul are loc prin interfaţa UART cu ajutorul protocolului NMEA 0183 sau SIRF OSP, iar datele din GPS sunt împrospătate la fiecare 1 secundă. Ca şi în cazul celorlalte module Fibocom, este disponibilă şi o versiune lipită de o placă PCB cu terminale cu conectori (ADAPTOR-GTS-4E), astfel încât implementarea modulului în aplicaţii este cu mult mai uşoară. Fără îndoială, cel mai mare avantaj al modulului GTS-4E-60 este raportul calitate-preţ, modulul fiind unul dintre cele mai ieftine de pe piaţă. Modulele firmei Fibocom, deşi cunoscute în întreaga lume, sunt o noutate în Polonia. Însă fără îndoială că, datorită accesibilităţii documentaţiei şi suportului tehnic, pot deveni foarte populare şi pe piaţa poloneză, mai ales că produsele Fibocom sunt caracterizate de un foarte bun raport calitate-preţ. Fibocom este reprezentată în Polonia şi în Europa de firma Transfer Multisort Elektronik din Łódź – www.tme.eu n
5
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Home Automation System Când vine vorba despre sisteme home automation, domeniul este atât de vast încât pot intra în discuție mulți factori în strânsă legătură cu mediul, locația, dimensiunile casei/apartamentului. Intervine întrebarea: cât de simplu poate fi de realizat un astfel de sistem? Acest proiect a fost dezvoltat în cadrul Școlii de Vară organizată de Eap-Ingear în parteneriat cu compania Microchip. Autori: Corbu Mihaela - mihaelacorbu19@gmail.com Gugilă Marin Ovidiu - ovidiugugila@yahoo.com Popa Marian Cătălin - popacatalin24@gmail.com Vlăsceanu Giorgiana Violeta - vlasceanu.giorgiana@gmail.com Despre proiect Figura 1
În cadrul acestui proiect am realizat un minisistem home automation care este capabil să afișeze și înregistreze temperatura din două locații diferite și să acționeze două elemente ce pot fi comandate la 220V (aer condiționat, centrală termică, lumină etc.). Sistemul este interfațat la distanță prin intermediul site-ului “H&A”, ce poate fi accesat cu orice dispozitiv mobil (laptop, tabletă, smartphone). Care este flow-ul de date al sistemului? Temperatura este preluată de senzorul de temperatură MCP9801 în format hexazecimal și transmisă prin protocolul I2C la microcontrolerul PIC18LF4580, care la rândul lui transmite modulului de Wi-Fi Roving Networks RN171 prin interfața UART.
RN171 face request la site-ul stocat pe serverul local bazat pe Raspberry Pi B+ și inserează în baza de date SQL informațiile transmise în format ASCII și stocate în format zecimal. Pe același canal, RN171 primește starea releelor, transmițându-le microcontrolerului. Datele sunt preluate din baza de date la fiecare 3 secunde și afișate pe site-ul aplicației, “H&A” ce poate fi accesat de computer, laptop, tabletă, smartphone.
trasee care conduc curentul. Primul dintre ele trece printr-un regulator, MCP1703, care face trecerea de la 5V la 3.3V, necesari pentru alimentarea microcontrolerului PIC 18LF4580, mufei RJ11, modulului Wi-fi Roving Networks RN171 și sateliților cu senzorii de temperatură, MCP9801. Regulatorul MCP1703 are pe pinii de intrare și pe pinii de ieșire câte un condensator de
Detalii fizice Partea fizică a proiectului este formată dintrun circuit de bază ce conține “creierul” sistemului, două plăcuțe satelit ce conțin senzori de temperatură și un Raspberry Pi ce este folosit pentru interacțiunea cu dispozitive mobile (computer, laptop, tabletă, smartphone). (vezi Figura 2 - schema electronică şi Figura 3 - layout PCB) Alimentarea sistemului se realizează în cadrul plăcuței de bază la 5V prin conectorul miniUSB_4P. De la alimentare pornesc două Figura 3
6
HOME AUTOMATION
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Figura 2
Figura 4
0.1μF, utilizați pentru filtrarea semnalului. Al doilea traseu conduce curentul către cele două relee, RTB74005. [vezi Figura 4 - PCB şi Figura 5 - placa cu piese ]
Microcontrolerul PIC18LF4580 (SMD) se află de asemenea pe placa centrală, cum am amintit și în paragraful anterior. Acesta se alimentează de la regulatorul MCP1703 la 3.3V. [Figura 6] Pinul de reset al microcon-
RX și TX sunt folosiți pentru comunicarea prin interfața UART cu modulul Wi-Fi RN171 [Figura 7], iar pinii SDA și SCL sunt
Figura 7
Figura 6
Figura 8
trolerului conține o rezistență de pull-up de 4.7K care menține nivelul logic “1”. Pinii
utilizați pentru comunicarea prin protocolul I2C cu senzorii de temperatură. Tot pe PCB-ul de bază se găsesc conectori pentru îmbinarea cu PCB-urile satelit. Ü
Figura 5
Figura 9
7
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü
Plăcuța satelit conține senzorul de temperatură MCP9801 (SMD) și patru jumperi dintre care trei sunt folosiți pentru setarea adresei senzorului și unul pentru alimentarea plăcuței. Adresa pentru senzorul MCP9801 este “1001, A2, A1, A0” în cod binar, unde biții A2, A1 și A0 sunt setați extern prin conectarea corespunzătoare a pinilor fie la VDD “1” fie la GND “0”. Bitul 8 este utilizat pentru configurarea drepturilor de scriere, “0”, sau citire, “1”, ale senzorului.
I2C - Fișierul I2C.c cuprinde funcții pentru configurarea transmiterii de date prin protocolul I2C și pentru citirea acestor date #include "I2C_functii.h" #include <plib/i2c.h> #include "setari.h" void I2CConfig() {
TRISCbits.RC3=1; TRISCbits.RC4=1;
// Pin 18 input SCL // Pin 23 input SDA
SSPCON1bits.SSPM = 0x8; // MSSP Mode Select Bits == Master SSPADD=0x9; // Baudrate 9600 // Clock enable SSPCON1bits.CKP=1; SSPCON1bits.SSPEN=1; // MSSP Enable Bit
Setări - Fișierul Setări.c cuprinde funcții pentru unele setări generale: setarea frecvenței la care lucrează microcontrolerul, funcție pentru tastarea ENTER (necesară pentru interpretarea comenzilor trimise către RN171) și funcția de delay. #include <xc.h> #include "setari.h" #include "uart_functii.h" #define _XTAL_FREQ 8000000 // Frecventa uC - pt functia de delay int j; void Oscilator() {
// Set Oscilator 8 MHz - IRCF = 111 OSCCONbits.IRCF0=1; OSCCONbits.IRCF1=1; OSCCONbits.IRCF2=1;
}
char I2CRead(int address) {
char temp_citita;
{
SSPCON2bits.SEN=1; WaitingForData();
// Start condition enable // Clear MSSP Intrerupt Flag
SSPBUF=address; WaitingForData();
// Adresa senzorului de temperatura // Clear MSSP Intrerupt Flag
SSPCON2bits.RCEN=1; // Enable master for 1 byte reception WaitingForData(); // Clear MSSP Intrerupt Flag temp_citita=SSPBUF; SSPCON2bits.PEN=1; WaitingForData();
// STOP condition // Clear MSSP Intrerupt Flag
return temp_citita; }
Figura 10 În momentul în care tensiunea de alimentare de 5V este aplicată la bornele bobinei releului, curentul circulă și va produce un câmp magnetic care mișcă armătura pentru a închide sau deschide un set de contacte.
UART - Fișierul UART.c cuprinde funcții pentru configurarea transmiterii de date prin interfața UART, pentru citirea acestor date și pentru scrierea lor pe interfața UART. void UARTInit() {
TRISCbits.RC6=0; TRISCbits.RC7=1;
// Set TX pin as output // Set RX pin as input
TXSTAbits.TX9=0; TXSTAbits.SYNC=0; SPBRG=12; TXSTAbits.BRGH=0; RCSTAbits.SPEN=1; RCSTAbits.CREN=1; TXSTAbits.TXEN=1; PIE1bits.RCIE=1;
// 8-bit transmission // Select asynchronous mode // Set Baudrate at 9600 // Low speed // Enables Serial Port // Enables Continuous Reception // Enables Transmission // Enables the EUSART receive interrupt
} char UARTRead() {
Figura 11
while(!PIR1bits.RCIF); return RCREG;
// Waits for Reception to complete // RCREG contains UART read data
}
Când alimentarea este dezactivată din releu, cade fluxul magnetic din bobină și se produce o tensiune înaltă în direcția opusă. Această tensiune poate strica tranzistorul de comandă, BC546B, și de aceea este conectată o diodă cu polarizare inversă dea lungul bobinei pentru a scurt-circuita vârfurile de tensiune care apar. Dioda utilizată de noi este 1N4148. Detalii asupra software-ului embedded Codul pentru programarea microcontrolerului PIC18LF4580 a fost dezvoltat în IDE-ul MPLAB X cu compilatorul XC8. Limbajul de programare utilizat este C embedded. În cadrul proiectului am folosit mai multe fișiere, interconectate prin intermediul header-elor. Fiecare fișier cuprinde funcții pentru un anumit task, fișierele fiind: I2C, UART, RN171, Setări și Proiect_microchip. 8
} Enter () void Enter
UARTWrite (char a) // Write a character on UART void UARTWrite {
while(!TXSTAbits.TRMT);// Waiting for Previous Data to Transmit completly TXREG=a; // TXREG contains UART data }
void UARTWriteString(const char date[]) // Write a string on UART {
int i=0; for(i=0;i<strlen(date);i++) / UARTWrite UARTWrite (date[i]); // Write string character by character on UART }
RN171 - Fișierul RN171.c cuprinde funcțiile ce dau comenzi modulului pentru conectarea acestuia la Wi-Fi și pentru afișarea pe Website a valorilor primite prin interfața UART. void RN171ConnectToWifi() {
// Commands for RN171 const char d0[]="$$$"; // Enter command mode const char d1[]="set wlan phrase microchip_cae"; // Set wifi password const char d2[]="set wlan ssid not-peap"; // Set wi-fi name const char d3[]="join not-peap"; // Join wi-fi const char d4[]="set wlan join 1"; // Autoconnect to wi-fi const char d5[]="save"; // Save settings and store in config file const char d6[]="reboot";
// Reboot
// Make an Enter function for RN171 UARTWrite(0x0D); // Cariage return UARTWrite(0x0D); // Cariage return UARTWrite(0x0A); // Line feed/new line Delay_10ms(100); // Wait 1 sec } void Delay_10ms(int n) { for( j=1;j<n;j++) __delay_ms(10); }
// Delay 10*n ms
// Delay 10 ms
Proiect_microchip - Fișierul conține partea principală a programului. Am folosit câteva define-uri pentru ușurarea scrierii codului, am declarat variabile globale, iar în #define RELEU1 LATBbits.LATB3 #define RELEU2 LATBbits.LATB4 #define RECEIVE_BUFFER_SIZE #define RCIE_SET #define RCIF_SET #define GIE_PEIE_SET
// Set bit as Digital I/O // Set bit as Digital I/O 0x20 // Size in bytes of receive buffer 0x20 // Bit mask if PIE1<RCIE> is set to 1 0x20 // Bit mask if PIR1<RCIF> is set to 1 0xC0 // Bit mask for INTCON<GIE> and INTCON<PEIE> set
main( ) am folosit funcții din celelalte fișiere astfel încât să se realizeze ceea ce dorim noi, în ordinea pe care o dorim. int main() { for(i=0;i<0x20;i++) receiveBuffer[i] = 0; // Clear receiveBuffer array TRISBbits.TRISB3 = 0; // B3 bit set as output RELEU1=1; // Relay1 OFF - 0 / ON - 1 TRISBbits.TRISB4 = 0; // B4 bit set as output RELEU2=1; // Relay2 OFF - 0 / ON - 1 Oscilator(); // 111 = 8 MHz I2CConfig(); // Init I2C UARTInit(); // Init UART EnableInterrupts(); // Enables the Interrupt while(1) { PostUARTData(); // Post temperature values on the Website and automatically get the Relays Value SearchInReceiveBuffer(); // Search for comma in receiveBuffer RelaysCommand(); // Command the relays - 0(0x30 ASCII) for OFF and 1(0x31 ASCII) for ON Delay_10ms(100); // Delay 1 sec } }
Pentru citirea datelor primite de la RN171 prin interfața UART am folosit întreruperi, pentru ca operația să se desfășoare eficient. void interrupt ISR(void) { if((PIE1&RCIE_SET)&&(PIR1&RCIF_SET)) { UART_Read (); receiveBuffer[z++] = UARTRead // Store receive data } if(z==RECEIVE_BUFFER_SIZE) { z = 0; // Reset to start of array } }void {
EnableInterrupts()
PIE1 = RCIE_SET; INTCON = GIE_PEIE_SET; }
// Enable receive interrupt, set RCIE // Set PEIE, GIE bits
HOME AUTOMATION
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Detalii asupra interfeței cu utilizatorul Interfața cu utilizatorul este reprezentată de site-ul “H&A” ce este stocat pe serverul local de pe Raspberry Pi B+.
zitive la 220V. Datele afișate sunt preluate prin request-uri din serverul de MySQL; această legătură între front-end și back-end este realizată într-un script PHP ce realizează
uneori, în acest fel, configurarea lui și transmiterea de date fiind irealizabilă. În acest moment nu cunoaștem cauza acestei probleme. Soluția găsită a fost
La acest nivel, front-end, sunt prezente elemente de HTML, CSS, JavaScript și JQuery. Informațiile prezente pe site sunt suficient de cuprinzătoare, țintesc date generale ale proiectului cât și informații referitoare la echipa de proiect și bineînțeles datele ce sunt achiziționate, stocate. Utilizatorul are posibilitatea de a vizualiza ultimele temperaturi înregistrate de către cei doi senzori, precum și de a introduce temperatura dorită în sistem.
conectarea la baza de date. Inserarea și selectarea datelor se realizează pe server. Serverul HTML și SQL sunt administrate pe distribuția de Linux Raspberian. Pentru fiecare acțiune de selecție din baza de date sau inserare, pe partea de server există funcții în PHP care apelează comenzile în SQL pentru interogările necesare.
configurarea manuală a modulului cu ajutorul unui serial port terminal, respectiv Hercules.
De asemenea, se pot controla cele două relee prin switch-urile ce pot acționa dispo<?php // Connect to db $link = mysql_connect ('localhost', 'root', 'microchipcae'); if (!$link) { die ('Not connected : ' . mysql_error()); }
// Make ha the current db $db_selected = mysql_select_db ('ha', $link); if (!$db_selected) { die ('Can\'t use foo : ' . mysql_error()); }
// Fetch the data from db function mysql_fetch_my_data ($query,$id=""){ mydata = array(); $mydata $q = mysql_query ($query); if ($id!="") { while ($row = mysql_fetch_array($q,1)) $mydata mydata [$row[$id]] = $row; } else { while ($row = mysql_fetch_array($q,1)) mydata []=$row; $ mydata } mydata return $ mydata; } ?>
O altă problemă ce a fost soluționată a fost conversia de date pe parcursul achiziției și stocării datelor. Datele sunt citite de către senzori în format hexazecimal, preluate de RN171 în ASCII, sto<?php require_once ('mysql.inc.php'); // printa function cate și afișate în zecirequire_once ('debug.inc.php'); // Connect to database ha and mysql_fetch_my_data function mal. Această problemă // Insert in DB the temperature in mydata table with POST method a intervenit deoarece if(isset($_POST['temp1'])){ nu exista siguranța că $query="INSERT INTO mydata (temp1,temp2,datetime) VALUES ( pe parcurs datele nu '".mysql_escape_string(htmlspecialchars($_POST['temp1']))."', sunt convertite auto'".mysql_escape_string(htmlspecialchars($_POST['temp2']))."', mat sau interpretate '".date("Y-m-d H:i:s")."' )"; corect. $q=mysql_query($query); } else{ // Insert in DB the temperature in mydata table with GET method if(isset($_GET['temp1'])){ $query="INSERT INTO mydata (temp1,temp2,datetime) VALUES ( '".mysql_escape_string(htmlspecialchars($_GET['temp1']))."', '".mysql_escape_string(htmlspecialchars($_GET['temp2']))."', '".date("Y-m-d H:i:s")."' )"; $q=mysql_query($query); } else echo "not my link"; } ?>
Ca perspective, ne propunem să optimizăm codul embedded. De asemenea, ca variantă următoare, vom implementa un sistem home automation cu un număr mai mare de senzori, mărind complexitatea – adăugarea de senzori de lumină, senzori de umiditate, <?php require_once ('debug.inc.php'); // printa function senzori de mișcare, require_once ('mysql.inc.php'); // Connect to database ha and mysql_fetch_my_data function senzori de presiune și $query="SELECT * FROM mydata WHERE 1 ORDER BY datetime DESC LIMIT 1"; // Select the last entry in mydata table - the last temperature bineînțeles vom oferi $data=mysql_fetch_my_data($query,""); // Fetch the row from mydata utilizatorului posibili?> tatea de a comanda <h2> Ultima temperatura înregistrată</h2> <!--Show on site the latest values of temperature--> mai multe elemente. <tr><td>Temperatura 1:</td><td><?php echo $data[0]['temp1'];?></td></tr> Pentru eficientizarea <tr><td>Temperatura 2:</td><td><?php echo $data[0]['temp2'];?></td></tr> procesului, am luat în Probleme cunoscute calcul și trecerea la un microcontroler pe şi planuri de îmbunătățiri 16/32 biți cu performanțe mai bune, cu un În primul rând, conexiunea modulului de număr mai mare de pini Wi-Fi RN171 la rețea nu poate fi realizată n 9
Cum transformi o imprimantă 3D K8200 de la Velleman într-un echipament CNC? răspunsul îl găseşti la Conex Electronic Conex Electronic s.r.l. Tel.: 021 242.22.06 I Fax: 021 242.09.79 I office@conexelectronic.ro I www.conexelectronic.ro
10
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Felix Electronic Services Digilent Inc. în Romania Servicii complete de asamblare pentru produse electronice Felix Electronic Services execută echipare de module electronice cu componente electronice SMD, componente cu pini în găuri din PCB și respectiv cu terminale, folosind procedee și dispozitive moderne pentru poziționare, lipire și testare. Piesele cu gabarit deosebit (conectoare, comutatoare, fire de conectare etc.) sunt montate și lipite manual. Se execută inspecții interfazice pentru asigurarea calității produselor. Se utilizează numai materiale care nu afectează mediul și nici pe utilizatori. Se pot realiza asamblări complexe și testări finale în standurile de test de care dispune Felix Electronic Services sau folosind standuri de test dedicate unor produse, dar asigurate de client. Produsele se livrează în ambalaje standard asigurate de firma noastră sau ambalaje speciale ale clientului. Personalul are pregătirea, expertiza și experiența lucrativă cerute de execuții de înaltă calitate. Felix Electronic Services este cuplat la un lanț de aprovizionare și execuții pentru a asigura și alte servicii care sunt solicitate de clienți: aprovizionarea cu componente electronice și electro-mecanice, proiectare PCB și execuții la terți, prelucrări mecanice asupra modulelor și a cutiilor în care se poziționează modulele, și orice alte activități pe care le poate intermedia pentru clienți. Adresa noastră: Felix Electronic Services Bd. Prof. D. Pompei nr. 8, Hala Producție Parter, București, sector 2
Tel: +40 21 204 6126; Fax: +40 21 204 8130 stelian.sersea@felix-ems.ro www.felix-ems.ro
ECAS ELECTRO este distribuitor autorizat al produselor Digilent Inc. Digilent Inc. este lider în produsele de proiectare educațională în ingineria electrică pentru studenți, profesori, hobbyști și OEM din toată lumea.
Kit Robot Motor – urmăritor de linie (MRK + Line) Digilent Inc. oferă un Kit Robot Motor (MRK + Line) ce reprezintă un punct de plecare perfect pentru cei care abordează robotica prima dată, dar care are puterea de a fi utilizat și pentru proiecte și aplicații avansate. MRK unește o placă de dezvoltare puternică chipKIT™ProMX4 cu o platformă de oțel robustă și toate elementele de mișcare - motoare, roți, senzori, și alte părți necesare pentru a construi un robot complet. Când ați terminat asamblarea, MRK + Line poate fi programat să urmeze o linie de culoare închisă pe o suprafață ușor colorată. Folosind puternicul modul chipKIT™ProMX4, veți putea să adăugați tot felul de funcționalități pentru acest robot. Alegând module adecvate funcțiilor din familia de module periferice (Pmods™), în permanentă extindere, oferită de Digilent Inc. aveți posibilitatea să proiectați aproape orice aplicație!
Placa ChipKIT™Pro MX4 poate fi programată fie cu MPLAB®IDE de la Microchip sau chipKIT™MPIDE. Programul Microchip MPLAB®IDE poate fi descărcat gratuit de la www.microchip.com, iar programul chipKIT™MPIDE poate fi descărcat gratuit de la http://chipkit.net/started. Caracteristici • Puterea dată de placa de dezvoltare chipKIT™Pro MX4 • Include tot ce este necesar pentru a construi un robot pe deplin funcțional în cel mai scurt timp • Condus de două mecanisme motor / cutie de viteze, cu raport 1:19 • Include 4 senzori IROS și un modul senzor de lumină PmodLS1 pentru funcția de a urmări o linie. Documentații de sprijin ce pot fi descărcate imediat și gratuit. 516-002 Line-Following Motor Robot Kit (MRK+Line) reference manual / getting started guide. DSD-0000406 Simple demo project for your MRK+Line. Digilent Inc. este o filială a National Instruments Corporation
www.digilentinc.com
www.ecas.ro
Detalii tehnice: ing. Emil Floroiu emil.floroiu@ecas.ro 11
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Proiectarea, construirea și programarea unui dispozitiv cu comandă numerică Numerical Control (NC) sau controlul numeric implică automatizarea uneltelor folosite în cadrul unui proces tehnologic și controlul precis al acestora. Majoritatea dispozitivelor de acest gen sunt comandate de calculatoare (CNC). În urma rulării unor proceduri, aplicațiile software corespunzătoare mașinilor CNC produc un fișier care conține atât date despre uneltele implicate în realizarea diferitelor sarcini (tăiere, găurire, frezare etc.), cât și diverse instrucțiuni. Aceste instrucțiuni, la rândul lor, sunt preluate și interpretate de procesorul dispozitivului și sunt convertite în comenzi transmise, ulterior, către uneltele fizice. Autori: Mihai Crăciunescu - mihaiacr@gmail.com I Cristian Dobre - dobrecristian@nighttime.ro I Andrei Duluţă - andrei.duluta@gmail.com Date fiind costurile ridicate pe care le-ar fi presupus achiziționarea unui astfel de dispozitiv s-a decis asamblarea principalelor subsisteme pe care le incorporează acest tip de mașină. Cele mai importante etape necesare în vederea obținerii acestui rezultat au fost: 1. 2. 3. 4.
Proiectarea 3D Realizarea părții electro-mecanice Realizarea părții de programare Validare
Proiectarea 3D Evoluția tehnologică din ultimii ani, împreună cu cererea, tot mai ridicată, în materie de produse care să respecte standarde din ce în ce mai înalte, au condus la apariția unor metode rapide și sigure prin care să se îmbunătățească procesul proiectării (piese, clădiri etc.). În încercarea de a minimiza neajunsurile abordării clasice (proiectarea bidimensională, pe calc sau hârtie), au luat naștere companii care dezvoltă programe specializate pentru proiectarea asistată de calculator (CAD). Cu o experiență în acest domeniu (CAD) de peste 30 de ani, corporația multinațională Autodesk reprezintă unul dintre producătorii de top, la nivel mondial, de programe care facilitează crearea de modele 3D (piese și ansamble). Compania Autodesk a dezvoltat, începând cu anul 1999, pachetul Inventor care preia majoritatea funcțiilor 12
specifice proiectării 2D din AutoCAD și le completează cu elemente proprii modelării tridimensionale. Proiectarea parametrică folosind constrângeri și ecuații se bazează, în esență, pe principiile proiectării parametrice folosind cote, cu deosebirea că impune, încă de la început, stabilirea unui set de dimensiuni care vor fi reprezentative pentru întregul proiect. Mai exact, toate dimensiunile obiectului final vor depinde doar de acei parametri definiți de către utilizator. Dependența între cote se realizează prin intermediul ecuațiilor și prin folosirea constrângerilor în interiorul fiecărei schițe de lucru.
Realizarea părții electro-mecanice Transmiterea mișcării de-a lungul unei axe S-au luat în considerare mai multe metode de a transforma mişcarea de rotaţie a motorului în mișcare de translație a modulelor corespunzătoare fiecărei axe. Cea mai avantajoasă dintre cele studiate presupune folosirea unui şurub cu profil trapezoidal. Acesta preia mişcarea de rotaţie de la motor şi o transmite unei piuliţe sudată pe o placă de metal. Placa este solidară cu modulul care se dorește a fi deplasat (se fixează cu șuruburi) și îi imprimă acestuia mișcarea de translație. Ansamblul sudat Piuliță-Placă, după vopsire, se poate observa în imaginile următoare:
Denumire parametru în Inventor Descrierea parametrului considerat grosime_mat Grosimea materialului din care va fi realizat modelul coord_Ox coord_Oy coord_Oz
Poziția modului corespunzător fiecărei direcție de deplasare, în raport cu una dintre cele două poziții extreme între care se poate mișca
diam_bare_ghidaj
Diametrul barei de precizie
diam_bare_motoare
Diametrul tijei filetate
dist_glisare
Distanța între două piese care trebuie să se deplaseze una în raport cu cealaltă
Ox_spatiu_motor Oy_spatiu_motor Oz_spatiu_motor
Spațiul necesar pentru a poziționa fiecare motor, împreună cu elementele hardware aferente
Ox_latime_placa_glisanta
Spațiul necesar pentru a putea realiza un circuit imprimat de dimensiunea unei coli A4 Tabelul 1 – Parametri principali ai modelului din prezentul proiect
CNC
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
După cum se poate observa din imagini, plăcile au dimensiuni diferite. Dimensiunea unei plăci a fost calculată în funcţie de axa de-a lungul căreia se va deplasa, greutatea pe care trebuie să o susţină şi dimensiunea plăcii glisante. Ansamblul Piuliţă-Placă a fost fixat pentru a converti mişcarea de rotaţie a motorului în mişcare de translaţie și pentru a o transmite fiecărui modul.
Figura 1.1: Ansamblele Piuliță-Placă pentru toate cele trei axe Figura 1.2: Ansamblu Piuliţă-Placă cu şurub trapezoidal
Asamblarea elementelor de ghidaj și de tracțiune În figura 1.3 se pot observa trei rulmenți liniari montați pe colțurile uneia dintre plăcile glisante, împreună cu găurile unde urmează să fie plasat cel de-al patrulea. După montarea rulmenţilor liniari s-a testat dacă aceștia sunt paraleli între ei pentru a minimiza rezistența mecanică, în timpul funcționării. De asemenea, s-a verificat ca ansamblul Piuliță-Placă să se potrivească. În situația prezentată în figura 1.4, a fost necesară rotunjirea colţurilor plăcii pentru o îmbinare cât mai bună. Asamblarea plăcilor de pal Procurarea și asamblarea pieselor necesare pentru construcţia carcasei s-au dovedit a fi unele dintre cele mai dificile etape ale acestui proiect. Pentru fiecare placă proiectată în Autodesk Invetor a fost generat desenul de execuție în vederea debitării. Toate piesele de PAL au fost realizate la un centru specializat de prelucrare a materialelor lemnoase. După obţinerea pieselor componente s-a trecut la asamblarea acestora. Fiecare placă a fost numerotată și, pe parcursul asamblării, sa respectat întocmai modelul 3D creat. Prinderea plăcilor de PAL s-a realizat folosind şuruburi speciale pentru acest material, de diferite mărimi, în funcţie de necesitate. Pentru a fixa plăcile, înainte de introducerea șuruburilor, s-a dat o serie de găuri care să ușureze înfiletarea. Ü
Figura 1.3: Rulmenţi liniari fixaţi pe placa glisantă
Figura 1.4: Ansamblu placă glisantă
Cele mai importante avantaje pe care le oferă această abordare sunt: l Dacă se dorește modificarea unei cote dintr-o singură piesă, nu trebuie refăcute toate piesele din ansamblu care depind de acea dimensiune; l Orice modificare a cotelor nu compromite întreg modelul; l Este posibilă modificarea parametrilor mai multor piese simultan; l Modelul are un grad de flexibilitate foarte ridicat; l Dacă există piese care au o serie de cote comune, acestea nu trebuie specificate pentru fiecare piesă, în parte, de fiecare dată când este folosită; l Toate calculele referitoare la cote sunt realizate în mod automat pe baza parametrilor stabiliți de utilizator.
13
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü
Driver-ul de motor Pentru a controla motoarele corespunzătoare celor trei direcții de deplasare ale dispozitivului cu comandă numerică din acest proiect s-a impus realizarea unui circuit exterior care să permită driver-ului L298 să își îndeplinească funcțiile. S-a decis utilizarea a trei drivere de motor, fiecare având propriul circuit, fapt ce oferă o autonomie sporită celor trei motoare pas cu pas. În situația în care se dorește înlocuirea unuia dintre cele trei circuite care conțin driver-ele de motor, substituția se poate face ușor, fără a afecta întregul sistem. De asemenea, circuitul exterior a fost gândit într-un context cât mai general. S-a avut în vedere ca plăcile finale să poată fi folosite și în alte situații, precum comandarea a două motoare de curent continuu, fără a fi nevoie să se modifice întreg circuitul. Crearea layout-ului După finalizarea schemei electrice s-a trecut la crearea layout-ului (modul în care sunt aşezate componentele electronice și sunt realizate legăturile între ele) încercându-se realizarea tuturor conexiunilor pe un singur strat al plăcii de Cupru. Având în vedere că acest rezultat s-a dovedit a fi foarte dificil de obținut, s-a încercat gruparea și amplasarea componentelor astfel încât să fie necesare cât mai puține vias-uri (conexiune electrică, prin placă, între două straturi de cupru). Cea mai importantă regulă pentru crearea layout-urilor este ca piesele care fac parte din același bloc să fie poziționate cât mai aproape una de cealaltă. Prin respectarea acestui principiu se evită situații neplăcute precum realizarea unui traseu de la un capăt la celălalt al plăcuței, în condițiile în care există posibilitatea de a plasa componentele mai aproape. În figura următoare se poate observa layout-ul final al plăcuței:
Figura 1.5: Layout circuit driver de motor Suprafețele și traseele albastre alcătuiesc layout-ul care va fi imprimat pe stratul de 14
inferior al plăcuței de Cupru, iar cu roșu se reprezintă zonele de pe stratul superior. Pătratele verzi care unesc un traseu albastru cu unul roșu reprezintă un vias. Cu toate că marea majoritate a conexiunilor electrice se află pe partea inferioară a plăcii, a fost necesară introducerea de vias-uri. Obținerea unui circuit cu cât mai puține astfel de conexiuni între straturi depinde de diverși factori: experiența utilizatorului de a poziționa componentele electrice, grosimea traseelor dintre componente, mărimea plăcii etc. Dacă se decide introducerea de vias-uri, utilizatorul trebuie să aleagă grosimea acestora pentru a putea conduce curentul necesar. Există o serie de factori de care depinde dimensiunea vias-ului, în special în cazul producerii PCB-urilor la nivel industrial. Cei mai importanți dintre acești factori au fost luați în calcul în momentul realizării driverelor pentru această lucrare. Astfel, s-a evitat,
pe cât posibil, întreruperea traseelor de putere prin vias-uri. După cum se poate observa și în figura precedentă, este nevoie de o precizie ridicată pentru a alinia cele două layout-uri deoarece, dacă există o diferență chiar și de câțiva milimetri între cele două, vias-urile nu se mai suprapun, iar circuitul nu poate fi folosit. În cazul acestei lucrări s-a ales trasarea unui plan de masă pe stratul de jos pentru a scădea numărul total de trasee și suprafața care va fi corodată. Driver de motor – varianta finală O primă versiune a fost realizată folosind numai componente SMD (Surface Mounted Device) și a trebuit să fie modificată din cauza faptului că, în construirea driver-ului, au fost folosiți atât conectori cu șurub cât și pini. Aceste componente se lipesc pe partea inferioară a plăcuței în timp ce elementele
CNC – Perspectivă laterală
CNC – Perspectivă de sus
CNC SMD se poziționează, de obicei, pe partea de sus. Din cauza acestui aspect, era necesară trasarea mai multor legături între cele două straturi ale plăcuței, fapt ce ar fi crescut nivelul de complexitate al layout-urilor. Pentru a rezolva această problemă schema electrică a fost adaptată pentru a folosi componente Through Hole ale căror conexiuni se realizează pe partea de jos a plăcuței.
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
La capătul cursei plăcilor glisante de pe fiecare axă există câte un limitator. Driver-ele de motor și limitatoarele sunt alimentate de la sursă și sunt conectate la microcontroler cu ajutorul conectorilor cu
tat la calculator printr-un cablu USB care îndeplinește două funcții. Pe de-o parte, alimentează placa Arduino cu 5V și, pe de altă parte, face posibilă comunicația între aceasta și calculator.
Figura 1.7: Conexiuni electrice între componente Legendă Roșu Alimentare (12V sau 5V) Negru Ground – GND (0V) Portocaliu Magistrale de date între două dispozitive
Figura 1.6: Driver motor cu componente through hole (THT). Într-un final, driver-ul implementat pentru a comanda motoarele pas cu pas a ajuns la versiunea a treia. Până la această variantă finală, au fost încercate diverse configurații dar s-a dovedit că aceasta este cea mai convenabilă. Utilizarea ventilatoarelor În timpul testelor s-a observat că motoarele pas cu pas cât şi driverele de motor se încălzeau foarte tare, astfel că s-a decis montarea unui ventilator cu diametrul de 120 mm pentru motorul pas cu pas corespunzător axei Oz şi o serie de 3 ventilatoare cu diametrul de 80 mm pentru drivere. Pe circuitele integrate L298, au fost montate radiatoare (heatsink) pentru absorbi căldura produsă de acestea. Radiatoarele sunt răcite de cele trei ventilatoare, păstrând, astfel, temperatura driver-elor în parametrii normali de funcţionare. Arhitectura hardware finală După ce au fost alese și achiziționate toate componentele necesare realizării arhitecturii hardware a dispozitivului CNC, a fost desenată o schemă electrică de funcționare generală, structurată pe blocuri, fiecare dintre acestea fiind tratat ca un Black-Box. Pentru simplificarea schemei, nu au fost reprezentate toate firele care duc la masă. Programul care controlează dispozitivul CNC rulează pe microcontroler și comunică, în permanență, cu calculatorul utilizatorului. Mișcările pe fiecare dintre axe vor fi comandate de către un driver de motor independent.
Figura 1.8 Schema arhitecturii hardware finale șurub (driver) și al pinilor tată (Arduino). Sursa de alimetare ATX este conectată la fiecare driver de motor folosind fire de cupru și conectori cu șurub. Toate componentele electrice ( joystick-uri, drivere, motoare, Arduino, sursa și diverse butoane) trebuie să aibă același ground pentru a putea funcționa corect. Microcontroler-ul AtMega2560 este conec-
În forma finală, mașina cu comandă numerică realizată în acest proiect, necesită aproximativ 25 de pini intrare și ieșire, un număr accesibil, în cazul microcontrolerelor moderne. Trebuie precizat că utilizarea a 25 de intrări și ieșiri, în cazul unui calculator obișnuit, ar fi fost imposibilă fără crearea unui circuit de multiplexare. n Continuare în numărul viitor 15
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Raspberry PI Model B+ este disponibil la A/V cu 4 poli de 3,5mm, aflat lângă conectorul HDMI (care la rândul său a fost mutat uşor pe PCB). Conectorul de alimentare al noului Raspberry Pi model B+ a fost relocat chiar lângă conectorul HDMI. Acest lucru înseamnă că toţi conectorii audio/video şi de alimentare sunt acum plasaţi pe o singură parte a PCB-ului, ceea ce va permite o mai bună gestionare a cablurilor de conectare.
Figura 1 Raspberry PI Model B+, număr stoc RS: 811-1284 Dacă vă place să interfaţaţi dispozitivul vostru Raspberry Pi cu lumea reală prin (de exemplu) conectarea senzorilor sau controlul LED-urilor, înseamnă că au existat momente în care aţi dorit să dispuneţi de mai multe intrări şi ieşiri prin conectorul GPIO, sau de mai multe porturi USB pentru conectarea perifericelor. Vestea bună este că cei de la Fundaţia Raspberry Pi au urmărit comunitatea de utilizatori Raspberry Pi în continuă dezvoltare şi au realizat o versiune îmbunătăţită a Raspberry Pi numită Model B+. La prima vedere, noul Raspberry Pi model B+ arată diferit de primul model şi într-adevăr aproape toate noile caracteristici şi îmbunătăţiri introduse sunt legate de conectivitate şi de designul fizic (în opoziţie cu cel electronic). Au fost prevăzute încă două noi porturi USB, ceea ce în numeroase aplicaţii elimină necesitatea unui HUB USB extern. S-a dorit adesea conectarea unei tastaturi, mouse şi adaptor WiFi la Raspberry Pi, iar cu noul Raspberry Pi B+ se poate face aceasta fără necesitatea unui HUB USB, şi cu toate acestea rămâne încă un USB disponibil. Există acum un total de 40 de pini de intrare / ieşire GPIO, dintre care 26 pot fi 16
utilizaţi ca intrări şi ieşiri digitale. Dar şi mai important este faptul că 9 dintre cei 14 noi pini GPIO sunt dedicaţi intrărilor / ieşirilor (pini ce nu au funcţii alternative), astfel că, dacă doriţi să utilizaţi magistralele integrate UART, I2C sau SPI, o puteţi face şi să vă mai rămână încă multe intrări şi ieşiri libere. Noua schemă a GPIO extinsă este prezentată în figura 2. Pinii 3 şi 5 (GPIO 2 şi GPIO 3) au ambii rezistenţe de pull-up integrate de 1,8 KΩ. Pinii 27 şi 28 (ID_SD şi ID_SC) sunt rezervaţi exclusiv pentru utilizarea ID EEPROM şi nu pot fi utilizaţi ca pini de intrare/ieşire. Dispunerea pinilor GPIO este compatibilă cu modelele anterioare Raspberry Pi, pinii de la 1 la 26 fiind direct compatibili cu conectorul GPIO anterior al Raspberry Pi. Trebuie însă remarcat că întregul conector GPIO a fost mutat din colţul plăcii pentru a face loc pentru găuri de montare suplimentare – motiv pentru care orice placă de extensie pentru modelele anterioare este compatibilă, doar poziţia ei nu va mai fi aceeaşi. Dacă sunt analizaţi în continuare conectorii integraţi, ieşirea audio jack de 3,5 mm şi ieşirea video compozită RCA (ce pot fi găsite pe modelele anterioare Raspberry Pi) au fost înlocuite cu un singur conector
Printre alte schimbări introduse de noul Raspberry Pi model B+, este şi aceea că soclul de memorie SD de pe modelele vechi a fost înlocuit cu un soclu de memorie Micro SD, LED-urile de stare au fost mutate şi ele (LED de alimentare roşu “PWR” şi LED verde de operare “ACT”) iar PCB-ul dispune acum de 4 găuri de montare dispuse în colţurile unui dreptunghi astfel încât montarea se poate face mai sigur şi mai simplu. Din punct de vedere al electronicii, singura schimbare semnificativă este aceea că circuitul de putere liniar utilizat de plăcile anterioare a fost înlocuit cu un design în comutaţie mai eficient. Noul Raspberry Pi model B+ este la fel de
Figura 2
RASPBERRY PI MODEL B+
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Specificaţii Cip
Broadcom BCM2835 SoC
Arhitectură miez
ARM11
CPU
Procesor de aplicaţii ARM1176JZFS 700 MHz cu consum energetic redus
GPU
Dual Core VideoCore IV® Multimedia Co-Processor Oferă Open GL ES 2.0, OpenVG accelerat hardware Capabilitate de 1 Gpixeli/s, 1.5 Gtexel/s sau 24GFLOPs
Memorie
512MB SDRAM
Sistem de operare
Boot-are de pe cardul Micro SD, rulând o versiune de Linux
Dimensiuni
85 mm × 56 mm × 17mm
Alimentare
5V, 2A, conector Micro USB
Conectori Ethernet
Conector Ethernet 10/100 BaseT
Ieşire Video
HDMI (rev. 1.3 & 1.4), compozit RCA (PAL şi NTSC)
Ieşire Audio
3.5mm jack, HDMI
USB
4 × USB 2.0
Conector GPIO
Conector 40-pini, 2.54 mm (2 × 20) Oferă pini 27 GPIO, precum şi linii de alimentare +3.3V, +5V şi GND
Conector cameră
15-pini MIPI CSI-2 (Camera Serial Interface)
JTAG
Fără pini
Conector display
Interfaţă DSI (Display Serial Interface)
Soclu card memorie
SDIO
uşor de utilizat precum predecesorii săi, iar pinii GPIB suplimentari şi porturile USB suplimentare vor deschide cu siguranţă noi posibilităţi de aplicaţii. Noul design şi distribuţia conectorilor este un progres faţă de modelele anterioare, făcând din acest nou Raspberry Pi model B+ o soluţie mai adaptabilă şi uşor de integrat într-o varietate de proiecte.
Adaptor WIFI (nr. stoc RS 760-3621) Unitatea Edimax EW-7811Un este un adaptor wireless nano USB ce suportă un maxim de rază de acţiune şi viteză. În ciuda dimensiunii, acest adaptor USB mic suportă viteze de transfer de date de până la 150Mbps la conectarea cu dispozitive wireless 802.11n.
Adaptor HDMI – VGA (nr. stoc RS 778-1882) Acest adaptor HDMI - VGA preia semnalele HDMI de la Raspberry Pi şi le converteşte în semnale de ieşire analogice pentru a permite utilizarea monitoarelor VGA. Conectorul de intrare este HDMI tată, iar ieşirea este VGA mamă. Convertorul se alimentează de la sursa HDMI, nefiind nevoie surse de tensiune externe.
Exemple de accesorii Modul cameră (nr. stoc RS 775-7731) Acest modul este o cameră video de înaltă definiţie pentru Raspberry Pi. El dispune de senzor Omnivision 5647, senzor de 5MPixeli, filtru IR integrat. Rezoluţia imaginii foto este de 2592 × 1944, iar cea a imaginii video este de 1080p. Dimensiunea sa este de 20 mm × 25 mm × 10 mm. Card SD de 8 GB pre-programat cu NOOBS (nr. stoc RS 796-1693)
Aurocon COMPEC SRL www.compec.ro 17
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
“The word cape comes from the shape of the board as it is fitted around the Ethernet connector on the main board. This notch acts as a key to insure proper orientation of the cape.”
cu
Aşa este descris un cape în Beaglebone Black System Refrence Manual (SRM). Este, practic, un shield ce augmentează dotările Beaglebone-ului cu ecrane LCD, module GPS/GPRS, Wi-Fi, Bluetooth, INS (Inertial Navigation System), drivere de motoare, modul NAND etc. Pe Beaglebone Black pot fi folosite simultan până la 4 Cape-uri.
Autor: Alexandru Aungurencei - alex.aungurencei@gmail.com
Pentru început, va trebui să parcurgeţi documentaţia: System Reference Manual (SRM) şi Technical Reference Manual (aka TRM). SRM este documentul în care veţi găsi tot ce vreţi să ştiţi despre Beaglebone sau Beaglebone Black. Îl găsiţi online, pe BeagleBone Black circuitco wiki (http://elinux.org/Beagleboard:BeagleBoneBlack#Hardware_Files) împreună cu scheme electrice ale versiunilor BBB. TRM este, practic, Datasheet-ul procesorului de la Texas Instruments: SitaraAM3359 Cortex-A8 (http://www.ti.com/product/am3359). Este un document stufos (4966 de pagini) din care vom selecta doar secţiunile ce prezintă interes. Designul Prima problemă de care ne lovim este ce vrem să conţină Cape-ul nostru? Fiind o extensie pe care vrem să rulăm jocuri este evident că vom avea nevoie de un ecran (preferabil LCD TFT), butoane şi/sau joystick, o sursă de alimentare, difuzor sau mufe jack pentru căşti şi, opţional, alte moduri de control ale cursorului – prin înclinarea consolei, cum ar fi un IMU. La componentele enumerate mai sus se mai adaugă cerinţele impuse de SRM, precum un EEPROM. Orice Cape trebuie să aibă un cip EEPROM care să conţină informaţii ce vor permite software-ului (SW) de pe BBB să indentifice placa şi să configureze pinii 18
întocmai (vom discuta despre “pin mux mode” atunci când ne vom ocupa de partea SW a aplicaţiei; pe moment este suficient să înţelegem când şi ce pini sunt folosiţi nativ de către BBB). BBB comunică cu EEPROM-ul prin I2C, în consecinţă cape-ul trebuie să aibă o adresă unică în intervalul închis 0x54, 0x57. În SRM este specificat ca această adresă să fie configurabilă dintr-un dipswitch sau jumperi. Pinii folosiţi de BBB pentru comunicarea prin I2C cu Cape-urile sunt 19 şi 20 de pe headerul P9. Aceştia reprezintă I2C2 (BBB are 3 magistrale pentru I2C) şi sunt setaţi “by default” să funcţioneze ca şi magistrala de comunicaţie I2C. Este puternic contraindicat
să modificaţi setările de pin mux ale acestor pini (P9: 19, 20) deoarece sistemul nu va mai putea detecta prezenţa Cape-urilor. Schema electrică pentru memoria EEPROM este prezentată în Figura1. Deoarece cipul CAT24C256W este disponibil doar în Statele Unite, vă sugerez să îl înlocuiţi cu 24AA256-I/SN de la Microchip (schema rămâne identică). Semnalele de I2C trebuie să aibă rezistenţe de pullup (R7, R8). Am eliminat dipswitch-ul, setând astfel adresa 1010100 sau 0x54 în hexazecimal. Test point-ul WP este semnalul de Write-Protect al EEPROM-ului. Trebuie conectat la GND în timpul scrierii memoriei, altfel vor fi posibile doar operaţii de citire din memorie.
BeagleBone Black
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
I2C2_SCL şi I2C2_SDA sunt liniile bidirecţionale ale magistralei I2C şi sunt conectate la pinii 19 şi 20 din header-ul P9. Despre conţinutul datelor ce trebuie scrise în EEPROM vom discuta numărul viitor). Figura 1
TFT LCD Înseamnă Thin-Film-Transistor LiquidCrystal Display. Este un tip de LCD cu o mai mare calitate a imaginii (contrast mai bun) fiind folosit în televizoare, monitoare, telefoane mobile etc. Veţi întâlni noţiunea de backlight. Nu voi aborda acest subiect întrucât găsiţi numeroase informaţii pe Wikipedia: http://en.wikipedia.org/wiki/Backlight.
capacităţilor aduse de PCB şi de trasee, calitatea imaginii ar fi fost compromisă. Conectorul pentru cablul panglică al LCDului este un Molex54132-4062. Librăria nu există în Eagle, aşa că va trebui să o faceţi voi. În urma calculelor din datasheetul celor de la Newhaven obţinem un consum cumulat de 981mW. Driverul audio Pentru schema driverului audio am folosit Audio Cape RevA, o creaţie tot CircuitCo. Aceasta foloseşte codecul audio de la Texas Instruments TLV320AIC3106. Din păcate, din cauza unei librării greşite din Eagle (cristalul are pad-urile în oglindă) driverul audio nu funcţionează. Deoarece la momentul când am trimis plăcile la producător, Audio Cape RevB nu era apărută, nu am ştiut de această defecţiune. Vă recomand să folosiţi schema din RevB. Controlerele Fiind, totuşi, o platformă pentru jocuri, am considerat că un joystick şi 4 butoane alcătuiesc configuraţia optimă. Joystick-ul este unul analogic, acelaşi model fiind folosit şi pe PSP 1000. Beaglebone-ul are 7 intrări analogice cu o rezoluţie de 12 biţi. Aceşti pini nu au mux mode, iar tensiunea maximă admisă este 1.8V. Pentru joystick vom folosi pinii AIN0 şi AIN2, iar pentru butoane sunt perfecți oricare 4 pini GPIO din header-ele P8 şi P9 (aveţi grijă dacă folosiţi pinii 11-21 din header-ul P8 întrucât sunt rezervaţi de BBB pentru eMMC). Chiar dacă pinii GPIO au rezistenţe interne de pullup şi pulldown, este indicat să adăugaţi rezistenţe externe de pullup pentru cele 4 butoane (Figura 3).
Figura 2 Am ales display-ul celor de la Newhaven Display pentru costul mic şi performanţele bune: NHD-4.3-480272EF-ATXL#. Acelaşi model este folosit şi de CircuitCo care au proiectat BeagleBone LCD4 Cape. Fiind HW (Hardware) open source, putem să ne inspirăm din designul lor, rezultând astfel schema din Figura2. Deoarece nu avem touchscreen, nu ne vor interesa pinii LCD_DATA16 – LCD_DATA23. Semnalul LCD_DISEN controlează starea displayului: ON sau OFF, deci îl vom conecta direct la un pin GPIO al BBB pe care îl vom seta, prin rezistenţă internă de pullup, pe 1 logic (3.3V). Transceiverul SN74AVC20T245 este folosit pe post de repetor pentru a păstra integritatea semnalului. Rezistenţele de pe ieşirile şi intrările lui impedică reflexia semnalului. Fără ele, din cauza
Figura 3 Extra Pentru a face proiectul mai interesant, am decis să adaug o unitate IMU (accelerometru 3D, giroscop 3D şi magnetometru 3D) şi o busolă. Busola este formată din acelerometrul şi magnetometrul din integratul LSM303, iar pentru restul funcţiilor am ales LSM330. Aceste integrate comunică cu BBB prin aceeaşi magistrală I2C pe care o foloseşte şi memoria EEPROM: I2C2. Pentru schema electrică am folosit Interatco Cape: https://github.com/cclark2/interacto_bbone _cape/tree/master/Hardware.
Împreună, LSM330 si LSM303 consumă maxim 4mW. Alimentare Fiind un dispozitiv “mobile” suntem nevoiţi să apelăm la acumulatori sau baterii. Pentru a stabilii capacitatea acumulatorilor de care avem nevoie, este important să ştim cât va consuma Cape-ul. Pentru acest lucru putem consulta Tabelul1. Feature LCD
Max. mW
Backlight
768
White+Black Screen
213
Beaglebone Black
2300
Audio
TLV320AIC3106
36
IMU
LSM330
3.3
Compass LSM303
0.5
Rezultă un total de aproximativ 3.32W. Deoarece suntem limitaţi ca spaţiu din cauza dispunerii centrale a BBB, am optat pentru 4 celule LiPo legate în paralel, obţinând astfel 4000mAh la 3.3V. Obţinem, astfel, o autonomie de maxim 3.5 ore. Pentru a ridica tensiunea la cei 5V necesari BBB, folosim o sursă în comutaţie de tip boost. Şi aici ne putem folosi de un Cape şi anume Battery Cape: http://elinux.org/Beagle board:BeagleBone_Battery. Extragem de aici sursa de 5V/1.5A construită în jurul integratului TPS61032 de la Texas Instruments. Vă sugerez să consultaţi Aplication Notes SLVU080A pentru a vă asigura că aveţi un design corect al PCB-ului sursei boost: www.ti.com/lit/ug/slvu080a/slvu080a.pdf. Probabil că aţi observat că majoritatea circuitelor integrate de pe placă se alimentează la tensiuni cuprinse între 2.4V – 3.6V, deci avem nevoie de o sursă de tensiune de 3.3V. BBB are deja integrată soluţia. Tot ce rămâne este să ne conectăm la pinii 3 şi 4 din headerul P9. Fiecare pin suportă o sarcină maximă de 250mA, aşadar aveţi grijă, în cazul în care mai doriţi să adăugaţi alte funcţionalităţi, să nu depăşiţi sarcina maximă cumulată de 500 mA. În Figura 4 și Figura 5 aveți schemele complete ale plăcii. PCB Design-ul unui PCB care conţine surse în comutaţie şi trase de date susceptibile la zgomot este întotdeauna un proces foarte dificil, aşa că vă voi oferi câteva reguli / hinturi pe care le puteţi urma pentru a vă asigura că nu veţi avea zgomot indus în liniile de date, eficienţă mică a sursei în comutatie, citiri greşite ale ADC-urilor etc: Ü 19
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü
Figura 4
Figura 5
20
BeagleBone Black l
Începeţi cu aranjarea componentelor în grupuri cu funcţii specifice.
l
Când proiectaţi sursa în comutaţie urmaţi aceşti paşi:
- Alegeţi bobine care au EMI mic şi miez de ferită precum cele toroid.
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
cât mai scurte şi să nu aibe sub ele alte trasee pe care circulă curenţi oscilanţi. Analog pentru liniile de date de mare frecvenţă.
Traseele de alimentare trebuie să fie suficient de groase încât să suporte consumul maxim putere. În Figura 7 și Figura 8 aveți ilustrat board-ul. Ü Figura 6
- Trasaţi bucla de feedback cât mai departe de bobină sau alte trasee zgomotoase. Bucla trebuie să fie cât mai mică ca lungime, iar lăţimea traseului să fie mai mare. Veţi fi nevoiţi să faceţi un compromis între mărimea traseului de feedback şi distanţa lui faţă de bobină, însă ultima are prioritate. - Condensatorii de filtrare trebuie situaţi cât mai aproape de pinii de VIN ai integratului, mai ales dacă au capacităţi mici. Încercaţi să folosiţi componente SMD deoarece permit trasee mai scurte şi reduc şansele captării zgomotului. - Toate traseele de putere trebuie să fie cât mai scurte, directe şi late. De regulă se foloseşte următorul artificiu: grosimea minimă a traseului trebuie să fie 0.381mm per Amper. - Bobina, condensatorii şi dioda de pe ieşire trebuie să fie plasate cât mai aproape una de cealaltă. Acest lucru va reduce EMI şi pierderile rezistive şi inductive formate de traseele de cupru, crescând eficienţa.
Figura 7
- Bobina şi condensatorii de pe ieşire trebuie conectaţi direct la un plan de masă. Este o idee bună să existe un plan de masă pe ambele părţi ale PCB-ului, cel puţin în zona sursei în comutaţie. Astfel, planul va absorbi cât mai multe EMI radiate de bobină. - Aranjaţi componenetele a.î. buclele formate de curenţii oscilanţi la frecvenţe mari (switching currents) să fie curbate în aceeaşi direcţie. Din cauza modului în care funţionează o sursă în comutaţie, există 2 stări de putere: ON şi OFF. În fiecare din cele 2 stări, va exista o buclă a curenţilor de putere formată din componentele care conduc curent electric la momentul respectiv. Aranjaţi componentele a.î. curenţii din bucle să aibe aceeaşi direcţie pentru fiecare din stări. În acest fel eliminaţi apariţia câmpului magnetic produs de trasee în cele 2 jumătăţi de ciclu şi reduceţi considerabil EMI. l
Figura 8
Un exemplu foarte bun, din partea Texas Instrumens, îl aveţi în Figura 6. Traseele care duc la ADC trebuie să fie 21
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü
Menţionez că Top-ul (roşu) şi Botom-ul (albastru) sunt în oglindă, adică piesele care apar pe top pe placa fabricată, aici au fost rutate pe bottom, şi viceversa. Motivul este
faptul că aveam mult mai multe componente pe bottom, deci am decis să le rutez pe layerul de top (Figura 9). Deoarece această placă este o versiune Beta, vă recomand să nu vă
bazaţi pe acest design atunci când vă rutați placa proprie deoarece nu sunt respectate multe dintre hint-urile date mai sus. Surprinzător, însă, placa funcţionează n Figura 9a
Figura 9b
Va urma, într-un număr viitor, o versiune îmbunătăţită, cu un codec audio funcţional, o baterie LiPo mai mare, şi, de ce nu, Wi-Fi sau Bluetooth. Până atunci, ne vedem numărul următor în care ne vom ocupa de partea software. 22
Robot Vs Maze
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
vs Una dintre probele concursului Robochallenge București 2014 a presupus realizarea unui robot capabil să rezolve și să parcurgă un labirint construit în acord cu anumite restricții impuse de organizatori. La începutul probei se poziționează, în zonele de start, doi dintre roboții concurenți. Obiectivul acestora este de a găsi ieșirea din labirint înaintea adversarului. Traseele pe care le au de urmărit cei doi roboți sunt, până într-un punct, independente Figura 1: Robot Labirint HBFS Team și egale ca lungime. Dincolo de acest punct, parcursul devine comun, astfel că pot apărea zone în care roboții trebuie să se evite reciproc. În acest sens, pentru a face posibilă depășirea, organizatorii au stabilit ca lungimea și lățimea roboților să nu depășească 10 cm. Autori: Mihai Crăciunescu - mihaiacr@gmail.com Cristian Dobre - dobrecristian@nighttime.ro Andrei Duluţă - andrei.duluta@gmail.com Modelul 3D În realizarea robotului de labirint s-a optat pentru modelarea tuturor componentelor ce vor fi amplasate pe robot (inclusiv șasiul) în Autodesk Inventor, în vederea evitării
erorilor de natură mecanică care ar putea apărea în momentul construirii propriu-zise. Date fiind restricțiile impuse de organizatori, s-a urmărit crearea unui design care să permită poziționarea cât mai eficientă a Figura 2: Modelul 3D al şasiului
componentelor mecanice (motoare, roți) și a celor electrice (PCB, microcontroler, senzori, baterie). Prezentarea componentelor folosite în realizarea robotului Motoare Pentru robotul de labirint, s-a decis utilizarea a două motoare de tip Micro Metal cu raportul de transmisie 30:1. Inițial, motoarele erau comandate în buclă deschisă (nu se obține feedback referitor la comanda trimisă). Din cauza faptului că, din punct de vedere electromecanic, cele două motoare nu au aceleași performanțe, controlul acestora, în buclă deschisă, conduce la apariția unei erori care face imposibilă mișcarea robotului în linie dreaptă. Ü 23
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü
Mai exact, din cauza cuplurilor diferite, la aceeași turație comandată de microcontroler, robotul deviază, ușor, iar această abatere se acumulează în timp. Pentru a
Bateria Alimentarea motoarelor și a microcontrolerului s-a realizat folosind o baterie de 7.4V cu capacitatea de 1000mAh.
Figura 3: Modelul 3D al robotului
În crearea schemei s-a folosit programul ‘EAGLE’ (Figura 5), layout-ul asociat schemei electrice fiind prezentat în Figura 6. În crearea layout-ului s-a avut în vedere poziționarea pieselor astfel încât circuitul să poată fi realizat pe o plăcuță cu un singur strat de cupru. De asemenea, s-a urmărit ca poziționarea senzorilor și butoanelor să fie făcută într-un mod convenabil. A fost necesară decuparea unui pătrat în PCB pentru cele două ribbon-uri (panglică de conductori) prin care se transmit informațiile de la encodere către microcontroler. Tot prin intermediul ribbon-urilor, motoarele sunt conectate la puntea H.
rezolva această problemă s-a optat pentru controlul în buclă închisă, astfel încât să se cunoască, la orice moment de timp, numărul efectiv de rotații pe care le-a realizat fiecare motor. Encodere Encoderele sunt dispozitive electromecanice folosite pentru a converti poziția unghiulară a unui ax sau arbore într-un semnal analogic sau digital. În practică, există mai multe tipuri de encodere: mecanice, optice, magnetice sau capacitive. Pentru aplicația robotului de labirint s-a decis utilizarea encoderelor optice pentru a număra rotațiile motoarelor. Pe axul motorului se montează un disc cu “dinți”. Encoderul ales pentru acest robot este un circuit electronic care include două surse de unde în infraroșu și doi receptori. Cele două surse trimit câte un fascicol înspre discul aflat pe axul motorului și, în cazul în care unda se reflectă (pe direcția fascicolului se afla un “dinte”), aceasta este recepționată și se generează o tensiune. Cu ajutorul encoderelor se poate calcula, cu o anumită precizie, distanța reală pe care a parcurs-o robotul.
Senzor de proximitate Pentru detectarea obstacolelor, a fost utilizat senzorul de proximitate Sharp 340K datorită rezistenţei acestuia la perturbaţiile luminoase. De asemenea, un alt avantaj oferit de acest senzor este capacitatea de a sesiza obstacolele aflate la o distanță de până la 40cm. Pentru funcționarea senzorului este necesar un circuit exterior format din câteva componente pasive. Schema electrică se poate observa în figura de mai jos.
Scopul robotului este de a ieși din labirint în urma vizitării unui număr minim de noduri. Întregul parcurs (din zona de start, până la ieșire) este reținut într-un vector de mutări. Ieșirile din fiecare nod pot fi privite “de sus”, din perspectiva utilizatorului, sau “din interiorul labirintului”, din perspectiva robotului. Noutatea pe care o aduce algoritmul folosit pentru acest robot presupune transpunerea direcțiilor către care dă acces fiecare nod din “SUS”, “STÂNGA”, “JOS”, “DREAPTA” (utilizator) în “ÎNAINTE”, “DREAPTA”, “STÂNGA”, “ÎNAPOI” (robot).
Figura 4: Schemă electrică senzor proximitate
Baby Orangutan
Robotul folosește patru astfel de senzori amplasați după cum urmează: doi senzori în fața robotului și câte unul pentru fiecare dintre cele două laterale.
Modulul Baby Orangutan oferit de cei de la Pololu înglobează un microcontroler ATmega328P care funcționează la frecvența 20MHz și o punte H Toshiba TB6612FNG. Am ales acest modul datorită punții H încorporate și a ușurinței cu care se comandă motoarele (există o bibliotecă specializată).
Partea electronică a robotului include: microcontrolerul, alimentarea motoarelor și a encoderelor, cei patru senzori de distanță, fiecare cu câte un LED de test (aceste LED-uri vor indica output-urile senzorilor corespunzători), un senzor de telecomandă și, nu în ultimul rând, două LED-uri ambientale.
24
Explicarea codului Programul folosit pentru a localiza și controla robotul în interiorul labirintului are la bază algoritmi specifici grafurilor orientate. Fiecare “nod” al labirintului este reținut în memoria microcontrolerului, împreună cu posibilele direcții conexe (STÂNGA, DREAPTA, SUS sau JOS).
Pentru a reprezenta, într-un mod cât mai simplist, direcțiile către care se poate ieși din fiecare nod al labirintului, s-au utilizat constante. Astfel, celor patru direcții disponibile (Top, Left, Bottom, Right) le-au fost asociate numere întregi reprezentate pe 2 biți (00, 01, 10, 11). Chiar dacă legăturile către un alt nod lipsesc, robotul foloșeste toate direcțiile pentru a stabili când a ajuns în nodul respectiv din moment ce îi știe înfățișarea. Mai mult, condițiile de oprire sunt determinate de nodul către care robotul se îndreaptă. De exemplu, dacă nodul la care trebuie să ajungă este blocat pe direcția înainte, robotul va executa virajul în momentul în care senzorii din față sunt activați.
Robot Vs Maze
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Figura 5: Schema electrică
Dacă nodul nu este blocat, se ia în considerare direcția virajului ce trebuie executat (se poate vira la stânga doar când senzorul din stânga este dezactivat). Datorită faptului că senzorii robotului se pot afla pe muchia unui perete, se distinge un caz de nedeterminare (fals-pozitivă) în jurul distanței de 15-17cm, fiind necesară utilizarea unei funcții de filtrare a intrărilor pentru a evita problemele ulterioare. Trenul de impulsuri primit de la encodere este folosit în funcțiile pentru mers drept și viraje în unghi drept. Deoarece erorile au o natură aditivă, este necesară corecția acestora în același timp cu parcurgerea. O eroare de 1 grad la start, s-ar transforma într-o abatere mult prea mare până la terminarea traseului. Așadar, această corecție se face în funcția de viraj, care utilizează pereții laterali pentru a se repoziționa corect.
Figura 6: Layout PCB
Figura 7: Traseu labirint - direcții De asemenea, s-a constatat în timpul testării că robotul poate ajunge să ramână blocat în perete, și de aceea a fost necesară implementarea unei funcții pentru restabilirea poziției și cursului ce trebuie urmărit. Pentru aceasta s-au folosit encoderele cu scopul de a stabili dacă robotul a rămas blocat o anumită perioadă de timp.
Echipa HBFS, compusă din autorii acestui articol, a construit un robot urmărind toate aspectele prezentate mai sus și a obținut locul I la proba de labirint în cadrul concursului Robochallenge 2014. n
25
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Priza inteligentă, în prima variantă, este un dispozitiv ce măsoară curentul consumat de un aparat conectat la aceasta, apoi trimite informaţia printr-un modul Bluetooth la un PC, care poate utiliza datele în diferite scopuri: grafice curent – timp sau salvarea datelor într-un format uşor de folosit pentru o utilizare ulterioară. Utilitatea principală a acestui dispozitiv este de a monitoriza buna funcţionare a unui aparat conectat la aceasta. Schema electrică a prizei conţine o sursă de tensiune AC/DC, stabilizatoare de tensiune, microcontrolerul, traductorul de curent, un amplificator diferenţial (INA), un modul Bluetooth şi un încărcător de acumulatori Li-Po. Autori: Daniel Rosner - daniel.rosner@cs.pub.ro Iulian Calciu - iuliancalciu@gmail.com Sursa de tensiune este o sursă integrată ce furnizează la ieşire o tensiune de 12V şi un curent maxim de 200mA. Aceasta alimentează stabilizatorul de tensiune de 5V şi încărcătorul de baterie. Stabilizatorul de 5V este modelul LM2940IMP de la Texas Instruments şi este folosit în alimentarea traductorului de tensiune, care funcţionează la tensiunea fixă de 5V şi pentru alimentarea regulatorului de 3V3. Am ales cascadarea regulatorului de 3V3 pentru a disipa mai puţină putere. Regulatorul de 3V3 este folosit pentru alimentarea microcontrolerului şi a bluetooth-ului. Am ales tensiunea de alimentare a logicii de 3V3 deoarece aceasta este tensiunea la care funcţionează modulul bluetooth. În cazul alimentarii la 5V a microcontrolerului şi a bluetooth-ului la 3V3, pentru comunicaţia între dispozitive ar fi fost nevoie de un circuit “level shifter”. Traductorul de curent este modelul LTSR 15-NP de la producătorul de traductoare 26
industriale LEM. Am folosit acest traductor industrial pentru a putea măsura curenţi mari de până la 15A, ceea ce înseamnă că se pot monitoriza aparate cu o putere electrică de peste 3KW. Acesta este alimentat la tensiunea de 5V, fiind tensiunea recomandată de producător. Curentul măsurat de traductor este returnat ca un semnal sinusoidal (de aceeaşi formă şi frecvenţă cu semnalul de curent alternativ) şi este centrat în 2.5V. Conform manualului dispozitivului, aplitudinea maximă a semnalului poate fi 2.5V + 0.625V = 3.125V, ceea ce înseamnă că semanlul poate fi măsurat de convertorul analognumeric al microcontrolerului alimentat la tensiunea de 3.3V. Timpul de răspuns al traductorului este mai mic de 400ns, ceea ce îl face foarte rapid. Curentul citit de traductor se calculează după formula: I = 15 * (V_READ – 2.5) / (3.125 – 2.5);
Convertorul analog digital al microcontrolerului are o rezoluţie de 12 biţi, adică 4096 valori posibile, lucru ce transformă ecuaţia de mai sus în: I = 15 * (N_READ – 3013) / (3879 – 3103) unde: V_READ = tensiunea în volţi; N_READ = numărul citit de ADC care semnifică tensiunea de la intrarea ADC-ului. Conversia se face cu regula de 3 simplă: 3.3V ... 4095 V_READ ... N_READ Din teste am observat că rezoluţia de 12 biţi a ADC-ului nu este suficientă pentru a măsura cu precizie o tensiune care variază cu 0.625V pentru un interval de 0 – 15A, aşa că am folosit un Instrumentation Amplifier (INA) pentru a amplifica tensiunea, astfel aducând-o într-un interval de 4 ori mai mare. INA este de fapt un amplificator diferenţial, ca are ca intrări, în
Priză Smart
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
cazul nostru, semnalul de la traductorul de curent centrat în 2.5V (± 0.625V) şi o tensiune de 2.5V pentru a doua intrare. Diferenţa de tensiune dintre semnalul de traductor şi 2.5 este amplificată cu o valoare de GAIN, 5 în cazul nostru. Amplificatorul este modelul MCP6N11 de la Microchip. Pentru a transmite datele măsurate pentru a fi prelucrate, s-a folosit un modul bluetooth RN-42 de la Roving Networks, un modul uşor de folosit cu un controller intern ce acceptă comenzi ASCII. Comunicaţia dintre bluetooth şi microcontroler sa făcut prin interfaţa UART, o interfaţă asincronă simplă, bazată pe o rată de transfer (baud rate). Pentru ca un modul bluetooth să se poata conecta la altul, acesta trebuie setat în modul master (în cazul nostru prin comanda “SM, 1”), apoi să se trimită dispozitivului comanda de conectare (“C, MAC”, unde MAC este adresa MAC a dispozitivului la care dorim să Ü ne conectăm). 27
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü
Modulul RN-42 are o listă mare de comenzi, lucru ce permite o configurare complexă a modulului pentru a putea fi folosit la capacitate maximă. În cazul prizei am ales un mod de configurare simplist. Încărcătorul de baterie (battery charger) este modelul BQ2057WSN de la Texas Instruments care poate încărca acumulatori Li-Po sau Li-Ion cu una sau două celule (3.7V, respectiv 7.4V). Acesta este alimentat direct la sursa de 12V, acceptând tensiuni de intrare de până la 15V. Încărcătorul este folosit pentru a menţine acumulatorul Li-Po de 7.4V încărcat. Acumulatorul este folosit pentru alimentarea circuitului atunci când alimentarea de la priză este “căzută”. Acest lucru ajută la transmiterea informaţiei de “lipsă alimentare” către dispozitivul care monitorizează priza. Microcontrolerul folosit este modelul PIC24F32KA304 de la Microchip, modelul cu 44 de pini, carcasă TQFP, un controller pe 16 biţi cu 32KB de memorie flash şi 2KB de SRAM. Motivul pentru care am ales acest microcontroler este că dispune de un ADC de 12 biţi şi că poate fi alimentat la tensiunea de 3V3. Pentru semnalul de tact al microcontrolerului am ales un oscilator extern (cristal) de 20Mhz pentru a ne asigura că frecvenţa ceasului nu va varia în funcţie de temperatura ambientală (oscilatorul intern fiind de tip RC). Toate aceste componente împreună cu conectorii necesari se află pe o placă de doar 61mm × 63.5mm. Placa a fost proiectată astfel încât partea de curent alternativ să fie separată de cea de curent continuu, pentru a evita zgomotul produs de tensiunea alternativă, lucru ce asigură buna funcţionare a circuitelor de logică.
Placa electronică împreună cu bateria şi conexiunile de putere necesare se află într-o carcasă cu ştechăr şi o priză montată deasupra. Ulterior vom proiecta o carcasă compactă care va da un aspect plăcut dispozitivului şi care va scădea mult dimensiunile. 28
Pe carcasă mai există, de asemenea, o mufa de programare, pentru a nu demonta dispozitivul pentru reprogramare (eventuale modificari ale software-ului). Partea software a dispozitivului constă în 2 aplicaţii: una embedded, cod C scris pentru microcontrolerul PIC24 şi o aplicaţie grafică PC scrisă în C#. #include "includes.h" /** "includes.h" include bibliotecile "bluetooth.h" si "adc.h" si alte biblioteci auxiliare folosite in implementarea functiilor ("uart.h" - biblioteca unde sunt implementate functiile pentru trimiterea si receptarea de mesaje prin interfata UART, <stdint.h> - biblioteca folosita pentru tipul "uint16_t", etc.) Prototipurile functiilor folosite sunt: void bt_init(); void adc_init(); uint16_t adc_read(); // returneaza o variabila pe 16 biti, deoarece // adc-ul este configurat pentru a citi date pe 12 biti; void bt_tranmit(uint16_t); */ int main ( ) { uint16_t current; bt_init ( ); adc_init ( ); while (1) { current = adc_read (); bt_transmit (current); __delay_ms (2); } }
Codul pentru microcontroler a fost scris în MPLAB X şi compilat cu XC16. Funcţionalitatea aplicaţiei embedded este următoarea: se citeşte pe ADC curentul transmis (ca tensiune) de traductor şi apoi este transmis pe serială (UART) către bluetooth, care trimite automat către dispozitivul bluetooth la care este conectat (un
modul bluetooth conectat la PC). Conversia din tensiune în curent se face în aplicaţia C#, după mai multe citiri şi o mediere a datelor. Dificultatea principală a programului pentru μC a fost configurarea regiştrilor interfeţei seriale şi celor ai ADC-ului. Bluetooth-ul a fost în prealabil setat în modul slave, aşa că orice dispozitiv se poate conecta la acesta pentru a citi datele transmise. Programul de PC este o aplicaţie grafică Windows Forms scrisă în limbajul C#. Aceasta conţine facilitatea de a căuta automat porturile seriale disponibile şi selectarea celui asociat convertorului USB-serial (FTDI) folosit pentru comunicaţia cu bluetooth-ul. Aici se face şi configurarea bluetooth-ului ca master, printr-un buton numit “Init BT”. Există de asemenea, un “text box” unde se poate scrie adresa MAC a bluetooth-ului la care se doreşte să se facă conectarea. Implicit va fi setată adresa bluetooth-ului folosit pentru priză, dar aceasta se poate schimba. Pentru conectarea modulelor bluetooth, se apasă butonul “Connect”. Odată conectate modulele bluetooth, priza va începe transmisia curentului măsurat pe PC. Pentru o mai bună precizie în măsurare, se face medierea datelor, după 30 de măsurători, apoi se ignoră datele eronate şi se calculează media din nou. Măsurarea datelor trebuie să se facă pe o durată scurtă de timp, forma semnalului fiind de tip sinusoidal, altfel, datele vor fi considerate eronate. În final, datele mediate vor fi afişate în partea stângă a aplicaţiei într-un “rich text-box” şi apoi dispuse într-un grafic ce semnifică evoluţia în timp a curentului. Proiectul poate fi upgradat la o aplicaţie ce poate citi şi tensiunea de la priză şi i se poate adăuga un releu pentru putea controla tensiunea de intrare (în caz că aparatul alimentat intră într-un mod de funcţionare anormal, se poate întrerupe automat alimentarea acestuia) n
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Detector de dispozitive de înaltă frecvenţă (microfoane, camere spion) Detectorul HF este un modul de hobby util pentru detectarea şi localizarea dispozitivelor de spionaj dintr-o cameră, dintr-un telefon sau un calculator, prin urmărirea frecvenţelor înalte în gama 100KHz – 2.4GHz (în care funcţionează dispozitivele de intercepţie comerciale). Detectorul evidenţiază prezenţa unui emiţător HF prin intermediul unui LED care clipeşte din ce în ce mai rapid, pe măsura apropierii de sursă. Detectorul este alimentat de o baterie de 9V, are un consum mai mic de 10mA şi o putere de aproximativ 10mW. Poate detecta microfoanele din gama VHF (100MHz) aflate într-o rază de 5 metri, dispozitive de intercepţie a telefoanelor mobile (800MHz) într-o rază de 2 metri şi dispozitive de putere foarte mică (ex. emiţătoare ascunse în cheile maşinii) la o distanţă de 0.1 metri. Mod de funcţionare La pornire, aparatul face un test al bateriei, evidenţiat de LED-ul coresponent. Utilizarea se face după extragerea antenei, prin apăsarea tastei PUSH. Este recomandată închiderea altor dispozitive electrice sau electronice care, datorită proastei ecranări, ar putea interacţiona cu aparatul: monitoare vechi, tuburi fluorescente etc. La detectarea unei surse HF, LED-ul roşu va începe să clipească, schimbându-şi ritmul în funcţie de apropierea sau depărtarea de dispozitivul spion. Sensibilitatea aparatului se poate regla prin intermediul antenei care poate fi pliată treptat, micşorând astfel un semnal prea puternic. Unele dispozitive emit doar în momentul folosirii aparatului spionat (de exemplu un telefon mobil) astfel că verificarea trebuie făcută în timpul unei convorbiri. Prin măsurări comparative se va decide dacă există un emiţător spion sau detectorul măsoară doar emisia normală a telefonului.
l l l l l
Date tehnice: Tensiune alimentare: 9V, baterie bloc Consum curent: < 10 mA Domeniu frecvenţe: aprox. 0,1MHz - 2,4GHz Afişare: LED Dimensiuni: 102 × 61 × 26 mm (fără antenă) Tel.: 0256-201346 office@oboyle.ro, www.oboyle.ro 29
Dă-ne un LIKE pe Facebook şi ai şansa să câştigi un un kit de dezvoltare MGC3130 Hillstar 3D Gesture de la Microchip!
Kit-ul, printr-o abordare simplă, pas-cu-pas, oferă proiectanţilor ocazia de a dezvolta sisteme controlate prin gesturi 3D bazate pe circuitul MGC3130 şi electrozii de la Microchip care îndeplinesc cerinţele lor de spaţiu. MGC3130 este primul controler de gesturi 3D din lume destinat recunoaşterii gesturilor spaţiale libere. Kit-ul de dezvoltare MGC3130 Hillstar este un sistem de referinţă complet compus din circuitul MGC3130 şi un electrod de referinţă în 4 straturi cu o suprafaţă de detecţie de 95 × 60mm. Cu electrozi de referinţă adiţionali, software-ul Aurea Graphical User Interface Software şi un modul I2C-to-USB Bridge, kit-ul permite pe baza circuitului MGC3130, o proiectare facilă de sisteme cu factori de formă diferiţi. Tehnologia GestIC® activată de MGC3130 oferă oportunitatea dezvoltării unei game largi de aplicaţii în domeniul IT precum laptop-uri, tastaturi, dispozitive de intrare; aplicaţii de iluminat care includ comutatoare de lumină şi control, electronică de larg consum precum sisteme audio, imprimante şi copiatoare, pieţe auto pentru circuitele de control din interiorul autoturismului şi multe altele. Kitul de dezvoltare MGC3130 Hillstar permite clienţilor să integreze o interfaţă avansată (3D) cu utilizatorul pentru determinarea poziţiei mâinii şi recunoaşterii gesturilor în aproape orice produs electronic folosind o abordare modulară cu documentaţie completă, referinţă layout, hardware şi interfaţă grafică GUI. Pentru a avea şansa de a câştiga un kit de dezvoltare MGC3130 Hillstar 3D Gesture
(în valoare de 182 USD) daţi un LIKE pe Facebook https://www.facebook.com/ELECTRONICA.AZI în perioada 15 Septembrie - 1 Noiembrie. Câştigătorul va fi anunţat în ultimul număr al revistei Electronica Azi - HOBBY din acest an. Câştigători ai concursurilor organizate de revista “Electronica Azi” Kit de dezvoltare ENERGY-HARVEST-RD de la Silicon Labs.
Cohal Alexandru Iaşi
Tuşan Dorel Paşcani
Toţi câştigătorii campaniei “Dă-ne un LIKE pe Facebook şi ai şansa să câştigi un kit de la Silicon Labs” sunt rugaţi să ne contacteze pentru ridicarea premiilor! Kit de dezvoltare ENERGY-HARVEST-RD de la Silicon Labs.
Mihail Preda Jean Bogdan Dumitru
Kit de dezvoltare EFM32 de la Silicon Labs.
Max Max
Kit de dezvoltare SiM3U de la Silicon Labs.
Burgheaua Mihai
MPLAB Starter Kit for PIC24H Microcontrollers o soluţie completă pentru iniţierea în programarea microcontrolerelor pe 16 biţi de la Microchip Autor: Daniel Ghiţă daneelg@yahoo.com
Introdusă pentru prima dată în anul 2006, seria de microcontrolere PIC24 de la Microchip a fost proiectată pentru a oferi procesoare pe 16 biţi cu noi instrucţiuni şi performanţe superioare comparativ cu seriile de procesoare pe 8 biţi: PIC18, PIC16 etc. Arhitectura microcontrolerelor PIC24 este foarte apropiată de cea a procesoarelor dsPIC, cu care au în comun majoritatea setului de instrucţiuni dedicate procesării digitale a semnalelor. MPLAB Starter Kit for PIC24H Microcontrollers este un pachet hardware+software complet, pe care cei de la Microchip îl propun celor ce doresc să exploreze capabilităţile acestei serii de procesoare. 30
MPLAB STARTER KIT
Starter kit-ul vine ambalat într-o cutie destul de rigidă, asemănătoare cu cea a unui DVD. În interiorul acesteia vom găsi placa de test, un CD cu software şi documentaţie precum şi un cablu USB pentru conectarea plăcii la PC. Pe respectivul CD găsim un ghid de utilizare în format PDF, care face o succintă trecere în revistă, pe parcursul a 44 de pagini, a principalelor caracteristici ale plăcii de test precum şi al programului demonstrativ care vine inscripţionat “din fabrică” în memoria flash a microcontrolerului. Alături de acesta mai găsim un interesant tutorial de utilizare în format video şi, cel mai important, kit-ul de instalare a software-ului de dezvoltare (software ce rulează, conform documentaţiei, sub sistemul de operare Microsoft Windows 2000/Xp/Vista pe 32 biţi). Acest kit conţine versiunea completă a mediului integrat de dezvoltare MPLAB® IDE, o versiune de evaluare a compilatorului MPLAB C30 C Compiler for PIC24 precum şi codul sursă al unei aplicaţii demonstrative (cod sursă ce stă la baza demo-ului care vine deja scris în flash-ul procesorului şi care va rula imediat ce placa este alimentată).
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
l
Primul bloc este cel ce realizează funcţia de programator / depanator, construit în jurul unui microcontroler PIC18F67J50, tactat la 48MHz; Acest modul va fi interfaţa între software-ul de programare instalat pe PC (la care se conectează prin intermediul portului mini-USB de pe placă). Cum alimentarea se face din portul USB al PC-ului (transformând cei 5V în 3.3V, prin intermediul chip-ului MC1727), nu este necesar alimentator extern. În principiu acest modul nu a fost gândit pentru a putea fi reprogramat, însă pe placă există un şir de contacte ( J2) cu rol de port ICSP prin care se poate rescrie programul din microcontroler. Această funcţie însă nu este documentată şi nu se recomandă
l
modificarea programării acestui modul, întrucât nu este disponibil codul programului original!
Conform manualului, aceasta intrare se poate utiliza pentru conectarea unei game variate de senzori (termocuple etc).
un accelerometru analogic triaxial, conectat la microcontroler prin intermediul intrărilor analogice AN4, AN5 şi AN6. l un difuzor, conectat la ieşirea OC1 (semnal PWM de la modulul Output Compare al microcontrolerului) prin intermediul unui filtru trece-jos (cu frecvenţa de tăiere de ~4kHz) şi al unui amplificator audio. l un display OLED, cu rezoluţie de 128×64 pixeli, care utilizează pinii PMD0-PMD7, PMRD, PMWR, PMCS1 şi PMA0 de pe microcontroler. l o intrare de semnal (2 contacte aurite la baza plăcii) conectată la intrarea analogică AN7 a microcontrolerului, prin intermediul unui amplificator diferenţial şi al unui filtru trece-jos.
În ceea ce priveşte placa de test, aceasta conţine două blocuri funcţionale distincte:
l
Al doilea bloc reprezintă modulul programabil propriu-zis. Acest modul este construit în jurul unui microcontroler PIC24HJ128GP504. Pentru programarea şi depanarea (debugging) acestuia se folosesc pinii PGC1/EMUC1 şi PGD1/ EMUD1, conectaţi la microcontrolerul din modulul de programare. Tot acest microcontroler furnizează şi semnalul de ceas pentru PIC24 şi controlează alimentarea acestuia prin intermediul unui tranzistor PNP.
Din păcate funcţionalitatea acestei plăci de test se limitează la elementele enumerate mai sus. Acest kit de dezvoltare pare să fi fost gândit de la început în ideea de a învăţa utilizatorul să se focalizeze pe testarea şi înţelegerea elementelor integrate pe placă, fără a permite, pe de altă parte, realizarea de aplicaţii generice (gen control / comunicaţii cu dispozitive externe etc). În acest sens, deşi au rămas destule intrări / ieşiri nefolosite pe microcontroler, acestea nu au fost făcute accesibile pe placă şi este practic imposibilă realizarea unor conexiuni direct la pinii procesorului.
O memorie flash serială Microchip 25LC010A este folosită pentru a memora numărul de serie al plăcii precum şi alte informaţii de depanare. Tot pe acest modul se mai găsesc: l două butoane tip switch, S1 şi S2, conectate la portul I/O al microcontrolerului, pinii RC2 şi respectiv RA8.
Programul demonstrativ care însoţeşte kit-ul de dezvoltare a fost gândit pentru a exemplifica funcţionarea şi modul de programare pentru toate elementele disponibile pe placa de test (display, accelerometru, ieşirea audio etc). Cei care doresc pot găsi mai multe detalii în manualul de pe CD dar, chiar şi fără acesta, sunt suficiente câteva minute pentru a parcurge toate opţiunile şi modurile de funcţionare ale acestuia: Ü 31
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü l
l
Imediat după alimentarea plăcii de test, display-ul afişează un ecran informativ, iar difuzorul va reda un mesaj de întâmpinare. La câteva secunde, pe display va apărea ecranul principal al aplicaţiei, împărţit în 4 secţiuni selectabile: Acc. Graph, Ext. Sensor, Orientation şi Games. Selecţia unei opţiuni se face prin înclinarea plăcii, utilizând informaţiile furnizate de accelerometru, iar pentru execuţie este nevoie de apăsarea switch-ului S1. Pentru revenire în meniul principal se apasă S2. Prima opţiune va determina afişarea unui grafic cu semnalele primite de la accelerometru, pentru cele 3 axe x, y şi z. A doua opţiune conduce la afişarea unui grafic cu semnalul de la senzorul extern. Selectarea secţiunii Orientation deschide un ecran mai complex – o simulare de nivelă digitală în care se afişează numeric valorile acceleraţiei pe cele 3 axe, alături de o săgeată ce indică sensul înclinării plăcii. În plus, în difuzor se redă periodic unul din cele trei mesaje: plane, landscape, portrait în funcţie de poziţia plăcii (orizontală, cu latura mare orizontală sau respectiv cu latura mare verticală). Ultima opţiune, Games, permite “jucarea” unuia din cele 2 jocuri disponibile: Bomber Jet sau Snake, ambele fiind în fapt alte demonstraţii ale utilizării accelerometrului, display-ului grafic şi ieşirii audio.
Cum era şi de aşteptat, codul sursă al aplicaţiei demonstrative este destul de complex şi la prima vedere poate da impresia că este dificil de asimilat. La o analiză mai atentă însă se observă grija deosebită avută de cei de la Microchip pentru o bună structurare a codului, dar mai ales pentru comentarea fiecărei linii de cod importante (în limba engleză, desigur), ceea ce facilitează mult parcurgerea şi înţelegerea modului de programare. Pentru a începe partea de programare efectivă, primul pas îl reprezintă instalarea pe calculator a soft-ului necesar. La introducerea CD-ului în unitate, pe ecran va apărea un ecran de instalare, din care trebuie selectat “Install MPLAB Starter Kit for PIC24H MCUs”. Această opţiune lansează executabilul setup.exe aflat în directorul Installer (pe care, de altfel, îl puteţi executa manual dacă nu vă apare ecranul de instalare). Acest executabil va instala suita MPLAB Starter Kit for PIC24H MCUs, care cuprinde: MPLAB IDE (mediul de programare / depanare), MPLAB C30 C Compiler (compilatorul de C, 32
în versiune de evaluare) precum şi codul sursă al programului demo. După terminarea instalării, dacă totul a decurs fără probleme, se poate conecta deja placa la PC prin intermediul cablului USB şi sistemul de operare va recunoaşte automat driver-ul asociat. Pe desktop-ul PC-ului puteţi găsi o nouă iconiţă, denumită MPLAB Starter Kit for PIC24H MCUs, care va deschide aplicaţia MPLAB IDE împreună cu proiectul asociat programului de demo. Tot ce trebuie făcut în acest moment pentru a descărca aplicaţia în microcontroler ar fi compilarea proiectului (butonul Build all) urmată de download-ul în memoria microcontrolerului (butonul Program). Ajuns în acest punct, personal am întâmpinat o mică problemă legată de compilatorul C30 inclus în kit-ul
de instalare de pe CD – la câteva secunde după începerea procesului de compilare apărea o curioasă eroare de licenţă şi procesul se oprea. Am repetat instalarea pe mai multe calculatoare şi sisteme de operare (XP, Win7), dar eroarea apărea în acelaşi loc de fiecare dată. O căutare ulterioară pe Internet a rezultat în găsirea soluţiei: înlocuirea versiunii compilatorului C30 inclusă pe CD cu o altă versiune, compatibilă, care se poate descărca de pe Internet (atenţie totuşi la seriozitatea site urilor respective şi la versiunile piratate!). Pe de altă parte nu exclud posibilitatea ca în versiuni ulterioare ale acestui kit (kit-ul avut de mine la dispoziţie fiind chiar versiunea 1.0), Microchip să fi remediat
această problemă, deci dacă nu întâmpinaţi probleme la compilare, nu e nevoie să mai descărcaţi alt software. De la adresa http://mplab-c-for-dspic-dscs-andpic24-mcus.software.informer.com/download/ se poate descărca o versiune compatibilă (mplabc30-v3_31-windows-installer.exe). La instalarea acestuia, specificaţi aceeaşi cale unde se instalase în prealabil versiunea nefuncţională (de ex. în C:\Microchip Starter Kits\PIC24H Starter Kit 1\MPLAB C30), apoi alegeţi să instalaţi versiunea de evaluare (din cele 3 opţiuni) – desigur, în afara cazului în care dispuneţi de o serie de licenţă validă pentru versiunea completă! Odată instalată această nouă versiune, compilarea programului demo ar trebui să decurgă fără erori.
Pentru programarea microcontrolerului este necesară conectarea plăcii de test la PC, prin intermediul cablului USB, apoi în MPLAB IDE, în meniul principal - la submeniul Programmer trebuie selectat Starter Kits. Dacă totul e ok, în consola IDE-ului va apărea mesajul “Starter Kit board connected Firmware version:xxxxxxx” şi se va activa butonul Program (şi opţiunea corespunzătoare din submeniul Programmer). Odată selectată această opţiune, programul compilat se va salva în flash-ul microcontrolerului şi va porni automat. Tocmai aţi compilat, programat şi lansat în execuţie primul program pentru MPLAB Starter Kit for PIC24H! n
SIM3U1XX-B-DK
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Aplicație interactivă cu placa de dezvoltare de la Silicon Labs Precision32 SiM3U1xx-B-DK Creșterea nevoilor pentru viteze de procesare din ce în ce mai mari a condus la creșterea popularității microcontrolerelor pe 32 de biți. Pentru a putea face cea mai bună alegere când veți avea de achiziționat un astfel de microcontroler, astăzi vom analiza un produs al unei companii mai puțin populare în România decât rivalii săi Atmel și Microchip, și anume Silicon Labs. Autor: Luca Vasile Răzvan luca.vasile.razvan@gmail.com
Silicon Labs oferă cel mai complet catalog de microcontrolere pe 32 de biți cu consum de energie foarte redus. Familia Precision32 oferă o arhitectură extrem de flexibilă, cu un set de periferice generos și un consum extrem de redus de energie. Placa de dezvoltare Precision32 SiM3U1xxB-DK vine cu tot ce este necesar pentru a evalua hardware și de a dezvolta cod pentru un astfel de microcontroler. Pachetul conține un adaptor pentru depanare prin USB, un cablu mini-USB de alimentare, instrucțiuni de instalare și configurare, și placa de dezvoltare în sine. Pachetul Precision32 Development Suite se poate descărca gratuit de pe site-ul Silicon Labs și conține Precision32 IDE, Precision32 AppBuilder și Si32 SDK. Aceasta din urma este o librărie de funcții formată din module
Figura 1: Cutia în care se găsește placa de dezvoltare
flexibile, scalabile și portabile care fac legătura cu partea hardware oferind utilizatorului funcții simple cu ajutorul cărora se pot realiza sarcini complicate. Precision32 IDE este un mediu complet de dezvoltare bazat pe Eclipse. Precision32 AppBuilder este un program inovativ care permite prin intermediul interfețelor grafice, prototiparea rapidă a aplicațiilor. Ü
Figura 3: Dispozitiv de programare și depanare
Figura 2: Conţinut (placa de dezvoltare, cablul de alimentare al plăcii de dezvoltare, cablul și dispozitivul de programare, instrucțiuni de utilizare)
Figura 4: Cablul de alimentare
Figura 5: Cablul USB
33
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
Ü
Astfel, utilizatorul poate activa periferice, seta proprietăți, configura pinii, frecvența și modurile de lucru, totul fără a scrie nicio linie de cod, acestea generându-se în mod auto-
mat. Placa de dezvoltare conține elemente de interacțiune cu utilizatorul și anume, două butoane programabile, două LED-uri, un potențiometru și un touch capacitiv.
Pentru început, să încercăm să rulăm câteva aplicații gata făcute de către Silicon Labs. Pentru acest lucru descărcați și instalați Precision32 Development Suite, și deschideți Precision32 IDE. În partea din stânga jos a ecranului dați click pe Import SI32 SDK example(s).
Figura 6: Precision32 IDE – Quickstart Panel
Figura 7: Conectarea plăcii de dezvoltare la laptop
În fereastra apărută deschideți sim3u1xx și veți vedea toate aplicațiile pe care le puteți testa. Dacă dați click pe butonul View Readme… găsiți o descriere detaliată a fiecărei aplicații. Pentru început bifați Blinky și apăsați Finish. După import, în zona Project Explorer a apărut aplicația. Dați click pe aceasta și apăsați în Quickstart Panel, Build ‘sim3u1xx_Blinky’ [Debug]. Următorul pas este conectarea plăcii de dezvoltare la calculator. Conectați cablurile la 2 porturi USB ca în imaginea alăturată (sus). Conectaţi placa de dezvoltare acționând butonul PWR USB; la o conectare corectă se va aprinde un LED albastru ca în imaginea alăturată ( jos). Pentru a rula aplicația apăsați Debug ‘sim3u1xx_Blinky’ [Debug]. După ce fișierele necesare au fost încărcate, zona de depanare din dreapta sus se va debloca și veți putea apăsa butonul Resume pentru a rula.
Figura 9: Interfața de depanare (debugging)
Figura 8: Placa de dezvoltare s-a conectat. LED-ul albastru este aprins.
34
Aveţi grijă ca butonul User Control al plăcii de dezvoltare să fie On pentru a putea interacționa cu aceasta. În acest moment ar trebui ca un LED să fie stins, iar celălalt să fie aprins și să le puteți controla cu ajutorul celor două butoane. Apăsați butonul Terminate din zona de debugging pentru a opri rularea aplicației.
SIM3U1XX-B-DK
Vă puteți uita pe codul aplicației deschizând fișierele din Project Explorer. Repetați aceiași pași pentru mai multe aplicații. Propun să încercați cel puțin CAPSENSE, RTC, SARADC și USBHID. CAPSENSE și USBHID sunt două aplicații care folosesc touch-ul capacitiv, RTC folosește capacitatea plăcii de dezvoltare de a ține evidența timpului, iar SARADC exemplifică potențiometrul. Folosind cunoștințele dobândite până acum și urmărind codul aplicaților pentru a înțelege cum funcționează acestea, vom încerca în continuare ceva mai avansat și anume să creăm o aplicație interactivă. Ne vom folosi de toate elementele de control ale plăcii pentru a crea un joc de memorie care va funcționa în felul următor: l După aprindere, reset sau restart, în urma pierderii jocului, se vor aprinde cele două LED-uri timp de o secundă pentru a semnala începerea unui nou joc; l Se va genera o secvență de LED-uri random pe care utilizatorul va trebui să o reproducă apăsând pe butoane. Se va începe de la un singur LED random și cu fiecare secvență pe care jucătorul o introduce corect se va adăuga încă un LED random la secvența anterioară; l Timpul în care LED-urile vor fi aprinse / stinse va fi setat de către utilizator prin acționarea potențiometrului; l La atingerea touch-ului capacitiv, jocul se va întrerupe, iar cele două LED-uri se vor aprinde și stinge intermitent cu o frecvență dependentă de poziția punctului de contact. La încetarea contactului, jocul se va restarta; l Pe toată perioada jocului, utilizatorului i se vor trimite mesaje prin serial pe care acesta le va vedea în consolă. Aceste mesaje trebuie să poată fi dezactivate ușor deoarece în cazul deconectării cablului de debugging sau după acționarea butonului de reset conexiunea serială va fi deconectată, iar jocul se va bloca pe acele instrucțiuni. Pentru a realiza aceste lucruri am avea nevoie să utilizăm documentația pe care o găsim în fișierul si32Hal.pdf care se află în directorul Documentation din Si32 SDK. După cum se poate observa, documentația este foarte vastă și din acest motiv consider că este mai ușor să ne folosim de cod din aplicațiile încercate mai devreme în care se utilizează și programează diferite periferice ale microcontrolerului / plăcii de dezvoltare. Astfel, ceea ce vom face este să pornim de la o aplicație, și anume Blinky, căreia îi vom copia cod din două alte aplicații, CAPSENSE respectiv SARADC
Electronica Azi HOBBY • Septembrie, 2014 • Nr. 4
pentru a putea lucra cu toate perifericele și în final vom implementa algoritmul jocului nostru. Atunci când importăm o aplicație exemplu pe care dorim să o modificăm este bine să bifăm opțiunea “Copy projects into workspace” pentru a nu modifica exemplele în cazul în care vom avea nevoie de ele din nou mai târziu. În concluzie, placa de dezvoltare Precision32 SiM3U1xx-B-DK este foarte capabilă putând fi utilizată pentru multe aplicații cum ar fi
automatizări casnice sau industriale, controlul motoarelor, comunicații radio, scanner de coduri de bare, dispozitive medicale și nu numai. Microcontrolerele pe 32 de biți, datorită performanțelor superioare reprezintă viitorul și din acest motiv este bine să cunoaștem cât mai bine oferta pentru a putea lua cea mai bună decizie. Silicon Labs demonstrează că este un candidat serios în această piață dinamică și în continuă căutare a inovației n
Primul pas este să copiem fișierele gCAPSENSE0.c și gCAPSENSE0.h din sim3u1xx_CAPSENSE/src/generated în sim3u1xx_Blinky/src/generated. Același lucru trebuie făcut cu gSARADC0.c și gSARADC0.h din sim3u1xx_SARADC/src/generated. De asemenea, mai trebuie copiate și fişierele myCAPSENSE0.h, myCAPSENSE0.c din sim3u1xx_CAPSENSE/src și mySARADC0.h și mySARADC0.c din sim3u1xx_SARADC/src în sim3u1xx_Blinky/src. Mai este necesar să adăugăm un fișier din librărie. Pentru acest lucru căutați în sim3u1xx_Blinky/src/sim3u1xx fișierul SI32_SARADC_A_Type.c, click dreapta pe el și accesați Resource configuration -> Exclude from build. În fereastra care vă apare deselectați tot și confirmați cu OK. În acest moment avem toate fișierele la locul lor, dar pentru a inițializa și utiliza perifericele avem nevoie de câteva mici modificări. În fișierul sim3u1xx_Blinky/src/generated/gPB.c trebuie adăugate la începutul funcției gPB_enter_default_config() următoarele două linii pentru inițializarea ADC: SI32_PBSTD_A_set_pins_analog(SI32_PBSTD_1, 0x00000020); SI32_PBSTD_A_write_pins_low(SI32_PBSTD_2, 0x00001000); Tot în cadrul aceleiași funcții trebuie adăugate la sfârșit următoarele două linii pentru a inițializa touch-ul capacitiv: SI32_PBSTD_A_set_pins_analog(SI32_PBSTD_0, 0x0000001E); SI32_PBSTD_A_set_pins_analog(SI32_PBSTD_1, 0x00000180); În fișierul sim3u1xx_Blinky/src/generated/gModes.c trebuie adăugat după linia #include "gModes.h" o linie #include "gCAPSENSE0.h" și după linia #include "gRtc0.h" o linie #include "gSARADC0.h". Tot în același fișier trebuie adăugat la sfârșitul funcției gModes_enter_my_default_mode() următoarele două linii: gSARADC0_enter_time_sequence_convert_config(); gCAPSENSE0_enter_default_config(); De asemenea, mai trebuie adăugată linia următoare la începutul funcției gModes_enter_my_off_mode(): gCAPSENSE0_enter_off_config(); În fișierul, sim3u1xx_Blinky/src/myCAPSENSE0.c trebuie comentate liniile 59, 135 și funcția my_scan_complete_handler(). În fișierul, sim3u1xx_Blinky/src /mySARADC0.c trebuie comentate liniile 80, 99, 106, 109 și zona 121-130. De asemenea, în același fișier, dar și în sim3u1xx_Blinky/src/mySARADC0.h trebuie modificat tipul funcției mySARADC0_run_my_time_sequence_convert_mode() din void în uint32_t și trebuie adăugat la sfârșitul acesteia linia: return pot_measure; Tot în același fișier, de pe liniile 82 și 83 trebuie șterse variabilele adc_output1 și vdd_measure (inclusiv virgula dinaintea lor). În acest moment a mai rămas doar fișierul sim3u1xx_Blinky/src/main.c care a fost modificat aproape în întregime și pe care îl veți regăsi, complet în site-ul revistei “Electronica Azi” sau, la cerere, la redacţia revistei (office@electronica-azi.ro). Am scris comentarii la fiecare linie mai importantă pentru a fi ușor de înțeles. Nu este cea mai bună implementare posibilă a algoritmului jocului, dar am dorit să fie cât mai ușor de înțeles. Experimentați singuri optimizând codul, adăugând periferice și funcționalități noi!
35