APRILIE, 2015 NR. 2 VOL. 3 PREţ: 10 LEI
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Sumar
DESIGN HOBBY
4 Bare Conductive Intersecţie între proiectare, tehnologie şi ştiinţa materialelor În cadrul Bare Conductive au fost proiectate şi fabricate o gamă de tehnologii ce permit conectarea electrică a oricăror suprafeţe, obiecte sau spaţii la lumea digitală. Aceste tehnologii sunt prezentate la ora actuală sub forma unor produse şi proiecte cu parteneri industriali. Produsele se încadrează în trei categorii: materiale, hardware şi kit-uri. Vopseaua electrică este o vopsea conductivă electric ce face posibilă desenarea unui circuit, lipirea la rece a unor componente sau transformarea oricărei suprafeţe într-un senzor. Touch Board (placa tactilă) este un dispozitiv hardware ce poate transforma informaţia de la senzorii realizaţi cu Vopseaua Electrică în sunet, lumină sau date în cloud. Gama de kit-uri oferite doreşte să prezinte proiecte actuale şi de viitor către utilizatori, indiferent de nivelul lor de experienţă.
12 Automatizare casnică cu Raspberry Pi şi un ecran tactil Memorarea comutatoarelor care controlează iluminarea pentru fiecare sursă de lumină din casă poate fi dificilă uneori, în special atunci când sunt implicate comutatoare cu 3 căi sau sisteme mai complicate. Combinând această complexitate cu versatilitatea uimitoare a sistemelor de automatizare casnică, se poate observa că simplele comutatoare încep să limiteze potenţialul de control total al mediului de iluminare.
14 Transmiterea informațiilor la distanță cu ajutorul unui robot controlat radio Principalul scop al acestui proiect este prezentarea unei modalități de transmitere a unor informații importante, atât analogice cât și digitale, cu ajutorul unui robot explorator, care folosește o electronică complexă și un set de senzori pentru a servi acest scop
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
Sau online de la: O’BOYLE - Timişoara Tel. +40 256-201346 office@oboyle.ro www.oboyle.ro
18 Detector de fază non-contact UNI-T 18 Tahometru digital UT372, conexiune USB
Câştigaţi cu Electronica Azi Hobby 19 Termometru cu infraroşu UNI-T UT305C 20 Transmitere de energie wireless şi monitorizare în timp real Proiectul realizat de noi, este un exemplu de monitorizare a curentului electric transmis wireless prin intermediul a două bobine. Proiectul a fost realizat în laboratorul InGear din cadrul şcolii de electronică aplicată EAP.
26 Tester de baterii şi acumulatori Testerul de baterii şi acumulatori este un dispozitiv ce poate descărca o baterie sau un acumulator cu un curent ce poate fi setat în mod automat printr-o interfaţă prietenoasă şi poate salva toate datele într-un fişier Excel.
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:
2015© Toate drepturile rezervate.
office@electronica-azi.ro www.electronica-azi.ro
EURO STANDARD PRESS 2000 srl Tel.: +40 (0) 31 8059955 Mobil: 0722 707-254 office@esp2000.ro www.esp2000.ro
Preţul revistei este de 10 Lei. Preţul unui abonament pe 1 an este de 60 Lei.
O parte din articolele prezentate în această ediţie au fost realizate de către tinerii pasionaţi din cadrul laboratoarelor:
CUI: RO3998003 J03/1371/1993 Tiparul executat la Tipografia Everest
2
ROBOLAB - wonderbots.cs.pub.ro
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: 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 Dumitru-Cristian Trancă dumitru.tranca@cti.pub.ro Daniel Ghiţă - daneelg@yahoo.com Mihaela Sârbu - mihaela.sarbu@compec.ro Vlad Niculescu - vlad.niculescu@cetti.ro Cătălina Platon - platoncatalina93@yahoo.com Adela Istrate - istrate.adela@gmail.com Iulian Mateşică - iulian.matesica@gmail.com Iulian Calciu - iuliancalciu@gmail.com
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Bare Conductive intersecţie între proiectare, tehnologie şi ştiinţa materialelor În cadrul Bare Conductive au fost proiectate şi fabricate o gamă de tehnologii ce permit conectarea electrică a oricăror suprafeţe, obiecte sau spaţii la lumea digitală. Aceste tehnologii sunt prezentate la ora actuală sub forma unor produse şi proiecte cu parteneri industriali. Produsele se încadrează în trei categorii: materiale, hardware şi kit-uri. Vopseaua electrică este o vopsea conductivă electric ce face posibilă desenarea unui circuit, lipirea la rece a unor componente sau transformarea oricărei suprafeţe într-un senzor. Touch Board (placa tactilă) este un dispozitiv hardware ce poate transforma informaţia de la senzorii realizaţi cu Vopseaua Electrică în sunet, lumină sau date în cloud. Gama de kit-uri oferite doreşte să prezinte proiecte actuale şi de viitor către utilizatori, indiferent de nivelul lor de experienţă. NOU: VOPSEA CONDUCTIVĂ ELECTRIC Ideală pentru numeroase utilizări, de la proiecte creative până la proiecte tehnice. Vopseaua conductivă se poate folosi pe post de conductor lichid sau chiar ca adeziv conductor, nemaifiind nevoie de aparate de lipit. ● Status RoHS Conform ● Nr. stoc RS 835-2699 / Cod de producător SKU-0001 (10 ml) ● Nr. stoc RS 835-2693 / Cod de producător SKU-0209 (50 ml)
Caracteristici ● Conductor electric ● Se poate folosi pe mai multe materiale, cum ar fi hârtie, plastic,
ţesătură şi componente electronice convenţionale ● Nu este toxică, nu conţine solvenţi şi este solubilă în apă ● Se usucă la aer ● Funcţionează cu surse de
alimentare cu c.c. de joasă tensiune ● Schimbă interfaţa microcontrolerului într-un mod unic ● Se poate folosi ca potenţiometru Exemple de aplicaţii ce utilizează vopseaua conductivă Utilizarea unui creion cu Vopsea Electrică pentru a crea un circuit pe aproape orice suprafaţă. Strângând uşor tubul de vopsea, se va dispersa un strat subţire de material. După ce se lasă să se usuce timp de 15 minute se poate începe testarea. Ceea ce creaţi nu trebuie neapărat să arate ca o schemă de circuit. Vopseaua Electrică poate crea circuite care să aibă un mesaj electric, dar şi unul vizual.
4
BARE CONDUCTIVE Vopseaua Electrică este perfectă pentru a realiza lipirea unor conexiuni sau pentru reparaţii într-o varietate mare de scenarii unice. Fie că ataşaţi o componentă through hole (THT) pe un circuit imprimat PCB, fie că înlocuiţi ciocanele de lipit în mediul educaţional sau ataşaţi o componentă la un suport sensibil la temperatură, Vopseaua Electrică lucrează ca un adeziv conductiv eficient. E-textile prezintă aplicaţii minunate pentru Vopseaua Electrică. Tubul de vopsea de tip creion poate fi utilizat pentru a realiza terminale electrice şi a le conecta la un microcontroler. Vopseaua electrică poate fi utilizată pentru a trasa un circuit pe un material textil. Vopseaua lucrează bine pe orice material natural sau sintetic, dar nu poate fi spălat. Care este cel mai bun lucru legat de Vopseaua Electrică? Lucrează aproape peste tot. Deoarece Vopseaua Electrică este cu adevărat vopsea, ea se poate utiliza pe o gamă de substraturi, inclusiv hârtie, carton, lemn, fibră de sticlă, majoritatea plasticelor şi textile. Aplicată pe o suprafaţă cu o pensulă, un şablon sau chiar şi cu un spray, transpune proiectul acolo unde se doreşte. Vopseaua Electrică este perfectă pentru repararea micilor întreruperi în circuitele electrice ale dezaburitoarelor de geamuri, comutatoarelor cu membrană şi PCB-urilor. Natura vâscoasă a materialului îl face uşor de aplicat şi manipulat. El are proprietăţi adezive, lipindu-se de suprafaţă şi oferind o reparaţie de durată. Aveţi grijă să izolaţi orice reparaţie de umezeala în exces şi dispozitivul dvs. va fi rapid gata de funcţionare. Dacă se doreşte realizarea unor experimente de creare a unui potenţiometru sau reglarea unei rezistenţe într-un circuit? Rezistenţa unui circuit este direct controlată de aplicarea vopselei, făcând simplă manipularea şi experimentarea. Dacă se doreşte, pot fi utilizate informaţii privind aplicaţiile Vopselei Electrice.
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Utilizarea Vopselei Electrice la realizarea unui senzor capacitiv pe aproape orice suprafaţă. Experimentaţi sensibilitatea tactilă şi detecţia de proximitate la mai multe nivele. Se poate utiliza Touch Board (Placa Tactilă), o placă Arduino sau alt microcontroler potrivit pentru a descoperi magia interacţiunii cu aproape orice obiect. Vopseaua Electrică nu este toxică şi este uşor de utilizat în mediul educaţional. Profesorii pot demonstra funcţionarea unor circuite de bază, iar elevilor şi studenţilor le place să-şi aducă la viaţă desenele. Kit-urile Bare Conductive pentru mediul educaţional vă permit să inventaţi propriile lecţii utilizând ca ghid tutorialele cu privire la Vopseaua Electrică. Placă tactilă (Touch Board) ● Status RoHS Conform ● Nr. stoc RS 837-1729 ● Cod de producător SKU-5006
Placa tactilă (Touch Board) este o platformă uşor de utilizat pentru o gamă uriaşă de proiecte. Combinând Placa Tactilă cu Vopseaua conductivă Bare (835-2699) puteţi transforma aproape orice material sau suprafaţă într-un senzor capacitiv sau de proximitate. Puteţi picta un comutator pe perete, să faceţi un pian din hârtie, să creaţi o suprafaţă interactivă particularizată sau să declanşaţi sunete dintr-un MP3 player integrat pe placă. Numărul proiectelor ce pot fi activate tactil obţinute prin combinarea dintre Placa tactilă şi Vopseaua electrică este limitat doar de imaginaţie. Placa tactilă (Touch Board) este o placă compatibilă cu Shield-urile Arduino, ce dispune de funcţii suplimentare precum interfaţă tactilă/proximitate pe 12 canale şi un MP3 player. Ea apare a fi un Arduino Leonardo din punct de vedere al mediului de programare Arduino IDE. Printre caracteristicile principale pot fi menţionate (selectiv): ● Microcontroler ATMega32u4 16MHz ● Memorie flash 32KB, 2,5KB SRAM, 1KB EEPROM ● MPR121 - interfaţă tactilă pe 12 canale ● VS1053B – CODEC audio multi-format ● Maximum 20 pini GPIO, 7 canale PWM, 12 canale de intrare analogice, 12 electrozi tactili din care 8 pot fi configuraţi ca extra GPIO cu capabilitate PWM Ü 5
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Ü ● Alimentare +5Vdc (prin USB sau baterie) ● Soclu de card microSD, jack de ieşire audio, conector microUSB,
conector pentru alimentare din exterior, ● Dimensiuni: 84 mm × 62 mm × 10 mm
Mai multe informaţii la: www.bareconductive.com/make/introducing-the-touch-board/
MP3/MIDI şi multe altele Un Arduino care cântă! Placa Tactilă (Touch Board) poate rula fişiere MP3 de pe un card microSD card, poate lucra ca un sintetizator MIDI şi chiar poate trimite informaţie MIDI către un alt dispozitiv precum un laptop sau un iPad. Este suficientă conectarea unui difuzor la jack-ul audio de 3,5 mm şi se poate începe!
Aplicativitate – Placa tactilă este o unealtă ce face ca proiectul dvs. să fie interactiv, să răspundă, să fie inteligent sau pur şi simplu distractiv. Placa tactilă este proiectată ca platformă uşor de utilizat pentru o gamă uriaşă de proiecte. Placa tactilă poate fi utilizată pentru a schimba lumea din jur, transformând aproape orice material sau suprafaţă într-un senzor. Astfel puteţi desena un întrerupător de lumină pe perete, puteţi realiza un pian din hârtie sau puteţi crea o suprafaţă interactivă particularizată.
Puteţi conecta orice este conductiv la unul dintre cei 12 electrozi şi puteţi declanşa un sunet prin MP3 player-ul integrat pe placă, puteţi declanşa o notă MIDI sau puteţi face orice altceva ce puteaţi face cu un dispozitiv Arduino sau compatibil cu acesta. Pre-programat S-a dorit ca Placa Tactilă (Touch Board) să fie uşor de utilizat pentru oricine, astfel încât ea este distribuită având pre-programat un ghid audio. Nu a fost niciodată mai uşor de pornit la realizarea unui produs bazat pe Arduino.
Detecţie tactilă şi de distanţă Orice material conductiv poate fi transformat într-un buton sau senzor de distanţă. Prin utilizarea Vopselei Electrice se poate desena un buton pe o carte interactivă, se poate realiza un senzor de proximitate cu o papiotă conductoare sau puteţi transforma peretele unei camere într-o hartă interactivă! 6
Arduino Leonardo Placa Tactilă (Touch Board) este precum un Arduino Leonardo super-încărcat. Se programează exact ca un Arduino, se poate utiliza programul sau programele existente, precum şi plăcile de extensie preferate, dar suplimentar se poate beneficia şi de bibliotecile extinse şi suportul Bare Conductive. Alimentare de la baterii
Placa Tactilă a fost dezvoltată cu un încărcător de baterii LiPo. Este suficient să conectaţi bateria dvs. LiPo, puneţi proiectul într-o cutie şi încărcaţi bateria prin USB. LED-urile de pe placă indică starea încărcării, iar switch-ul ON/OFF de pe placă însemnă că nu veţi consuma bateria atunci când luaţi o pauză. Autor: Bogdan Grămescu Aurocon COMPEC SRL www.compec.ro
NEWS
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Cafeneaua de ştiinţă Pentru a susţine pregătirea tinerilor talentaţi din licee în domeniul ştiinţific şi pentru atragerea acestora în cadrul institutelor naţionale de cercetare-dezvoltare, Institutul Naţional de Cercetare-Dezvoltare pentru Inginerie Electrică ICPE-CA a înfiinţat Centrul de Excelenţă pentru Iniţierea Tinerilor în Cercetarea Ştiinţifică. În acest context, Centrul a participat recent la o emisiune dedicată ştiinţei, Cafeneaua de ştiinţă, desfăşurată în incinta Librăriei Humanitas, Cişmigiu. Alături de coordonatorul Centrului, ICPE-CA, şi patru dintre echipele acestuia, E-commerce platform (Cristian Dragomir, Alexandru Glontaru) şi Harvesting Cube (Andrei Corbeanu, Luca Florescu) de la Colegiul Naţional de Informatică Tudor Vianu, Medical Rehabilitation Monitoring (Ana Maria Tudorache, Miruna Ojoga) şi Magnetic Bacteria (Elena Yuan, Sebastian Curpan) de la Liceul Internaţional de Informatică, au mai participat şi Corina Dobrescu, profesor la Colegiul Tudor Vianu şi profesor Mustafa Oz, directorul Liceului Internaţional de Informatică. În afară de pasiunea pentru ştiinţă, cele patru echipe au punctat şi aspecte din activitatea specifică de cercetare, anume: identificarea optimă a unui produs prin soft adaptat la nivelul celularelor, microsenzori destinaţi procedurilor de reabilitare medicală a membrului superior, studii referitoare la bacterii magnetice şi aplicaţii pentru microroboţi elementari micromecano-magnetici, demonstrator de energie regenerabilă din mediul înconjurător. Dintre rezultatele Centrului din acest an, amintim calificarea a două echipe de elevi în finala Olimpiadei INTELL, ce va avea loc în luna mai, la Pittsburg, SUA. Biroul de Presă ICPE-CA Institutul National de Cercetare Dezvoltare pentru Inginerie Electrică ICPE-CA Splaiul Unirii, Nr. 313, Sector 3, 030138, Bucureşti România Tel: +40-21-346.72.31; +40-21-346.72.35; +40-21-346.82.97; Fax: +40-21-346.82.99 E-mail: office@icpe-ca.ro; marketing@icpe-ca.ro 7
VERTEX 3D PRINTER Acum, la Conex Electronic!
Printing Print technology: Fused Filament Fabrication (FFF) Layer resolution: standard: 0.1 mm (max.: 0.2 mm - min.: 0.05 mm) Build plate: 215 × 240 mm (8.46" × 9.45") Build volume: 180× 200 × 190 mm (7" × 7.8" × 7.5") Print speed: 30 mm/s - 120 mm/s Travel speed: 30 mm/s - 300 mm/s Build plate surface: Removable layer of BuildTak™ (consumable; also sold separately) Filament diameter: 1.75 mm (accepts all filament spools with a mounting hole = 53 mm). Open filament policy. Prints: PLA, ABS Testing with other materials in progress. Nozzle 1&2 diameter: 0.35mm One nozzle supplied. Second nozzle optional.
Distance between nozzles: 23.7 mm Maximum nozzle operating temperature: 270 °C Software Firmware: Modified Open Source Marlin 3D Printer Firmware - user upgradable Software: Repetier - CuraEngine - Slic3r (RepRap compatible) Hardware Dimensions: X Y Z 360 - 380 - 395 mm (14" × 15" × 15.5") (without filament spools) Frame: Polycarbonate panels and fibre reinforced molded ABS parts Electrical Communication: USB 2.0 or SD card Controller board: AVR ATmega2560 based Dual head and heated bed capable Display: 4 x 20 char. blue LCD with white backlight AC input: 100 - 240 VAC 50-60Hz 150W max.
Conex Electronic s.r.l. Tel.: 021 242.22.06 I Fax: 021 242.09.79 I office@conexelectronic.ro I www.conexelectronic.ro
8
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
O echipă românească în finala competiţiei mondiale de microrobotică O echipă de tineri cercetători și studenţi s-a calificat în finala prestigiosului concurs internaţional de microrobotică ICRA MMC care se va desfășura în luna mai 2015 la Seattle. Competiţia este dedicată roboticii de precizie la scară micrometrică și reunește universităţi și centre de cercetare din întreaga lume.
Echipa de cercetare în micromecatronică a Universității Valahia din Târgoviște, Institut ICSTM.
Târgoviște, 31.03.2015 O echipă de tineri din cadrul Universității din Târgoviște s-a calificat, în premieră pentru România, la concursul ICRA 2015 Mobile Microrobotics Challenge, alături de alte 8 universități de renume din: SUA, Canada, Elveția, Franța, Italia și India. Concursul are loc în perioada 26-30 mai 2015, la Washington State Convention Center din Seattle, USA și este organizat în cadrul celui mai important eveniment anual din domeniul roboticii și automaticii: ICRA 2015 (International Conference Robotics and Automation). Manifestarea se desfășoară sub egida institutului IEEE (Institute of Electrical and Electronics Engineers) și a Societății de Micro și Nanorobotică RAS-MNRA. Obiectivele acestui concurs de microrobotică constau în dezvoltarea de soluţii inovative la scară mică, dedicate viitoarelor aplicaţii biomedicale (manipulare şi sortare de celule, chirurgie minim invazivă) şi microtehnologiilor (asamblarea de structuri la scară nanometrică şi micrometrică). 10
Florin Dragomir, beneficiar al unui grant postdoctoral de cercetare cu finanțare de la UEFISCDI: “Aplicația cu care echipa noastă concurează constă într-un sistem microrobotic ce a fost construit și pilotat automat în câmp magnetic. Microrobotul propriu-zis are dimensiunea mai mică de un sfert de milimetru și evoluează într-o arenă de numai 2 × 3 milimetri. Prima probă a concursului constă în efectuarea automată de traiectorii precis definite prin repere de 10 micrometri lățime. A doua probă, mai tehnică, constă în asamblarea de obiecte într-un canal microfluidic de 750 micrometri lățime, în scopul de a simula operarea în canale sangvine. Practic, trebuie să transportăm contra cronometru cât mai multe componente micrometrice în acest canal.” Ioan Alexandru Ivan, conferențiar și îndrumător al echipei: “Este un proiect multidisciplinar complex, atinge aspecte din diverse domenii: microtehnologii de sală albă, mecanică de precizie, electronică, teoria sistemelor și programare. Mă bucur că am reușit să trecem peste dificultăți și am obținut un prim sistem funcțional. Munca depusă de întreaga echipă a fost încununată de calificarea noastă în finala competiției mondiale de microrobotică,
NEWS
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
alături de echipe de prestigiu din întreaga lume. Sper să fie cu succes această primă participare românească. Eu am mai fost implicat în acest concurs, la Anchorage și Shanghai, în anii 2010 și 2011, în calitate de coordonator tehnic al echipei franceze, și am obținut locul întâi. Mi-am dorit foarte mult și o participare românească în acest concurs, motiv pentru care am depus cu Florin o propunere de proiect postdoctoral ce a fost finanțată și am adunat o mica echipă pentru realizarea proiectului.”
Dispozitivul microrobotic în arena microfluidică.
Doctorand Valentin Gurgu - stație avansată de micromanipulare. Realizarea se datorează de asemenea participării active a doi studenți: Valentin Gurgu și Nicolae Rădulescu. Doctorandul Valentin Gurgu și studentul în anul al IVlea Nicolae Rădulescu se ocupă activ de partea mecanică și electronică. “Încă mai avem reglaje de efectuat până la momentul competiției. În acest moment optimizăm aplicația, încercăm să reducem în continuare dimensiunile microrobotului și îmbunătățim precizia de poziționare a acestuia. În plus, încercăm și realizarea unei versiuni portabile prin utilizarea a cât mai multe tehnologii de tip open-source.”
Detaliu, sub microscop, cu microrobotul și arena de competiție. Raza cercului este de un milimetru.
Aplicația a fost finanțată parțial de către Unitatea Executivă pentru Finanțarea Învățământului Superior, a Cercetării Dezvoltării și Inovării- UEFISCDI, prin proiectul numărul: PN-II-RU-PD-2012-3-0591: http://micromag.valahia.ro/ Detalii despre concursurile de robotică organizate în cadrul congresului ICRA2015: http://icra2015.org/conference/robot-challenges Pentru detalii suplimentare, vă rugăm să apelaţi persoana de contact a echipei: Florin DRAGOMIR, Tel: +40 (0)763 631868, e-mail: drg_florin@yahoo.com 11
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Automatizare casnică cu Raspberry Pi şi un ecran tactil Memorarea comutatoarelor care controlează iluminarea pentru fiecare sursă de lumină din casă poate fi dificilă uneori, în special atunci când sunt implicate comutatoare cu 3 căi sau sisteme mai complicate. Combinând această complexitate cu versatilitatea uimitoare a sistemelor de automatizare casnică, se poate observa că simplele comutatoare încep să limiteze potenţialul de control total al mediului de iluminare. Autor: Tyler Crumpton, Makers Local 256, Huntsville, AL USA Pentru a lupta cu această complexitate în creştere, am decis că vreau un comutator de lumină “inteligent” care mă poate înştiinţa ce surse de lumină din casă sunt curent pornite şi care să mă lase să aprind sau să sting orice lumină fără să mă întreb unde merge fiecare comutator? El trebuie să fie particularizat pentru casa mea, dar suficient de flexibil pentru a fi util dacă numărul de surse de lumină se schimbă, dacă sunt adăugate becuri, sau dacă altcineva doreşte propriul comutator în propria casă. Nu existau soluţii potrivite necesităţilor mele, la un preţ suficient de redus, astfel încât m-am aplecat asupra computerului meu single-board Raspberry Pi (RPi) pentru a îmi realiza propriul comutator inteligent. Deoarece RPi dispune de porturi USB şi pini de intrare/ieşire de uz general (GPIO), el poate fi utilizat pentru a controla inteligent lumina prin ZWave, Zigbee, sau Wi-Fi utilizând un dongle USB sau pentru a controla câteva indicatoare cu LED-uri pentru depanare şi testare fără a trebui să alergi prin casă pentru a verifica dacă luminile sunt aprinse sau nu. Deoarece a avea un “simulator” de iluminare casnică simplu cu LED-uri ar fi fost extrem de util în dezvoltarea unei aplicaţii de comutator inteligentă, am mers la locul în care pasionaţii de tehnologie îşi împărtăşesc ideile, echipamentele şi cunoştinţele, şi anume Makers Local 256 din Huntsville, AL. Aici am creat o imagine vectorizată a planului casei. Acest plan a fost apoi tăiat cu laser din câteva foi de plastic acrilic pe care le-am lipit după aceea.
LED-urile au fist lipite apoi pe spatele planului din plastic, câte un LED pentru fiecare cameră. Apoi LED-urile au fost legate prin fire la pinii de intrare / ieşire de pe Raspberry Pi. Utilizând un mic script Python, am fost capabil să aprind LED-ul fiecărei camere cu o comandă. Dispunând de un simulator, am început să lucrez la interfaţa cu comutatorul. Am decis că cea mai uşoară şi rapidă cale de a aprinde luminile dintr-o cameră este de a atinge camera dorită de pe planul casei, deoarece ecranele tactile au devenit a doua natură pentru majoritatea dintre noi. Am vrut ca interfaţa la plan să fie disponibilă de pe un computer, telefon inteligent sau chiar de pe un ecran tactil dedicat montat pe un perete în locul în care ar fi fost uzual întrerupătorul.
Simulare completă cu LED-uri
Planul casei, împreună cu un ecran ELI şi Raspberry Pi 12
Utilizând mediul web Tornado Python şi un pic de script Java şi HTML, am scris un mic server web care afişează planul casei şi vă lasă să faceţi click pe fiecare cameră pentru a schimba starea luminii. Camera va străluci atunci când lumina este aprinsă, astfel încât se va putea şti oricând dacă lumina este sau nu aprinsă. Serverul trimite o comandă către simulator de fiecare dată când starea de iluminare se schimbă, astfel încât fiecare atingere pe cameră va ilumina sau nu LED-ul corespunzător de pe simulator. Aplicaţia web a lucrat perfect pe un computer sau pe un telefon inteligent dar necesita încă un înlocuitor pentru vechile comutatoare de pe pereţi. Deoarece Raspberry Pi pe care rulează
RASPBERRY PI serverul web dispune de ieşire HDMI şi un port de rezervă USB, am decis să utilizez un ecran tactil ELI70-CR 7.0” de la Future Designs, Inc. pentru a afişa aplicaţia web.
ELI 7.0” (Easy LCD Interface) ELI, denumire ce vine de la Easy LCD Interface, este o soluţie embedded de ecran tactil LCD pentru utilizare cu un SBC precum RPi. Ecranul nu necesită o configurare suplimentară, decât comutare pe mod portret şi am setat Raspberry Pi să sară direct la planul casei de fiecare dată când porneşte.
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Nu m-am decis încă asupra unei tehnologii wireless pentru controlul iluminării din casă, astfel că următorul pas este acela de a instala controlere de iluminare ZWave, Zigbee, sau Wi-Fi. Există numeroase proiecte pentru ZWave ce au mapare Python, realizarea controlului acestor dispozitive printr-un dongle USB ZWave necesită numai câteva linii de program. Schimbarea planului casei pentru utilizarea în cadrul altei case este simplă precum desenarea planului şi definirea camerelor. Sunt multe opţiuni ce pot fi adăugate, inclusiv controlul strălucirii, controlul culorii Phillips Hue, şi conservarea energiei prin programarea aprinderii şi stingerii luminilor la momente stabilite de timp. În mod global, am fost capabil să creez un controler de iluminare personal pentru casa mea, utilizând numai un Raspberry Pi, ecranul tactil FDI ELI70-CR şi un dongle USB pentru ZWave, Zigbee, sau Wi-Fi. Mi-a luat mai puţin de o zi pentru a face cea mai mare parte din treabă, astfel că extinderea de la proiectul iniţial va fi rapidă şi distractivă, şi cu speranţa că îmi va face casa un pic mai simplu de controlat. Mai multe informaţii: ELI (Easy LCD Interface) from FDI http://www.easylcdinterface.com Makers Local 256 https://256.makerslocal.org/
Raspberry Pi 2 Model B Raspberry Pi - calculator de dimensiunea unui card bancar, ce poate fi utilizat precum un PC obişnuit. Însă, faţă de acesta, Raspberry Pi oferă posibilitatea realizării unor conexiuni hardware directe cu alte dispozitive prin intermediul pinilor de intrare/ieşire de uz general (GPIO). Acestea pot fi senzori de temperatură, lumină sau umiditate, de presiune atmosferica, relee, drivere de motoare, etc. Pinii GPIO sunt aşezaţi în zona din lateralul plăcii şi pot fi controlaţi din orice limbaj de programare care rulează pe acest computer miniatural: Python, C, C+ +, Java, PHP, .NET etc. Raspberry Pi 2 Modelul B – creşterea performanţelor faţă de modelele anterioare. • Procesor de 900MHz quad-core ARM Cortex-A7 • Memorie de 1GB RAM • Nucleul sistemului de operare a fost îmbunătățit pentru a profita pe deplin de cele mai recente tehnologii ARM Cortex-A7; disponibil cu noua versiune 1.4 a software-ului. Aurocon COMPEC vă propune Raspberry Pi - o alegere excelentă pentru proiecte de robotică, servere web, jocuri sau imprimare 3D, conexiuni ftp, staţii meteo, dar şi multe altele. Autor: Mihaela Sârbu Aurocon COMPEC SRL www.compec.ro 13
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Transmiterea informațiilor la distanță cu ajutorul unui robot controlat radio Principalul scop al acestui proiect este prezentarea unei modalități de transmitere a unor informații Autor: Vlad Niculescu Student la Facultatea de Electronică, importante, atât analoTelecomunicații și Tehnologia gice cât și digitale, cu ajuInformației, anul 2 Tel.: 0728813827 torul unui robot explorator, care vlad.niculescu@cetti.ro folosește o electronică complexă și un set de senzori pentru a servi acest scop. Robotul este echipat cu senzori de temperatură, presiune, altitudine, distanță, nivel de tensiune al acumulatorilor, și poate trimite aceste informații în timp real cu ajutorul unor module de comunicație radio digitale (RF). Controlul și gestionarea informațiilor trimise, se vor face cu ajutorul unei aplicații care rulează sub platforma windows. Pentru realizarea conexiunii intermediare între robot și aplicația C#, am realizat o telecomandă, care preia informațiile de la robot și le trimite mai departe către laptop/PC, atâta timp cât distanța telecomandă - robot nu depășește 400m. Atât robotul, cât și telecomanda folosesc câte un transceiver NRF24l01+ pentru a comunica. 1. Elemente de mecanică Șasiul este partea care stă la baza structurii robotului, susținând toată partea electronică, partea de răcire, senzorii și motoarele. Acesta este realizat din sticlo-textolit, practic același material din care sunt făcute plăcile de PCB și prezintă o grosime de 0.8 mm. Am ales acest material deoarece are avantajul unei durități ridicate, iar în același timp e ușor de lucrat cu el, de găurit sau de prins alte plăci pe el. Robotul folosește două motoare marca Pololu care asigură tracțiunea, acestea fiind fixe, virarea facându-se doar cu ajutorul roților din față. Deși prezintă dimensiuni reduse, aceste motoare au performanțe deosebite pentru mărimea lor (23.87 × 9.90 × 11.93 mm) și utilizând un reductor de 100:1, asigură un cuplu maxim de 1.8Kg*cm, alimetate la 6V. Roțile sunt realizate din cauciuc pe suport de plastic, iar modul în care au fost construite le face să se îmbine perfect cu axul motorului (dimensiunile exterioare: 42 × 19 mm). 14
2. Partea de procesare Robotul cuprinde două placi (PCB) realizate de mine cu ajutorul EagleCAD, în care am proiectat atât partea schematică, cât și partea de PCB. Prima placă, este cea pe care se află partea de procesare și de transmisie a informațiilor. Deoarece tensiunea furnizată de acumulatori este mult prea mare pentru alimentarea microcontrolerului, aceasta trebuie coborâtă, altfel ar duce la deteriorarea părții de procesare. Stabilizarea tensiunii la valoarea de 5V se face cu ajutorul circuitului integrat stabilizator în trei puncte, care preia o parte din tensiune pentru a scoate la ieșire 5V. Condensatorul de pe intrare are rolul de filtrare a tensiunii prin eliminarea unor eventuale supratensiuni tranzitorii ce pot apare în urma proceselor de comutaţie. Odată ce tensiunea de pe intrare scade sub 6.7V, stabilizatorul nu mai funcționeaza și controlerul nu mai e alimentat. În schema de mai jos e prezentat microcontrolerul cu cei doi conectori, unul făcând legătura cu modulul radio, nrf24l01+, iar
ROBOT CONTROLAT RADIO
celălalt conector cu driverul motoarelor tractante. Cristalul de cuarț asigură o frecvență constantă de oscilație. Microcontrolerul folosit este ATMEGA 328, o alegere foarte practică, deoarece chiar dacă prezintă un număr redus de pini are multe facilități (printre care 6 intrări analogice și 5 PWM). Tot schema de mai jos permite programarea lui fără nevoia de detașare din soclu. Deși am obținut tensiunea de 5V cu ajutorul lui 7805, aceasta este prea mare pentru alimentarea transceiverelor. În vederea obținerii tensiunii de 3.3V, am realizat un stabilizator tranzistor-zener.
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Majoritatea componentelor au fost luate din librăriile Eagle, cu excepția conectorului pentru NRF24, care a fost configurat de mine. Pentru stabilizatorul de tensiune și tranzistorul NPN, au fost montate mici radiatoare pentru protecție în caz de supraîncălzire. Placa de circuit a fost poziționată deasupra acumulatorilor. A doua placă de pe robot reprezintă partea de comandă a motorului, adică driverul, care este bazat pe circuitul integrat L298. Acesta are rolul de a comanda motorul cu un curent mare, el fiind comandat la rândul său de microcontroler. Ü
15
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Ü
Cele două motoare de tracțiune au fost legate împreună pe una din ieșiri, iar cel de virare, pe cealaltă ieșire. Curentul maxim (pe canal) suportat de driver este de 2A. Pentru asigurarea răcirii, driverul a fost montat pe un radiator de dimensiuni rezonabile. Spre deosebire de placa precedentă, aceasta a fost realizată pe două straturi, datorită creșterii numărului de trasee. Pentru fiecare motor a fost prevăzut câte un condensator de 100n în paralel pe acesta pentru a compensa efectul negativ al periilor. Telecomanda, este a treia placă componentă a proiectului (independentă de robot) și are rolul de a prelua informațiile primite prin cablu de la laptop și de a le trimite către robot cu ajutorul unui al doilea modul NRF24l01+. Aceasta este formată dintr-o altă placă cu ATmega328, peste care am suprapus o placă făcută de mine, ce conține partea de conectare și alimentare a modulului RF. LED-urile au rolul de a semnala funcționarea montajului, iar rolul celorlalte componente au fost discutate anterior. 16
ROBOT CONTROLAT RADIO Modulule: • NRF24L01+ Folosirea acestui modul este cea mai bună soluČ›ie când vine vorba de o astfel de aplicaČ›ie. Este unul din cele mai populare modele datorită raportului performanČ›e-preČ› care ĂŽl caracterizează. Pentru că e atât de folosit, a ajuns să beneficieze Č™i de un suport software vast, iar protocolul lui de comunicaČ›ie este foarte bine pus la punct. • Senzorul barometric Am folosit o placă marca Sparkfun, bazată pe senzorul barometric de presiune BMP085 de la BOSCH. Acesta oferă o măsurare de la 300 la 1100 kPa cu o eroare de 0.03 kPa. Tensiunea de alimentare suportată nu trebuie să depÄƒČ™ească intervalul 1.8-3.6V, iar conectarea se face direct cu microcontrolerul prin I2C. • Senzorul de distanČ›Äƒ Senzorul de distanČ›Äƒ HC-SR04 este un senzor ultrasonic, capabil să măsoare distanČ›e frontale ĂŽntre 2 Ĺ&#x;i 200cm. Microcontrolerul trimite un impuls către senzor, iar apoi acesta emite o undă sonoră. Când senzorul recepČ›ionează că unda s-a ĂŽntors, acesta trimite la rândul lui un impuls la microcontroler. Acesta face diferenČ›a ĂŽntre momentul când a trimis impulsul Č™i momentul când l-a primit Č™i calculează distanČ›a astfel: đ??ˇ=((t2-t1)Ă—340)/2 3. Programarea Č™i algoritmul robotului ĂŽn proiectul de faČ›Äƒ, a fost nevoie de două astfel de programe, unul pentru funcČ›ionarea robotului, iar altul pentru telecomandă. Cele două programe comunică unul cu celălalt radio, cu ajutorul modulelor NRF24l01+.
Cele două sensuri au fost reprezentate pe schemă cu săgeČ›i goale, respective pline. ĂŽn figura de mai sus este arătat modul de circulaČ›ie al informaČ›iei, aceasta având două sensuri: • Sensul direct, când informaČ›ia este trimisă de aplicaČ›ie către telecomandă, iar apoi, preluată de transceiver o trimite mai departe la al doilea transceiver, Č™i ĂŽn final la microcontroler, care ia deciziile ĂŽn controlul motoarelor. Acest lucru este folosit pentru miČ™carea fizică a robotului. • Sensul invers, este sensul ĂŽn care controlerul preia informaČ›ii de la senzori, le prelucrează Č™i le trimite OTA (on the air), pentru a ajunge ĂŽn final spre a fi afiČ™ate pe ecranul laptopului. AplicaČ›ia de control a robotului AplicaČ›ia a fost realizată cu ajutorul Microsoft Visual Studio 2010, folosind limbajul de programare Visual C#. Având o interfaČ›Äƒ foarte intuitivă, VS combină elementele vizuale cu partea de programare,
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
lucru care poate ajuta la realizarea unor aplicaČ›ii foarte complexe. AplicaČ›ia este prima care trimite comenzi, Č™i ultima care recepČ›ionează informaČ›ii, care mai apoi le afiČ™ează. InterfaČ›a arată astfel:
Controlul robotului se face cu ajutorul săgeČ›ilor tastaturii, iar butoanele de miČ™care se aprind odată cu apăsarea unei săgeČ›i pentru a indica utilizatorului că a fost luată comanda. Aceste comenzi sunt de fapt litere transmise serial, care sunt menite să ajungă ĂŽn controlerul robotului pentru a fi interpretate. De exemplu, odată apasată tasta “Upâ€?, aplicaČ›ia trimite litera “Uâ€? pe portul serial (prin USB). Tabelul de interpretare a comenzilor este prezentat ĂŽn continuare: Literă U R D L N B O, val. turaČ›ie
Interpretare Tabelul 1 Mers ĂŽn faČ›Äƒ Mers la dreapta Mers ĂŽn spate Mers la stânga Actualizarea informaČ›iilor Aprinderea luminilor Č™i actualizare Trimite valoarea PWM pentru turaČ›ia motorarelor
Pentru a indica aplicaČ›iei când LED-urile de pe robot sunt aprinse, am introdus un martor luminos (practic un LED virtual) pe interfaČ›Äƒ care semnalează dacă LED-ul este aprins sau nu. Pentru a realiza acest lucru am implementat următorul algoritm: aplicaČ›ia trimite comanda de aprindere a LED-ului, telecomanda o preia Č™i o dă mai departe robotului. Odată ce robotul primeČ™te comanda, aprinde LED-urile Č™i trimite un feedback aplicaČ›iei pentru a Č™ti să aprindă martorul; la fel Č™i pentru stingerea LED-urilor. Am introdus acest algoritm pentru a evita desincronizările (să nu existe cazuri ĂŽn care LED-urile sunt stinse Č™i martorul aprins. O altă problemă importantă a fost primirea Č™i afiČ™area informaČ›iilor ĂŽn interfaČ›Äƒ. Pentru a face aplicaČ›ia să distingă ĂŽntre informaČ›ii Č™i să Č™tie care informaČ›ie unde să o afiČ™eze, am implementat următoarea metodă: Odată ce telecomanda primeČ™te informaČ›ii de la robot, nu te trimite mai departe pur Č™i simplu, ci le prelucrează Č™i trimite comenzi ĂŽn felul următor: "CMD:TE="+val.mărime; AplicaČ›ia va Č™ti că odată ce a primit pe portul serial o informaČ›ie care ĂŽncepe cu “CMDâ€?, trebuie sa sară peste “:â€? Č™i să citească următoarele două litere care fac referinČ›Äƒ la câmpul unde va trebui scrisă informaČ›ia. Valoarea mărimii ĂŽn sine este citită de după egal. Pentru exemplul de mai sus, programul va Č™ti să atribuie valoarea de după egal, câmpului de temperatură. Celelalte indicative se pot observa ĂŽn cod. Pentru a face aplicaČ›ia să recunoască două taste apăsate simultan am iniČ›ializat câte o variabiă pentru fiecare tastă. Când o tastă e apasată, eventul ei incrementează variabila la 1; când e eliberată, un alt event decrementează variabila la 0. Un timer evaluează ĂŽn permanenČ›Äƒ aceste variabile. MenČ›ionez că acest proiect mi-a adus locul 2 la concursul Robochallenge, faza internaČ›ională, 2014. Vă invit să exploraĹŁi Ĺ&#x;i voi soluĹŁia propusă de mine - ĂŽn acest sens, sursele folosite sunt publice la adresa https://github.com/vladniculescu/RF-Robot/ 17
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Detector de fază non-contact UNI-T UT262A/UT262C produs de UNI-T este un instrument care depăşeşte metoda tradiţională de detectare a fazelor. În mod normal, detectarea şi identificarea clasică a fazelor se face conectând trei cleme sau trei sonde la cei trei conductori neizolaţi, aflaţi sub tensiune, fiind necesară deconectarea de la reţea. UT262A/UT262C foloseşte metoda măsurării fără contact, fără să fie nevoie de deconectarea conductorilor de la reţea sau atingerea sub tensiune a unor conductori neizolaţi. Cele trei cleme ale instrumentului se conectează la firele izolate aflate sub tensiune, iar identificarea fazei se poate face prin intermediul semnalelor acustice şi luminoase. UT262A/UT262C are şi funcţia de examinare a conductorilor aflaţi sub tensiune, inspectarea alimentării, detectarea deficienţelor de fază, evidenţierea întreruperilor, poziţionarea întreruperilor. Dispozitivul UNI-T îmbunătăţeşte securitatea testelor de câmp, asigură siguranţa operatorului şi creşterea productivităţii.
Specificaţii: • Succesiunea fazelor • [Faza pozitivă] indicată prin aprinderea succesivă în sensul acelor de ceasornic a LED-urilor care indică cele patru faze precum şi printr-un sunet întrerupt • [Faza negativă] indicată prin aprinderea succesivă în sensul invers acelor de ceasornic a LED-urilor care indică cele patru faze precum şi printr-un sunet continuu • Detectarea fazei lipsă: R-S sau S-T lumină stinsă • Detectare circuit sub tensiune: R-S sau S-T lumină aprinsă • Detectare întrerupere circuit: R-S sau S-T lumină stinsă • Detectare tensiune: R-S sau S-T lumină aprinsă • Domeniu tensiune AC: 70V ~ 600V • Domeniu frecvenţe: 40Hz ~ 70Hz • Deschidere fălci: ø 1.6~16mm UT262A / ø10 ~ ø40mm (UT262C) • Indicator cu buzzer Tel.: 0256-201346 • Rating securitate: CAT: 600V office@oboyle.ro • Certificare: EN:61010-1 www.oboyle.ro
Tahometru digital UT372, conexiune USB
Tel.: 0256-201346 office@oboyle.ro www.oboyle.ro 18
Tahometrul UNI-T UT372 este un instrument optic (laser şi fotodiodă) cu afişaj digital, util în determinarea cu uşurinţă a vitezei motoarelor, ventilatoarelor, arborilor etc. Măsurarea se face fără contact, prin simpla apăsare a unui buton, datele colectate putând fi transferate către un calculator prin portul USB şi analizate prin intermediul software-ului dedicat.
• • • • • • • • • •
Specificaţii: Conexiune USB Display LCD 5 digiţi Domeniu de măsurare 10 - 99999 rotaţii/min. Acurateţe 0.04% Distanţă de măsurăre 50 ... 200mm Rata de eşantionare 5 ... 255ms Afişare valori minime/maxime/medii Funcţie Data Hold Închidere automată după 15 minute Afişare baterie consumată
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Termometru cu infraroşu UNI-T UT305C UT305C este un termometru cu infraroşu, ideal pentru măsurarea fără contact (point and shoot) şi în condiţii de siguranţă a temperaturii pieselor calde, în mişcare, aflate sub tensiune sau în condiţii greu accesibile, util în întreţinere şi repararea motoarelor electrice, motoarelor cu combustie internă, cuptoarelor, utilajelor etc. Dispozitivul poate determina temperatura unei suprafeţe măsurând cantitatea de energie radiată în infraroşu de către obiectul ţintă. Măsurătorile se fac fără contact direct, prin intermediul unui pointer cu laser, iar datele înregistrate pot fi transferate într-un computer pentru analize ulterioare, prin intermediul conexiunii USB.
• • • • • • • • • • • • • •
Specificaţii: Domeniul de temperatură: -50°C la 1550°C Acurateţe afişaj: ±1.8°C sau ±1.8% Repetabilitate: ±0.5°C sau ±0.5% Distanţa faţă de punctul de măsurat: 50:1 Timp de răspuns: 250ms (95% din citire) Caracteristici laser: Clasa de operare 2(II), ieşire < 1mW, lungime de undă 630-670nm Selecţie afişare: °C/F° Funcţie Data Hold Data logging: 100 Termocuplă T-C Transfer USB Temperaturi MAX / MIN Temperaturi DIF / AVG Montare trepied
Tel.: 0256-201346 office@oboyle.ro, www.oboyle.ro 19
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Transmitere de energie wireless şi monitorizare în timp real
Pentru a demonstra posibilitatea de transmisie a energiei electrice fără fir am folosit un modul “Inductive Charging Set” de la Adafruit. Conform informațiilor de pe site-ul producătorului, modulul de transmisie se alimentează la o tensiune de 9V și furnizează modulului receptor o tensiune stabilizată la 5V, cu un curent maxim de 500mA. Pentru a obține această valoare a curentului, cele două bobine trebuie, însă, să se afle la o distanță foarte mică una de cealaltă. Mai exact, pentru a atinge această valoare de 500mA, bobinele trebuie să se afle la o disntanță 2-3mm. Însă pentru proiectul pe care noi am dorit să-l realizăm, nu am avut nevoie de un curent mai mare de 200mA, drept urmare ne-am permis să mărim spațiul dintre cele două bobine la 6mm. (Schema electronică 1) Proiectul constă în două părți, mai exact din două plăcuțe. O plăcuță principală cu transmițătorul care se alimentează de la o sursă externă de 12V și o plăcuță receptoare ce se alimentează prin intermediul bobinei secundare la o tensiune de 5V. 20
Pentru plăcuța primară, tensiunea de 12V este coborâtă și stabilizată ulterior la 9V prin intermediul stabilizatorului de tensiune L7809. Cu această tensiune se alimentează bobina primară, dar și circuitul de măsurare al curentului și a tensiunii (tensiune coborâtă din nou la 3.3V). Acest circuit de măsurare l-am realizat cu ajutorul microcontrolerului PIC24FJ64GB002 de la Microchip. Datele achiziționate cu acest
microcontroler prin intermediul ADC-ului sunt trimise prin UART către un modul Bluetooth RN42, care mai departe le trimite către un PC. Pentru măsurarea tensiunii de alimentare ne-am folosit de convertorul Analog-Digital integrat pe microcontroler. Întrucât nu poate fi aplicată o tensiune mai mare de 3.3V pe pinul de la microcontroler, această tensiune a fost trecută mai întâi printr-un divizor de tensiune, ca în schema de mai sus: V_BAT_0 = V_BAT * R3 / (R3 + R2). Astfel, pentru o tensiune de intrare de 12V, tensiunea aplicată pe pinul microcontrolerului va fi de 12 / 5 = 2.4V. Pentru măsurarea curentului consumat de întregul montaj am folosit o rezistență de șunt (R_Șunt, astfel valoarea curentului ar fi: I = V_Şunt / R_Șunt unde V_Şunt = V_BAT – V; (Schema electronică 2)
INDUCTIVE CHARGING SET
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Schema electronică 1
Schema electronică 2
Ü
21
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Ü
Datorită faptului că valoarea căderii de tensiune pe rezistența de șunt e foarte mică, apare problema măsurarii acestei valori. Astfel, pentru ca această tensiune să poată fi citită de un microcontroler ea trebuie amplificată. Acest inconvenient l-am rezolvat prin folosirea circuitului integrat INA138 care monitorizează căderea de tensiune pe rezistența de șunt, o amplifică și o trimite mai departe microcontrolerului care o citește cu ajutorul
Plăcuța secundară funcţionează identic cu plăcuța primară. Citirea tensiunii de alimentare și a curentului consumat se realizează la fel. Datele sunt trimise spre prelucrare către un PC tot printrun modul bluetooth RN42. Pe lângă instrumentele de măsură, la cea de-a doua plăcuță am legat un display cu 7 segmente de la Adafruit ce comunică cu microcontrolerul prin interfața I2C. Acesta are rolul unui consumator activ pe placa alimentată wireless.
#define I2C_ADDR 0x70 static uint8_t numberTable[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x77, // A 0x7C, // b 0x39, // C 0x5E, // d 0x79, // E 0x71 // F };
Configurare interfaţă I2C
void displayInit() { uint8_t data[2]; volatile I2C1_MESSAGE_STATUS pstatus; // Init data[0] = 0x21; I2C1_MasterWrite(&data, 1, I2C_ADDR, &pstatus); while(pstatus == I2C1_MESSAGE_PENDING); convertorului Analog-Digital și o transmite prin bluetooth către PC. Toate calculele sunt realizate de către calculator pentru că, lucrând cu numere reale, un microcontroler nu are precizie si operaţiile devin foarte costisitoare, acesta neavând un FPU integrat. Valoarea finală a curentului se calculează cu formula următoare: I = U_adc / (R_Șunt * gain)
Pentru trimiterea datelor wireless am folosit două module bluetooth MATE de la SparkFun, ce vin cu câte un modul RN42 de la Roving Networks (Microchip). Acestea sunt capabile să trimită şi să primească date, de la o distanţă de până la 10 m. Modulul bluetooth poate fi alimentat la maxim 3.3V.
void sendDataUart(const uint8_t* data, const unsigned int numBytes) { UART2_STATUS status = UART2_StatusGet(); __delay_ms(1);
} void sendToUart(const uint16_t adcValue) { uint8_t data[2];
sendDataUart(data, 2); }
22
data[0] = 0xEF; I2C1_MasterWrite(&data, 1, I2C_ADDR, &pstatus); while(pstatus == I2C1_MESSAGE_PENDING; } void displayWrite(uint16_t val) { uint8_t data[2]; volatile I2C1_MESSAGE_STATUS pstatus; // Data data[0] = 0x00 << 1; data[1] = numberTable[(val >> 12) & 0x0F]; I2C1_MasterWrite(&data, 2, I2C_ADDR, &pstatus); while(pstatus == I2C1_MESSAGE_PENDING); data[0] = 0x01 << 1; data[1] = numberTable[(val >> 8) & 0x0F]; I2C1_MasterWrite(&data, 2, I2C_ADDR, &pstatus); while(pstatus == I2C1_MESSAGE_PENDING);
UART2_WriteBuffer(data, numBytes);
data[0] = adcValue >> 8; uint16_t tmp = adcValue << 8; data[1] = tmp >> 8;
data[0] = 0x81; I2C1_MasterWrite(&data, 1, I2C_ADDR, &pstatus); while(pstatus == I2C1_MESSAGE_PENDING);
data[0] = 0x03 << 1; data[1] = numberTable[(val >> 4) & 0x0F]; I2C1_MasterWrite(&data, 2, I2C_ADDR, &pstatus); while(pstatus == I2C1_MESSAGE_PENDING);
Configurare UART Funcțiile care transmit date pe UART către bluetooth
data[0] = 0x04 << 1; data[1] = numberTable[val & 0x0F]; I2C1_MasterWrite(&data, 2, I2C_ADDR, &pstatus); while(pstatus == I2C1_MESSAGE_PENDING);
INDUCTIVE CHARGING SET
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Pentru siguranţă, pe plăcuţă este montat un regulator de tensiune astfel încât permite alimentarea cu până la 6V. Sunt, de asemenea, montate două LED-uri: unul roşu, care arată activitatea pe modul şi unul verde care arată dacă acesta s-a conectat cu succes la partener. Pentru achiziţia de date şi pentru transmisia lor, ambele plăcuțe rulează același cod, întrucât amândouă citesc aceleași tipuri de informații. Am configurat mai întâi dispozitivul de comunicare serială (UART) integrat pe microcontroler, după care a urmat configurarea convertorului Analog-Digital. Am avut nevoie de două astfel de convertoare, unul pentru măsurarea tensiunii de alimentare și altul pentru măsurarea căderii de teniune pe rezistența de șunt. Deoarece există un singur convertor analog-digital pe microcontroler, dar cu mai multe canale, conversia pentru fiecare canal se face pe rând. Primul canal se ocupă de citirea tensiunii de alimentare, iar cel de-al doilea canal de citirea căderii de tensiune pe rezistența de șunt (amplificată cu valoarea de gain). int main(void) { // Initializare UART, ADC SYSTEM_Initialize();
Funcția main principală
while (1) { /* CANAL 1 ADC - RB14 - Tensiunea */ ADC1_ChannelSelect(DRV_ADC1_CHANNEL_AN9); // Porneste ADC canal 1 ADC1_Start(); __delay_ms(1); // Citeste valoare de la ADC uint16_t adcRB14 = ADC1_ConversionResultGet(); // Trimitere date pe UART sendToUart(adcRB14); __delay_ms(1); // Opreste ADC canal 1 ADC1_Stop(); __delay_ms(1);
Mai întâi, se pornește primul canal, se face converisa, după care valoarea citită este transmisă pe interfața serială. În acest moment se oprește primul canal ADC și se porneşte cel de-al doilea, se face conversia apoi se trimit cei 2 bytes cu valoarea citită către Bluetooth prin interfaţa UART. Configurarea interfeței I2C pentru comunicarea cu display-ul a fost mai dificil de realizat. Am realizat o funcție care inițializează această interfață și stabilește legătura cu display-ul și o altă funcție care primește ca parametru un număr întreg pe 16 biți și îl afișează pe display. Pentru PC, am creat o aplicaţie în C# prin care ne conectăm la un modul bluetooth şi analizăm datele primite. Aplicaţia are o interfaţă grafică intuitivă şi permite analiza curentului şi a tensiunii de pe plăcuţele făcute de noi. Modulul bluetooth se conectează la PC printr-un port USB şi aplicaţia detectează automat portul. Modulul conectat la PC este setat ca master şi se va conecta la dispozitivele bluetooth de pe plăcile făcute de noi, apoi va primi date pe interfaţa serială. În aplicaţie se poate seta adresa MAC a dispozitivului cu care vrem să ne conectăm.
Codul din spatele aplicaţiei C# care configurează bluetooth-ul conectat la PC: /* Sets the bluetooth to enter command mode */ ComPort.Write(enterCmdModeString); Thread.Sleep(20); readResponse(); /* Sets the bluetooth in master mode */ String setMasterModeString = "SM, 3" + CR; ComPort.Write(setMasterModeString); Thread.Sleep(20); rtbIncoming.Text += "\n" + "Master: "; readResponse(); /*Timer continous configuration, local and remote. */ String setTimerString = "ST, 255" + CR; ComPort.Write(setTimerString); Thread.Sleep(20); rtbIncoming.Text += "\n" + "Timer: "; readResponse();
/* CANAL 2 ADC - RB15 - Curentul */ ADC1_ChannelSelect(DRV_ADC1_CHANNEL_AN10); // Porneste ADC canal 2 ADC1_Start(); __delay_ms(1);
/* Bluetooth is connecting to related adress*/ String slaveBtAdress = "000666662468"; tbAddress.Text = slaveBtAdress;
// Citeste valoare de la ADC uint16_t adcRB15 = ADC1_ConversionResultGet();
bInitBt.Text = "BT Ready";
// Trimitere date pe UART sendToUart(adcRB15); __delay_ms(1); // Opreste ADC canal 2 ADC1_Stop(); __delay_ms(1);
rtbIncoming.Text += "Bluetooth Initiated\n";
După conectare, citim datele de pe interfaţa serială. Datele sunt citite octet cu octet şi pentru a le reconstitui este necesar să shiftăm primul octet de 8 biţi la stânga, apoi să îl adunăm pe al doilea. În final, trebuie să transformăm numărul primit pe ADC în tensiunea sau curentul corespunzător. În final, valorile sunt afişate într-un text box şi transpuse în două Ü grafice (V(t) şi I(t)). 23
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Ü
int voltage, current;
A doua placă, cea alimentată wireless din a doua bobină are la intrare tensiunea de 5V.
sync_connection(); voltage = convertToInt16((ComPort.ReadByte() << 8) | ComPort.ReadByte()); current = convertToInt16((ComPort.ReadByte() << 8) | ComPort.ReadByte()); voltage = Convert.ToInt16( (voltage * 5 * 3300) / (65536 * 3.3 ) ); // mV current = Convert.ToInt16( (current * 3300) / (65536 * 30) ); // mA
Datele primite de la prima placă sunt următoarele: După cum se poate vedea, intrările sunt aproape liniare, micile erori apărând cel mai probabil din cauza ADC-ului sau din cauza truncherii la împărţire. Autori: Cătălina Platon - platoncatalina93@yahoo.com Adela Istrate - istrate.adela@gmail.com Iulian Mateşică - iulian.matesica@gmail.com Iulian Calciu (Mentor proiect) - iuliancalciu@gmail.com
Înregistraţi-vă acum pentru a participa la training-ul organizat de Freescale – “Internetul Lucrurilor” Data: 5 Mai 2015 Locaţie: Hotel Caro – Blvd. Barbu Văcărescu, nr. 164A, Sector 2, București Training-ul se va desfăşura în limba Engleză Tip training: Hands on Agenda: 8:30 – 9:00 Înregistrarea participanţilor 9:00 – 9:20 Deschiderea sesiunii 9:20 – 10:30 Generaţia următoare de microcontrolere Kinetis bazate pe blocuri IoT 10:30 – 12:00 Laborator 1 – Familiarizarea cu sistemul de operare în timp real MQX 12:00 – 13:00 Prânz 13:00 – 14:30 Laborator 2 – Stiva TCP/IP cu IPv6 activat pentru internetul viitorului 14:45 – 15:45 Laborator 3 – Procedee de vizualizare cu instrumentul FreeMaster şi cu soluţia grafică PEG 15:45 24
Întrebări / Răspunsuri
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Internetul Lucrurilor (IoT) este un concept computaţional prin care orice obiect fizic conectat la Internet este capabil să se autoidentifice în faţa altor dispozitive. Imensa creştere a spaţiului de adrese IPv6 reprezintă un factor important în dezvoltarea Internetului Lucrurilor. Versiunea 6 a protocolului de adresare IPv6, a fost proiectată să rezolve multe dintre problemele cu care se confrunta versiunea anterioară IPv4 printre care mobilitatea, auto-configurarea şi epuizarea spaţiului de adrese. În acest seminar hans-on vă vor fi prezentate caracteristicile de bază ale sistemului de operare în timp real MQX şi noile module care permit IPv6. Există o tendinţă în piaţă de folosire a display-urilor grafice cu capabilităţi tactile, peste tot. Ca o completare la acest subiect, va fi o secţiune care va demonstra cât de uşor este să creaţi puternice interfeţe grafice cu ajutorul PEG-lite şi, de asemenea, va fi o secţiune în care vă veţi familiariza cu instrumentul FreeMaster pentru o dezvoltare uşoară.
Laborator 1 Descriere: Laboratorul 1 investighează funcţionalitatea generică a sistemului de operare în timp real MQX rulând pe seria de dispozitive Kinetis K64F. Pentru demonstraţia practică, se va utiliza placa de dezvoltare FRDM-K64F. Se va prezenta modul de configurare MQX pentru o iniţializare corectă şi exemple simple de comunicaţie I2C cu senzor şi manipulare GPIO. Aplicaţia execută citirea acceleraţiei şi a datelor magnetice provenite de la senzorul extern FXOS8700CQ. Laborator 2 Descriere: Acest laborator investighează funcţionalitatea generică a suitei RTCS (Real Time Communication Suite) din cadrul MQX RTOS. Pentru demonstraţia practică, se va utiliza placa de dezvoltare Freedom board FRDM-K64F. Va fi prezentată configuraţia RTCS cu funcţionalitate IPv6 şi HTTP activat. Cu ajutorul unui simplu web server vom fi în măsură să citim acceleraţia şi valorile magnetice de pe computerul nostru printr-un browser de internet.
Hardware: • MK64FN1M0VLL12 MCU (120 MHz, 1 MB memorie flash, 256 KB RAM, mică putere, fără cristal USB) • Interfaţă USB Dual role cu conector micro-B USB • Accelerometru şi magnetometru FXOS8700CQ • Două push butoane pentru utilizator • Opţiuni flexibile de alimentare – OpenSDAv2 USB, Kinetis K64 USB, sau sursă externă • Acces facil la Intrările/Ieşirile microcontrolerului prin conectori I/O R3 compatibili Arduino™ • Circuit de depanare programabil OpenSDAv2 ce suportă interfaţa CMSIS-DAP şi care oferă: – Interfaţă MSD pentru programarea memoriei flash. – Interfaţă pentru depanare CMSIS-DAP prin conectare USB HID pentru depanare run-control şi compatibilitate cu unelte IDE – Port interfaţă serială virtuală • Ethernet • SDHC
Laborator 3 Descriere: Acest laborator prezintă caracteristicile instrumentului FreeMaster pentru o dezvoltare facilă. Prin intermediul acestuia, vor fi vizualizate datele de la accelerometru şi magnetometru livrate de senzorul extern FXOS8700CQ. Această secţiune va demonstra de asemenea, cât de uşor este să creezi o interfaţă grafică puternică utilizând soluţia PEG-lite.
www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-K64F&parentCode=K64_120&fpsp=1&nodeId=012FC898C9DE2DDDAF 25
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Tester de baterii şi acumulatori Testerul de baterii şi acumulatori este un dispozitiv ce poate descărca o baterie sau un acumulator cu un curent ce poate fi setat în mod automat printr-o interfaţă prietenoasă şi poate salva toate datele într-un fişier Excel. Autori: Daniel Rosner - daniel.rosner@cs.pub.ro Iulian Calciu - iuliancalciu@gmail.com
Placa testerului de baterii este controlată de un kit Arduino Micro ce este programat în aşa fel încât să primească pe interfaţa serială UART datele pentru releele pe care să le activeze şi apoi trimite la interval de o
26
secundă datele citite (tensiunea de pe baterie, tensiunea de după rezistenţa de şunt şi curentul care trece prin rezistenţa de şunt). Pentru conversia serială (UART) <-> USB am folosit un convertor USB-Serial, asemănător
FTDI. Procesul de descărcare se realizează prin conectarea într-un circuit a 5 rezistenţe de diferite valori cu ajutorul a 5 relee. Am folosit relee în locul tranzistorilor pentru a evita disipările de putere necomandate.
TESTER DE BATERII Totodată, am ales să alimentăm toate elementele ce nu fac parte din circuitul de descărcare de la o altă sursă, pentru a evita orice pierdere de curent. Astfel, singurii consumatori din circuitul descărcare au rămas rezistenţele comandate cu relee.
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Circuitul de descărcare al bateriei este format dintr-un regulator LDO de 3.3V alimentat direct de la baterie, care asigură o tensiune constantă (până la tensiunea de aproximativ 3.4V), deci un curent constant, ceea ce ne ajută să calculăm cu o mai mare precizie capacitatea acumulatorului.
Apoi, sunt conectate releele, legate în paralel, ce pot introduce în circuit rezistenţele de valori diferite, pentru a seta curenţi diferiţi de descărcare (cu valori între 0.5μA şi 85mA). Rezistenţele pot fi legate şi în paralel obţinându-se astfel un curent maxim tras din baterie de aproximativ 160mA). Placa are 3 intrări pentru tipuri diferite de conectori ai diferiţilor acumulatori: JST, pinheader şi mufa cu prindere cu şurub. În circuit, sunt folosite 5 relee NEC care conectează cele 5 rezistenţe cu următoarele valori: 39Ω, 68Ω, 130Ω, 1K1 şi 6K8. Pentru anclanşarea releelor sunt folosiţi 5 tranzistori NPN BC547. Pentru măsurarea curentului se folosesc două metode. Prima constă în estimarea curentului în funcţie de rezistenţele conectate în circuit, iar pentru a doua metodă se foloseşte un circuit de măsurare a curentului INA – MCP6N11 Microchip. Acesta calculează curentul ce trece prin circuit prin conectarea pinilor de non-inverting input (VIP) şi inverting input (VIM) înainte şi după rezistenţa de şunt. Astfel, un aplificator diferenţial calculează diferenţa dintre tensiunea de dinainte şi de după şunt (căderea de tensiune), apoi o amplifică cu o valoare de “gain”, setată cu ajutorul a două rezistenţe. Acest lucru este benefic deoarece se doreşte ca rezistenţa de şunt să fie foarte mică (1Ω în acest caz), ceea ce va rezulta o tensiune mică, corespunzătoare Ü curentului. 27
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Ü
Pentru un curent de 85mA, vom avea în mod normal o cădere de tensiune de 85mV, destul de mică pentru a oferi o precizie bună de citire cu circuitul analog numeric al microcontrolerului. Astfel, am apelat la circuitul de tip INA, care amplifică această valoare cu o valoare de gain, rezultând o rezoluţie a tensiunii de pănâ la 5V (valoarea maximă citită de ADC – corespunzătoare curentului maxim admisibil tras din baterie). Curentul echivalent intrării convertorului analog numeric se calculează astfel: I ADC = U ADC / (R ŞUNT * GAIN), unde U ADC = VAL ADC * V REF / ADC RES . I ADC – curentul corespunzător intrării; U ADC – tensiunea corespunzătoare curentului; R ŞUNT – valoarea rezistenţei de şunt; GAIN – valoarea amplificării; VAL ADC – numărul primit pe ADC; V REF – tensiunea maximă de referinţă; ADC RES – rezoluţia ADC-ului. Funcţiile C (Arduino) aferente formulelor: unsigned get_voltage_from_adc(unsigned adc_value) { return scale(adc_value, VDD, ADC_RES); } unsigned get_current_from_voltage(unsigned voltage) { return scale(voltage - VREF, 1, GAIN); }
Aplicaţia pentru arduino este configurată să nu înceapă măsurătorile pănâ nu primeşte de la PC un şir cu o configuraţie de relee validă. După primirea unei comenzi, se încep măsurătorile, în număr de 50 în cazul nostru, setat printr-o constantă numită NO_MEAS. În acelaşi timp, se calculează şi media, iar apoi va fi calculată valoarea finală, prin mediere, după eliminarea valorilor eronate. Pentru acest lucru se vor folosi funcţiile expuse mai sus. În final, se transformă datele în unitatea de măsură corespunzătoare şi vor fi trimise pe interfaţa serială. (Vezi aplicaţia respectivă în pagina 29 coloana din stânga). Aplicaţia de PC care controlează testerul de baterii este scrisă în limbajul C#. Interfaţa este una “prietenoasă”, având butoane pentru alegere port (în caz că mai multe dispozitive ce folosesc porturile seriale sunt conectate la PC), buton de conectare şi buton de începere test. Testele sunt configurabile, astfel că se pot scrie scenarii de descărcare iterative. Un avantaj al aplicaţiei este posibilitatea salvării datelor în formatul Excel (.xls), lucru ce ajută la manipularea uşoară a datelor.
O problemă întâlnită în măsurarea datelor a fost reprezentată de numeroasele erori de măsurare. Pentru a micşora aceste erori, am ales să facem un număr de 50 de măsurători la un moment dat, din care să le alegem doar pe cele considerate corecte, apoi să le mediem, rezultând o singură valoare, mai aproape de realitate. // Multiplying a number with a fraction, without exceding the int limit unsigned long scale(unsigned long value, unsigned numarator, unsigned numitor) { // Thanks to Vladimir Oltean for this function // and helping me to write the rest of filtering algorithms unsigned long max_int = (unsigned long) -1; max_int /= numitor; if (value > max_int) { value /= numitor; value *= numarator; } else { value *= numarator; value /= numitor; } return value; } // Specify if a number is close to a number with MAXX_ERR valueint is_in_margin(unsigned n, unsigned average) { 28
unsigned diff = ABS((signed int) (n - average)); unsigned margin = scale(average, MAX_ERR, 100); return (diff < margin) ? 0 : -1; } // Calc average of some values removing wrong ones unsigned get_average_with_trimmed_values(const unsigned *vect, unsigned long old_average) { unsigned i; unsigned ctr = 0; unsigned long new_average = 0; for (i = 0; i < NO_MEAS; i++) { if (is_in_margin(vect[i], old_average) == 0) { new_average += vect[i]; ++ctr; } } return scale(new_average, 1, ctr); }
TESTER DE BATERII void loop() { // Variable declarations ....
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
void measure(int duration, Boolean[] relays) { if (ComPort.IsOpen && test_end == false) { int rel_state = 0;
// Config relays to set desired current if(-1 != (s_read = Serial1.read())) { set_relays(s_read); start = ((s_read == 0) ? 0 : 1); }
// Config relays for requested resistance for (int i = 1; i <= 5; ++i) { rel_state += (Convert.ToByte(relays[i-1]) << (i-1)); }
if(start) { // Make NO_MEAS measurements for(i = 0; i < NO_MEAS; ++i) { read_values(ina_vect + i, vim_vect + i, vip_vect + i);
set_relays((byte)rel_state); int time = 0;
ina_average += ina_vect[i]; vim_average += vim_vect[i]; vip_average += vip_vect[i];
for (; time < duration; time++) { if (test_end == false) { String read_val; char[] delim = { ' ' };
} ina_average = scale(ina_average, 1, NO_MEAS); vim_average = scale(vim_average, 1, NO_MEAS); vip_average = scale(vip_average, 1, NO_MEAS);
// Clear ComPort buffer if(ComPort.BytesToRead > DATA_SIZE) ComPort.ReadExisting();
// Calc average after removing wrong values new_ina_avg = get_average_with_trimmed_values (ina_vect, ina_average); new_vim_avg = get_average_with_trimmed_values (vim_vect, vim_average); new_vip_avg = get_average_with_trimmed_values (vip_vect, vip_average);
// Wait for data to be received while (ComPort.BytesToRead < DATA_SIZE) { ; }
// Calc the equivalent voltage to adc value ina_mv = get_voltage_from_adc(new_ina_avg); vim_mv = get_voltage_from_adc(new_vim_avg); vip_mv = get_voltage_from_adc(new_vip_avg);
// Read values as a string line read_val = ComPort.ReadLine(); if (read_val != "") { string[] values = read_val.Split(delim);
// Calc current passing from shunt resistor ina_ma = get_current_from_voltage(ina_mv);
// Write time, values and resistance in excel file writeToExcel(relays, time_s, values);
// Send data through serial port Serial1.print(ina_ma); Serial1.print(" ");
time_s++;
Serial1.print(vim_mv); Serial1.print(" ");
int batt_v = int.Parse(values[2]); // Stops the test if battery voltage is lower than minimum voltage setted if (batt_v <= MIN_BATT_VOLTAGE) { test_end = true; }
Serial1.print(vip_mv); Serial1.print("\n"); delay(WAIT_PERIOD); } }
print_ctr += MULTIPLIER; }
Pentru aplicaţia de C#, am scris o funcţie care are ca parametri configuraţia de relee corespunzătoare curentului dorit şi durata măsurătorii. Apelând recursiv această funcţie cu anumiţi parametri, se pot scrie scenarii de descărcare ale acumulatorilor. Ü
} } } }
29
Electronica Azi HOBBY • Aprilie, 2015 • Nr. 2
Ü
În primul rând, va fi trimis pe serială un octet în care primii 5 biţi reprezintă configuraţia releelor (“1” pentru releu pornit şi “0” pentru releu oprit). Apoi, se goleşte bufferul dacă în acesta se află mai multe date decât e nevoie, apoi se aşteaptă pentru primirea unui set complet de date. După aceea, se citesc datele, se parsează şi se scriu în fişierul excel. Această funcţie rămâne activă atât timp cât nu s-a atins limita de timp stabilită sau cât timp tensiunea pe baterie este mai
mare decât tensiunea minimă acceptată (3.4V în cazul nostru). (Funcţia completă este prezentată în pagina 29, coloana din dreapta). Folosind funcţia de măsurare (measure()) se pot crea diferite scenarii de descărcare, cu timpi şi configuraţii de relee (curenţi) diferite. Mai jos, vă vom prezenta un exemplu de scenariu care poate fi foarte uşor modificat petru a obţine orice configuraţie:
private void scenary1() { if (ComPort.IsOpen) { int i, j; Boolean[] relays = new Boolean[5];
for (i = 0; i < 34; i++) { // Set third relay -> 25mA for 3 seconds relays = get_values(false, false, false, true, false); measure(3, relays); // Set fourth relay -> 3mA for 32 seconds relays = get_values(false, false, false, true, false); measure(32, relays);
initExcel(); while (test_end != true) { // Set first relay -> 85mA for 10 seconds relays = get_values(true, false, false, false, false); measure(10, relays); // Set second relay -> 48mA for 5 seconds relays = get_values(false, true, false, false, false); measure(5, relays);
} } set_relays((byte)0); //turn off all relays saveExcel(filePath); } }
Câştigaţi cu Electronica Azi Hobby 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. Articolul propus spre publicare trebuie să conţină următoarele elemente: • Introducere (~ 50 cuvinte) • Conţinut (~ 1000 cuvinte) • Poză autor şi pentru aplicaţia propusă • Diagrame (schemă electronică, detalii, circuit PCB).
30