Statie Automata DE Spalat Autovehicule
STAȚIE AUTOMATĂ DE SPĂLAT AUTOVEHICULE
Cuprins
Introducere
CAPITOLUL 1
Descriere Hardware
1.1 Schema electrică a aplicației
1.2 Componente active și pasive de circuit
1.2.1 Motorul de curent continuu
1.2.2 Tranzistoare
1.2.3. Senzorul QRD1114
1.3 Arduino Uno
1.3.1 Microcontroler ATmega328
1.4 Placa de achiziție DAQ USB-6008
1.4.1. Prezentare generală
1.4.2. Calibrarea plăcii de achiziție
CAPITOLUL 2
Descriere Software
2.1 Software Arduino
2.2 Mediul de programare grafică LabVIEW
2.2.1. Prezentare generală
Principalele moduri de rulare a unei aplicații
Fereastra Help
2.2.2. Programul în labVIEW.
CAPITOLUL 3
CONCLUZII
BIBLIOGRAFIE
Introducere
Automatizarea proceselor de producție a însemnat o etapă importantă în dezvoltarea tehnologiei și a dus la însemnate creșteri ale productivității muncii. Datorită acestor automatizări, efortul uman s-a redus considerabil, munca omului fiind înlocuită cu cea a roboților industriali și a mașinilor automatizate, omului rămânandu-i doar funcția de conducere a proceselor tehnologice de producție.
Ideea de automatizare a venit și în cadrul stațiilor de spălat autovehicule. Automatizarea stațiilor de spălat autovehicule a dus la o productivitate mult mai mare, la un timp de spălare mult mai scurt și la o calitate mult mai ridicată.
Am ales ca și temă pentru proiectul de diplomă să prezint modul de automatizare a unei stații automate de spălat autovehicule. Proiectul cuprinde o machetă în care am încercat să exemplific funcționarea unui model de stație automatizată de spălat autovehicule și o parte software de prelucrare, simulare si achiziție de date. Partea software am realizat-o în două limbaje de programare diferite: labView și Arduino.
Macheta realizată cuprinde: o bandă transportoare acționată de un motor de curent continuu, un post de înmuiere și spălare cu detergent, un post de clatire și un post de uscare.
Autovehiculele vor trebui succesiv să treacă prin cele trei posturi de lucru: înmuiere, clătire și uscare. Procesul de spălare va porni automat la apăsarea butonului de start,care va activa banda transportoare, iar vehiculele vor trece succesiv prin posturile de lucru. La pornirea procesului, banda transportoare va rula până cand mașina va ajunge în dreptul primului senzor. Când primul senzor simte prezența mașinii acesta va opri banda și va activa electropompa 1 care va pulberiza apa cu detergent pentru inmuiere și spălare. După 3 secunde electropompa se va opri,iar banda transportoare va înainta până când masina va ajunge în dreptul senzorului 2. Când senzorul 2 simte prezența mașinii, acesta va opri banda și va activa electropompa 2 care va pulberiza apă pentru clătirea mașinii timp de 3 secunde. După ce electropompa 2 se va opri, banda transportoare va înainta până când senzorul 3 va simți prezența mașinii, va opri banda și va activa portul de uscare timp de 5 secunde după care banda va reporni până când mașina va ieși din postul de lucru. Procesul se va relua automat atunci când senzorul 1 va simti din nou prezența unei alte mașini.
Fig 1.1. Stație automată de spălat autovehicule – schema fizică
Elemente de execuție folosite:
Motor de c.c, 22 V folosit pentru acționarea benzii transportoare;
2 electropompe folosite la pulberizarea apei;
Motor de c.c, 5V folosit la postul de uscare.
Senzorii folosiți:
3 senzori QRD 1114
În cele ce urmează,am prezentat schema bloc a întregului proces de automatizarea realizat.
Fig.1.2 Schema bloc a procesului de automatizare.
Proiectul de față este structurat pe patru capitole , fiecare capitol cuprinzând mai multe subcapitole.
În primul capitol numit “Descriere hardware”, am prezentat două scheme electrice specifice aplicației realizate, prima schemă fiind reprezentată cu platforma Arduino și cea de-a doua cu ajutorul placii de achiziție DAQ USB 6008. Tot în acest capitol, am prezentat și câteva caracteristici și detalii depre componentele active și pasive folosite în aplicație (motoare, tranzistori, senzori). În partea a treia a capitolului întai, am prezentat platforma de procesare Arduino și câteva detalii despre fiecare componentă a acesteia. În ultima parte a capitolului întai, am prezentat placa de achiziție DAQ 6008 și componentele aesteia.
În capitolul 2 numit “Descriere software”, am prezentat mediile de programare pe care le-am folosit , respectiv Arduino si labVIEW. În cadrul acestui capitol am prezentat atât date teoretice despre softurile de programare menționate, cât și structura programelor acestora. Tot în acest capitol, am explicat pe larg fiecare pas pe care l-am parcurs în timpul programării și modul cum am stabilit legatura dintre softurile de programare și platformele de achiziție.
În ultimul capitol numit “Concluzii”, am prezentat părerile personale despre noțiunea de automatizare a proceselor, care sunt avantajele și dezavantajele automatizări proceselor și ce beneficii ne aduc acestea față de procesele în care se lucrează manual. La finalul acestui capitol am facut o paralelă între cele două medii de programare folosite, am expus avantajele și dezavantajele acestora, am arătat ce au în comun și ce le diferențiază.
CAPITOLUL 1
Descriere Hardware
1.1 Schema electrică a aplicației
Fig 1.1 Schema electrică a procesului folosind Arduino
Fig 1.2 Schema electrică a procesului folosind placa de achiziție DAQ 6008
1.2 Componente active și pasive de circuit
1.2.1 Motorul de curent continuu
Motorul de curent continuu este un dispozitiv format dintr-un magnet permanent,un comutator, un miez de fier prevăzut cu câte o bobină la fiecare capăt si două perii. Acest dispozitiv convertește energia electrică în energie mecanică cu ajutorul statorului și al rotorului.
Statorul este partea statică exterioară a motorului ce cuprinde carcasa și magnetul permanent.Acesta generează un câmp magnetic ce înconjoară rotorul, acest câmp fiind generat în două feluri: cu magneți permanenți sau cu ajutorul spirelor unui electromagnet.
Rotorul (armătura) este partea care se rotește (cea mobilă) a motorului și este plasată în interiorul acestuia fiind realizat din mai multe înfășurări. Aceste înfășurări,odata alimentate produce un câmp magnetic. Acesta este format dintr-un ax rotoric și o armătură ce susține înfașurarea rotorică. Sensul curentului prin înfașurarea rotorică este schimbat cu ajutorul unui colector situat pe axul motorului.Tensiunea de alimentare este aplicată înfășurărilor rotorului cu ajutorul unui sistem de perii situate pe capacul motorului.Între rotor și stator apare o distanță care se numește intrefier.
În afară de rotor și stator, motorul de curent continuu mai conține:
Jug;
Comutator ;
Perii colectoare;
Jugul motorului reprezintă un suport magnetic din fontă sau oțel și formează partea integrantă a statorului sau partea statică a motorului. Funcția sa principală este de a forma o acoperire de protecție de-a lungul părți interioare a motorului și de a oferi sprijin pentru armătură.
Comutatorul motorului este o structură cilindrică formată din segmente de cupru așezate împreună , dar izolate unele de altele. Funcția sa principală este de a schimba polaritatea electromagnetului.
Perii colectoare. Atunci când o tensiune este aplicată peste periile colectoare, acestea genereaza un câmp magnetic variabil și face ca rotorul să se miște. Periile colectoare, de obicei, sunt fabricate din grafit sau carbon.
Fig 1.3 Structura motorului de c.c
Motorul de curent continuu funcționează după următorul principiu: atunci când un curent trece prin rotorul unui motor de c.c, se generează un câmp magnetic care va produce o forță electromagnetică, astfel va pune în mișcare rotorul care se va roti. Când rotorul se rotește, acesta va induce o tensiune în bobinajul rotorului. Acesta tensiune are sens opus tensiunii aplicate rotorului. Altfel spus, punerea sub tensiune a motorului face ca armătura de fier să se magnetizeze și sa aibă un pol nord și un pol sud. Polul sud al armăturii este atras de polul nord al magnetului,iar polul nord al armăturii de polul sud al magnetului permanent.Cu ajutorul comutatorului se schimbă polaritatea electromagnetului atunci când armătura ajunge în poziția finală, astfel polul sud al electromagnetului devine nord,iar polul nord devine sud,după care procesul o ia de la capăt. Atâta timp cât asupra motorului nu acționează nici o sarcină,viteza motorului va rămâne constantă. Când se aplică o sarcină asupra motorului, tensiunea va fi redusă iar motorul va atrage un curent mai mare pentru a putea efectua lucrul mecanic.
Pentru aplicația realizată, am folosit patru motoare de curent continuu: două electropompe de 12 V, un motor Portescap QK de 22 volți și un alt motor M9I60U24 de 6 volți.
1.2.2 Tranzistoare
Tranzistorul reprezintă un dispozitiv semiconductor, ce poate fi privit ca și un comutator, fiind format din cel puțin trei terminale și care conține două sau mai multe joncțiuni p-n. În general, tranzistoarele se construiesc din materiale semiconductoare având la bază germaniu sau siliciu și au în componența lor, trei regiuni numite:
B (baza) – ajută la activarea tranzistorului;
C (colector) – reprezintă pinul pozitiv;
E (emitor) – reprezintă pinul negativ;
În circuit, tranzistorul se notează astfel:
UCE – tensiunea dintre colector și emitor;
UBE – tensiunea dintre bază și emitor;
IC – curentul de colector;
IE – curentul de emitor ;
IB – curentul de bază;
Tranzistorul este esențial pentru circuitele electronice și este de două tipuri: NPN și PNP.
Fig 1.4 Simbolul tranzistorului NPN și PNP
În cazul tranzistorului NPN , colectorul și baza se leagă la polul pozitiv al bateriei, iar în cazul tranzistorului PNP, colectorul și baza se cuplează la polul negativ al bateriei. La tranzistorului NPN curentul circulă de la colector la emitor prin bază ,iar în cazul tranzistorul PNP curentul circulă în sens invers,de la emitor la colector prin bază. În acest caz, baza are rol de comandă.
Tranzistoarele sunt de mai multe tipuri:
tranzistoare bipolare (TB);
tranzistoare cu efect de câmp (TEC);
tranzistoare TEC-MOS;
tranzistoare TEC-J;
Pentru aplicația realizată, am folosit trei tranzistori BDX53C, pentru a comanda cele două electropompe si motorul benzii transportoare.
Tranzistorul BDX53C
Tranzistorul BDX53C face parte din categoria tranzistorilor NPN. Acest tip de tranzistor este foarte des utilizat la amplificatoarele audio de putere medie și în alte aplicații liniare și de comutație.
Caracteristicile tranzistorului :
VCEO (tensiunea colector-emitor) – 100 V;
VCBO (tensiunea colector-bază) – 100 V;
VEBO (tensiunea emitor-bază) – 5 V;
IC (curentul din colector) – 8 A;
ICM (curentul maxim al colectorului) – 12 A;
IB (curentul din bază) – 0,2 A;
Ptot (puterea totală disipată) – 60 W;
Tstg (temperatura de funcționare) – între -65 și 150 oC;
Configurația pinilor :
1 – bază;
2 – colector;
3 – emitor;
Fig 1.5 Configurația pinilor tranzistorului BDX53C
În figura de mai jos, am prezentat modul de comanda al motoarelor cu ajutorul tranzistorului BDX53C.
Fig 1.6 Comanda motorului DC cu tranzistorul BDX53C
1.2.3. Senzorul QRD1114
Senzorul QRD1114 este un senzor reflectorizant format dintr-o diodă emițătoare prin infraroșu și un fototranzistor NPN din siliciu, montat în partea laterala a unei carcase negre din material plastic. Fototranzistorul răspunde la radiațiile emise de dioda numai atunci când un obiect reflectorizant sau o suprafață este în domeniul vizual al detectorului. Acest tip de senzor poate detecta obiecte aflate la o distanță cuprinsă intre 0 si 3 cm.
Acest senzor poate fi folosit și pentru a detecta suprafețele albe de cele negre, deoarece o suprafață albă va reflecta lumina mai mult decât o suprafață neagră, rezultând astfel o deosebire între acestea. Din acest motiv, acest sensor poate fi utilizat și pentru detecția contururilor sau a liniilor urmăritoare. Dor NPN din siliciu, montat în partea laterala a unei carcase negre din material plastic. Fototranzistorul răspunde la radiațiile emise de dioda numai atunci când un obiect reflectorizant sau o suprafață este în domeniul vizual al detectorului. Acest tip de senzor poate detecta obiecte aflate la o distanță cuprinsă intre 0 si 3 cm.
Acest senzor poate fi folosit și pentru a detecta suprafețele albe de cele negre, deoarece o suprafață albă va reflecta lumina mai mult decât o suprafață neagră, rezultând astfel o deosebire între acestea. Din acest motiv, acest sensor poate fi utilizat și pentru detecția contururilor sau a liniilor urmăritoare. Deoarece senzorul QRD1114 funcționează pe bază de radiații IR , acesta poate fi influențat și de alte surse externe (flash-uri de aparat de fotografiat, lămpi,telecomenzi și chiar și de soare).
1 – colector
2 – emitor
3 – anod
4 – catod
Fig.1.7 Schema de funcționare
Valorile maxime absolute:
TOPR – temperatura de operare (funcționare) : – 40:+85 oC;
TSTG – temperatura de stocare : -40 : +100 oC;
VR – tensiunea de mers în gol : 5 V;
IF- curent continuu transmis: 50 mA;
PD – puterea disipată: 100 mW;
VCEO – tensiunea colector-emitor : 30 V;
VECO – tensiunea emitor-colector ;
Pentru a funcționa în condiții optime, senzorul are nevoie de 2 rezistențe, una cu valori cuprinse între 4,7 și 5,6kΩ montată pe pinul 2 si una cu valori cuprinse între 200 și 2000 Ω montată pe pinul 3. Pentru aplicația realizată eu am folosit două rezistențe una de 5,6k și una de 220 Ω și le-am montat ca în figura următoare:
Fig.1.8 Schema de montare în circuit a senzorului QRD1114
După cum reiese și din figura 2.1.4, pinii 2 și 4 vin legați amandoi la masă (GND), pinul 1 trece printr-o rezistență de 5,6 k și se înseriază cu o rezistență de 220 Ω care vine legată la pinul 3 și se leaga la 5V. Semnalul de ieșire (out) se citește de la pinul 1.
1.3 Arduino Uno
Arduino Uno este o platformă de procesare open-source bazată pe un microcontroler ATmega328. Această platformă este prevazută cu 14 pini digitali de intrare/ieșire, dintre care 6 dintre aceștia pot fi folosiți și ca ieșiri PWM, 6 intrări analogice, un quart de 16 MHz , un adaptor de alimentare ,un buton de resetare și un adaptor pentru conectare prin USB. Placa Arduino poate fi alimentată prin conexiune USB sau de la o sursă de alimentare externă. Alimentarea externă poate veni fie de la un adaptor AC-DC sau de la o baterie. Placa poate funcționa pe o sursă externă între 6 și 20 volți. Dacă este utilizată o tensiune mai mare de 12V, regulatorul de tensiune se poate supraîncălzi și placa se poate deteliora. Intervalul de alimentare recomandat este de 7-12 volți.
Fig 1.9 Placa de bază Arduino Uno
Specificațiile placii Arduino Uno:
Microcontroler: ATmega328
Tensiunea de funcționare: 5V
Tensiunea de intrare (recomandată): 7-12V
Tensiunea de intrare (limită): 6-20V
Pini digitali I/O : 14 (6 din ace;tia oferă și ieșire PWM )
Pini de intrare analogici: 6
Pini de curent DC de I/O: 40 mA
Pini de curent DC pentru 3,3V: 50 mA
Memorie flash: 32 KB(ATmega328)din care 0.5 KB utilizat de bootloader
SRAM: 2 KB (ATmega328)
EEPROM: 1 KB (ATmega328)
Viteza ceasului (clock): 16 MHz
Configurația pinilor de alimentare este următoarea:
VIN. – reprezintă tensiunea de intrare la placa Arduino când se folosește o sursă de alimentare externă. Se poate pune tensiunea de alimentare prin intermediul acestui pin, sau, în cazul în care tensiunea de alimentare se face prin mufa de alimentare, se poate accesa prin acest pin.
5V. – Acest pin generează o tensiune de 5V de la regulatorul de pe placă. Alimentarea cu tensiune prin pinii de 5V sau 3.3V poate deteriora placa Arduino,deoarece în cazul acesta contactele ocolește regulatorul.
3,3V. – Acest pin generează o tensiune de alimentare de 3,3 volți de la regulatorul de pe placă. Curentul maxim este de 50 mA.
GND. – Reprezintă pinul de masă.
IOREF. – Acest pini furnizează o tensiune de referință cu care operează microcontrolerul.
Memoria(microcontrolerul): ATmega328, are 32 KB (cu 0,5 KB utilizat pentru bootloader). Mai are, de asemenea, 2 KB SRAM și 1 KB de EEPROM (care pot fi citite și scrise cu biblioteca EEPROM).
Intrările și ieșirile : Fiecare dintre cei 14 pini digitali de pe Arduino poate fi utilizat ca o intrare sau ieșire, utilizând funcțiile: pinMode (), digitalWrite (), și digitalRead (). Acestea funcționează la 5 volți. Fiecare pin, poate furniza sau primi un maxim de 40 mA și are un rezistor pull-up intern (deconectat implicit) de 20-50 kOhms. În plus, unii pini au funcții specializate:
Serial: 0 (RX) și 1 (TX). – Acești pini sunt folosiți pentru a primi (RX) și transmite (TX) date seriale TTL. (transistor-transistor logic). Acești pini sunt conectați la pinii corespunzător cipului serial ATmega8U2 USB.
External Interrupts: (pinii 2 și 3). Acești pini pot fi configurați pentru a declanșa o întrerupere la o valoare mică, un front crescător sau descrescător, sau o schimbare în valoare.
Pinii 3, 5, 6, 9, 10, și 11 (PWM). Furnizează câte o ieșire PWM de 8 biți cu ajutorul funcției analogWrite ().
SPI: 10 (SS), 11 (Mosi), 12 (MISO), 13 (SCK). Acești pini suportă comunicare SPI folosind biblioteca SPI.
LED: 13. Reprezintă este un LED integrat digital conectat la contactul 13. Atunci când contactul are valoare ridicată, led-ul este aprins, atunci când contactul are valoare mica, led-ul este oprit.
Platforma Arduino Uno mai are și 6 intrări analogice, etichetate de la A0 la A5, fiecare dintre acestea oferă 10 biți de rezoluție (exemplu 1024 valori diferite). În mod implicit se măsoară de la masă până la 5 volți, deși este posibil să se schimbe limita superioară a intervalului, folosind pinul AREF și funcția analogReference (). În plus, unii pini au funcționalitate de specialitate:
AREF. – Reprezintă tensiunea de referință pentru intrările analogice. Se utilizeazp cu funcția analogReference( ).
RESET. – Reprezintă resetarea microcontrolerului și a întregii platforme.
Comunicarea cu externul:
Platforma Arduino Uno are o serie de facilități pentru comunicarea cu un calculator, o altă placă Arduino, sau cu alte microprocesoare. ATmega328 oferă comunicația serial UART TTL (5V), care este disponibilă pe pinii digitale 0 (RX) și 1 (TX). Firmware-ul “16U2” foloseste driverele standard de COM USB, și nu are nevoie de nici un driver extern. Totuși, pe Windows, este necesar un fișier “.Inf”.
Software-ul Arduino include un monitor serial care permite transferul de date de la placa Arduino la calculator și invers. Led-urile RX și TX de pe placa Arduino va clipi atunci când datele sunt transmise prin intermediul cip-ului USB-To-Serial și conexiunii prin USB la calculator (dar nu și pentru comunicația serială de pe pinii 0 și 1).
Platforma Arduino are și o protecție suplimentară în cazul în care mai mult de 500 mA este aplicat la portul USB, siguranța va întrerupe în mod automat conexiunea .
1.3.1 Microcontroler ATmega328
Atmel ATmega328 este un microcontroler de 8 biți bazat pe arhitectura AVR. Multe instrucțiuni sunt executate într-un singur ciclu de ceas oferind o capacitate de aproape 20 MIPS la 20MHz. Fig 1.10 ATmega 328
Nucleul AVR combină un set bogat de instrucțiuni cu 32 de registre de lucru de uz general. Toate cele 32 de registre sunt conectate direct la unitate logică aritmetică (ALU), permițând ca două registre independente sa fie accesate într-o singură instrucțiune și să fie executate într-un singur ciclu de ceas.
Dispozitivul este fabricat cu o tehnologie de memorie Atmel de înaltă densitate non-volatilă. Cipul Flash ISP permite memoriei program să fie reprogramată în sistem printr-o interfata seriala SPI, de un programator convențional memorie nevolatile, sau de către un program de boot care rulează pe bază AVR. Programul de boot poate fi utilizat pe orice interfață pentru a descărca programul de aplicație în memoria flash.
Caracteristici:
Performanță înaltă;
Contor în timp real cu oscilator independent;
10 biți, are un convertor cu 6 canale de la analog la digital;
Are un senzor de temperatură intern;
Prezintă o interfață serială Master / Slave;
Conține un comparator analogic intern;
Are un oscilator intern calibrat;
Prezintă 23 de pini programabili de I/O;
Tensiunea de operare : 1,8 – 5,5 V;
Temperatura de funcționare: între 40°C și 85°C;
Prezintă 6 canale PWM;
Are 32 x 8 registre generale de lucru;
Memoria include:
Memorie Flash 32KB
EEPROM 1KB
SRAM 2KB
10.000 de cicluri de scriere/ștergere pentru Flash și 100.000 pentru EEPROM;
Bootloader opțional cu biți de blocare;
Fig 1.11 Schema bloc a microcontroletului ATmega328
1.4 Placa de achiziție DAQ USB-6008
1.4.1. Prezentare generală
Placa de achiziție USB-6008 este un dispozitiv de control, low-cost produs de firma National Instruments (NI) care face parte din gama componentelor DAQ (Data Aquisition) și se utilizează la achiziția de date.
Prin facilitarea comunicației pe USB de tipul plug-and-play aceste dispozitive sunt suficient de simple pentru realizarea rapidă a măsurătorilor și totodată suficient de versatile, fiind recomandate chiar și pentru aplicații de achiziții mai complexe de date.
Placa de achiziție USB-6008 este ideală pentru o gamă de aplicații unde costul redus, dimensiunile reduse ale componentelor și simplitatea sunt elemente cheie.
Figura 1.12 Placa de achiziție de date DAQ 6008
Specificațiile tehnice:
Prezintă 8 intrări și 2 ieșiri analogice, precum și 12 canale digitale care pot fi configurate ca intrări sau ieșiri (I/O)digitale. Aceste 12 canale sunt organizate în porturi, un Port 0 cu linii de la 0- 7, și un Port 1 cu linii de 0 – 3.
domeniile de tensiune configurabile: ± 20V, ± 10V, ± 5V, ± 4V, ± 2.5V, ± 2V, ± 1.25V, ± 1V.
Rata maximă de eșantionare este de 48kS / s (48000 eșantioane pe secundă). Fig.2.13 Configurația pinilor
1 contor pe 32 biți, frecvență maximă: 5 MHz
Conectare si alimentare prin USB ,nu necesită alimentare de la o sursă externă.
Tabel 1.1 Configurația pinilor plăcii de achiziție DAQ USB 6008
Figura 1.13 Schema bloc a NI DAQ USB-6008
Rezoluția de intrare definește cea mai mică variație a semnalului de intrare ce poate fi detectată de sistem. Rezoluția poate fi exprimată sub formă de procente, dar cel mai adesea ea se exprimă în biți. Adică un sistem pe 12 biți poate să deceleze o parte din 212. De exemplu, dacă vrem să măsurăm un semnal 0-10V și avem o interfață A/D pe 12 biți, rezoluția cu care putem măsură semnalul de intrare are 10/212=0.003V. În general, convertoarele analog-digitale cu rezoluții ridicate sunt mai scumpe și mai lente decât cele corespunzătoare lor, dar cu rezoluție mai mică. Lucrul cu aproximativ orice placă de achiziție, indiferent de operația efectuată (achiziția unui semnal analogic, generarea unui semnal analogic, preluarea unor semnale digitale, generarea de semnale digitale) presupune, în general, crearea unui task, crearea unui canal (intrare / ieșire analogică, intrare / ieșire digitală ) și execuția anumitor funcții după caz.
Rata (viteza) de eșantionare reprezintă o măsură a vitezei cu care placa A/D poate să scaneze canalul de intrare și să identifice valoarea discretă a semnalului față de valoarea de referință. Rata de eșantionare se exprimă uzual în eșantioane pe secundă (mai rar în Hz) și ea este unul din parametrii cei mai importanți ai unei interfețe analog-digitale. Conform teoriei, un sistem de achiziție de date trebuie să eșantioneze cu o viteză de cel puțin două ori mai mare decât cea mai mare frecvență ce poate exista în sistemul de intrare. Dacă viteza de eșantionare este prea mică, din datele achiziționate se va obține o formă de undă complet diferită și de frecvență mai mică. Acest efect este numit aliasing (zgomot).
Dacă semnalul de măsurat conține componente cu frecvența mai mare decât jumătate din rata de eșantionare se recomandă utilizarea unui filtru anti-aliasing. Multe interfețe analog digitale cu mai multe canale folosesc un convertor A/D și un multiplexor de intrări. Multiplexorul acționează ca un comutator care permite eșantionarea independentă a fiecărui canal. De aceea, rata maximă de eșantionare pentru un canal este rata maximă de eșantionare a convertorului A/D împărțită la numărul de canale de eșantionat. Adesea rata de eșantionare ocupă rapid memoria calculatorului. Aceasta înseamnă că timpul cât poate să eșantioneze sistemul de date este la fel de important ca și viteză lui de eșantionare . Pentru a asigura suficient timp de eșantionare poate apărea necesitatea de a instala RAM suplimentar pe calculator, ori de a scrie sau cumpăra soft de acces foarte rapid la disc.
1.4.2. Calibrarea plăcii de achiziție
Calibrarea se referă la minimizarea erorilor de măsurare și a celor datorate tensiunii prin mici corecții aduse circuitului. La placa de achiziție 6008 aceste corecții constau în scrierea unor valori într-un tabel intern (CalDAC).
Calibrarea este necesară pentru majoritatea aplicațiilor, iar în lipsa acesteia erorile de offset, de câștig sau de liniaritate ar fi foarte mari.
Există trei niveluri la care se realizează calibrarea. Primul nivel este cel mai simplu, cel mai rapid dar nu așa de precis, pe când ultimul este cel mai lent, cel mai dificil dar cel mai precis.
Încărcarea constantelor pentru calibrare. Placa de achiziție 6008 este calibrată după fabricare, înainte de a fi trimisă spre distribuție. Constantele de calibrare asociate – valorile scrise în CalDAC pentru realizarea calibrării în fabrică – se află în memoria nevolatilă de pe placă (EEPROM). Deoarece CalDAC nu are proprietăți de memorie, nu are capacitatea de a păstra valorile scrise după ce placa nu mai este alimentată cu tensiune.
Încărcarea constantelor pentru calibrare constă în încărcarea CalDAC cu valorile stocate în EEPROM. Software-ul NI-DAQ determină momentul în care această operație este necesară și o execută automat. Dacă nu se folosește NI-DAQ aceste valori trebuie încărcate de programator.
În memoria EEPROM există o zonă utilizator, în care acesta poate defini propriile valori pentru constantele de calibrare, putând să efectueze ulterior calibrarea cu valorile definite de el sau cu valorile stabilite din fabrică.
Această metodă de calibrare nu este foarte precisă deoarece nu ia în calcul erorile de măsurare și erorile tensiunii de ieșire ce pot varia cu timpul si cu temperatura.
Auto-calibrarea (self calibrate). Placa de achiziție 6008 poate măsura și corecta erorile legate de calibrare fără vreo conexiune externă. Software-ul de la National Instruments asigură o metodă de auto-calibrare ce poate fi folosită. Procesul de auto-calibrare este metoda preferată, necesitând mai puțin de un minut și asigurând o acuratețe destul de bună.
După auto-calibrare, singura eroare semnificativă ce poate apărea este la câștigul datorat influenței timpului și temperaturii asupra variației tensiunii de pe placă. Această eroare este corectată prin calibrarea externă.
Calibrarea externă. DAQ 6008 are o referință pe placă pentru a asigura precizia auto-calibrării. Tensiunea de referință este măsurată în fabrică și stocată în EEPROM. Această tensiune este stabilă pentru majoritatea aplicațiilor dar dacă placa este folosită la temperaturi extreme sau valoarea referinței nu a mai fost măsurată de mai mult de un an, placa trebuie calibrată extern.
Calibrarea externă se referă la calibrarea plăcii cu o referință externă cunoscută, ignorând valorile referinței de pe placă. Redeterminarea valorilor pentru referințele de pe placă este scopul acesteia, noile valori fiind salvate în EEPROM, pentru a nu efectua prea des calibrări externe. Placa poate fi calibrată extern apelând funcțiile de calibrare NI-DAQ.
Pentru calibrarea externă a plăcii trebuie folosită o referință externă foarte precisă. Referința trebuie să fie ea însăși mult mai precisă decât placa. De exemplu, pentru a calibra o placă de 12 biți, referința externă trebuie să aibă o eroare de cel puțin 0.005% (50ppm), iar pentru o placă de 16 biți, referința externă ar trebui să aibă eroarea de cel puțin 0.001% (10ppm).
CAPITOLUL 2
Descriere Software
2.1 Software Arduino
Partea software a platformei Arduino este reprezentată printr-o interfață grafică IDE, bazată pe un limbaj de programare de tip processing. Programarea microcontrolărului se face cu ajutorul unui limbaj propriu de programare Arduino,care este un limbaj open-source. Interfața grafică este realizată în Java și poate rula pe Windows, Mac OS și Linux. Pentru a putea fi programat microcontrolerul, este necesar instalarea driverului platformei arduino, aceasta putând fi descărcată gratuit de pe situl oficial al producatorului: http://arduino.cc/en/Main/Software . După descărcarea driverului, se dezarhivează arhiva cu driverul descărcat, se conecteaza placa Arduino la calculator printr-un cablu USB, se așteaptă cateva secunde până când driverul este detectat, se selectează instalarea manuală a driverului, se alege calea directorului unde a fost dezarhivat diverul și se da next pănă la finalizarea procesului de instalare. Lansarea programului se face dând dublu clic pe aplicația “Arduino” care se poate găsi,fie pe desktop, fie în meniul “Start” al Windows-ului. Interfața grafică este prezentată în figura următoare.
Fig.2.1 Interfața grafică a softului Arduino
După lansarea programului, trebuie să selectăm portul serial al plăcii Arduino, prin care s-a făcut conectarea la PC, accesăm meniul “Tools -> Serial Port" și alegem portul COM prin care s-a realizat conexiunea. În cazul aplicației realizate de mine, conectarea s-a făcut pe portul COM 3.
Fig.2.2 Selectarea portului de comunicație
Mai jos am prezentat schema bloc de conectare a platformei Arduino cu calculatorul (PC-ul) prin intermediul comunicației seriale COM3.
Fig.2.3 Schema bloc de conectare Arduino
După selectarea portului de comunicație, trebuie selectată platforma Arduino utilizată , accesând meniul "Tools -> Board", în cazul de față, am selectat Arduino Uno.
Fig.2.4 Selectarea plăcii Arduino
După finalizarea acestor pași, ne putem apuca de programarea propriu zisă a microcontrolerului. Programul în Arduino, cuprinde două secțiuni esențiale. O secțiune “setup” în care programul rulează o singură dată când placa Arduino este alimentată și o secțiune “loop” în care programul rulează continuu atâta timp cât placa este alimentată. Un exemplu de astfel de secțiuni, este prezentat mai jos.
void setup() {
…………… //codul scris aici rulează o singură dată
}
void loop() {
…………… //codul scris aici rulează tot timpul.
}
De obicei, într-un program, secțiunea "setup" se folosește pentru inițializare, programul principal fiind scris în secțiunea "loop" .
Programele în Arduino, de obicei, sunt împărțite în trei părți principale: structură, valori (variabile și constante), și funcții. Ca și structură avem: setup(), loop(), structură de control (if, else, for, while, goto, etc), operatori aritmetici (= ,+ ,- ,* ,etc), operatori booleeni (&&,||,!).
În cadrul constantelor întâlnim: HIGH|LOW, INPUT|OUTPUT, true|false, tipuri de date (void,boolean,char,int,long,etc) .
Ca și funcții putem avea:
pentru I/O digitale : pinMode() , digitalWrite() , digitalRead() ,
pentru I/O analogice: analogReference() , analogRead() , analogWrite() – PWM
pentru timp : millis() , micros() , delay() , delayMicroseconds().
funcții matematice : min() , max() , abs() , sqrt().
Funcții trigonometrice : sin() , cos() , tan().
Ca și alte programe de programare și Arduino folosește o serie de biblioteci (librarii) specifice. Dintre acestea cele mai folosite sunt:
EEPROM – citire și scriere de date dintr-o locație specifică stocării datelor;
Ethernet – pentru conectarea la internet folosind Arduino Ethernet Shield;
Firmata – pentru a comunica cu aplicațiile de pe calculator, folosind un protocol serial standard;
GSM – pentru conectarea la o rețea / GRPS GSM cu GSM Shiel;
LiquidCrystal – pentru controlul ecranele cu cristale lichide (LCD);
SD – pentru citirea și scrierea din carduri SD;
Servo – pentru controlul servomotoarelor;
SPI – pentru a comunica cu alte dispositive utilizând: Serial Peripheral Interface(SPI)
SoftwareSerial – pentru comunicație serială pe orice pini digitale;
Stepper – pentru controlul motoarelor pas cu pas;
TFT – pentru text desen, imagini și forme ;
WiFi – pentru conectarea la internet folosind Arduino WiFi shield;
Wire – două Interface Wire (TWI / I2C) pentru trimiterea și primirea de date pe o rețea de dispozitive sau senzori.
Ca și structura generală a programelor, scrise în Arduino și programul aplicației realizate, l-am împarțit în două secțiuni. În prima secțiune “setup”, fiind o secțiune în care programul rulează doar o singură dată când placa este alimentată, am definit porturile de intrare și porturile de ieșire după cum urmează:
void setup()
{
Serial.begin(9600);
pinMode(3,OUTPUT); // reprezintă motorul benzii transportoare;
pinMode(4,OUTPUT); // reprezintă prima pompă;
pinMode(6,OUTPUT); // reprezintă a doua pompă;
pinMode(8,OUTPUT); // reprezintă motorul uscătorului;
pinMode(2,INPUT); // reprezintă primul senzor;
pinMode(5,INPUT); // reprezintă al doilea senzor;
pinMode(7,INPUT); // reprezintă al treilea senzor;
}
Sintaxa Serial.begin(9600) reprezintă rata de transfer pentru comunicația serială, între placa Arduino și calculator. De obicei, această rată de transfer poate fi de: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 sau 115200.
Cu ajutorul funcției pinMode, am definit pinii (porturile) de intrare și pinii (porturile) de ieșire. Pentru aplicația realizată, am definit trei porturi de intrare, reprezentând senzorii și patru porturi de ieșire, reprezentând posturile de lucru.
Pentru ca procesul sa aibă continuitate, iar aplicația sa fie executată cu repetabilitate, structura programului am scris-o în cadrul secvenței “loop”. Pentru a avea o monitorizare continuă a procesului, am introdus funcția Serial.println, care prin intermediul monitorului serial va afișa starea în care se află procesul și posturile care sunt executate în acel moment. De exemplu, pentru banda transportoare, atunci când aceasta este pusă în funcțiune, pe monitorul serial va afișa mesajul:“Merge banda”. Lafel am procedat și pentru celelalte posturi de lucru. Codul care afișează mesajul în monitorul serial este următorul:
Serial.println("Merge banda");
Serial.println("Porneste pompa. 1.");
Serial.println("Porneste pompa. 2.");
Serial.println("Porneste uscătorul.");
Serial.println("Procesul este finalizat.");
Fig.2.5 Monitorul serial
Comanda motoarelor în mediul de programare Arduino se poate face în doua moduri,fie cu funcția analogWrite(),fie cu funcția digitalWrite(). Funcția analogWrite() se folosește atunci când se dorește ca la ieșire să avem o tensiune variabilă,în funcție de dorințele operatorului. Această valoare este cuprinsă între 0 și 255. Cu cât valoarea setată este mai mică de 255, cu atât tensiunea de ieșire este mai mică. Această funcție, am folosit-o în cadrul comenzii motorului benzii transportoare. Până când mașina va ajunge în dreptul primului sensor , aceasta va merge cu viteza maximă, datorită setării valorii maxime de 255 a funcției analogWrite().
analogWrite(3,255); unde 3 reprezintă pinul de ieșire care acționează motorul benzii transportoare;
După finalizarea primului post de înmuiere și spalăre cu detergent, motorul va porni , dar de această dată cu o viteză mai mică decat prima dată, datorită setării valorii de 230.
analogWrite(3,230);
Am ales să setez această valoare mai mică, pentru ca banda transportoare să meargă mai încet,iar până la următorul post de clătire, înmuierea să fie mai eficientă. După finalizarea și postului de clătire , motorul va porni cu viteza maximă 255.
Funcția digitalWrite() cuprinde două componente: HIGH și LOW.
Când se setează HIGH, valoarea generată pe pinul de ieșire va fi cea maximă de 5 V, iar când se setează LOW,valoarea de ieșire va fi de 0.V
Funcția digitalWrite() am folosit-o pentru a comanda cele două electropompe și motorul postului de uscare. Pentru prima electropompă, am setat:
pentru pornire: funcția digitalWrite(4,HIGH); unde 4 reprezintă pinul de ieșire care acționează prima electropompă;
pentru oprire : funcția digitalWrite(4,LOW);
Comanda motoarelor prin intermediul senzorilor am facut-o cu ajutorul unei bucle while. Pentru primul post de înmuiere și spălare am scris următorul cod:
while(digitalRead(2)!=0){
analogWrite(3,255);
}
analogWrite(3,0);
digitalWrite(4,HIGH);
delay(2000);
digitalWrite(4,LOW);
unde: 2 reprezintă primul sensor ;
3 reprezintă motorul benzii transportoare și
4 reprezintă prima pompă.
Atâta timp cât senzorul 1 este diferit de zero (nu este activat), banda rulantă va merge, când senzorul 1 va lua valoarea 0 (zero), banda rulantă se va opri și va porni prima pompă timp de 2 secunde, după care pompa se va opri. În mod asemănător se procedează și pentru celelalte 2 posturi, de clătire și de uscare. După finalizarea întregului ciclu de spălare, procesul se reia automat .
După ce am scris codul programului, înainte de a-l uploada pe platforma Arduino, trebuie sa-l verificăm de eventualele greșeli de sintaxa apărute în scriera programului. Acest lucru îl putem face cu ajutorul compilatorului. Arduino are un compilator propriu care verifică fiecare linie de cod în parte și unde apare o eroare de sintaxa, acesta o raportează. După ce a fost verificat codul de erori, compilatorul transformă codul într-un limbaj compatibil specific platformei Arduino.
Fig.2.6 Compilatorul în Arduino
După ce s-a facut compilarea codului, acesta trebuie uploadat pe platforma Arduino. Uploadarea programului se face ca în Fig 3.7.
Fig.2.7 Uploadarea programului în Arduino
2.2 Mediul de programare grafică LabVIEW
2.2.1. Prezentare generală
LabVIEW reprezintă un mediu grafic puternic de programare, bazat pe nucleul de limbaj G, este utilizat în special pentru construirea de aplicații de control și achiziție de date, analiza acestora și prezentarea rezultatelor oferind o interfață utilizator prietenoasă și ușor de utilizat. Acest mediu de programare este disponibil pe mai multe platforme, Windows, Linux, Sun Solaris, Mac OS. Toate aplicațiile LabVIEW lucrează în regim multithreading, care nu mai necesită o programare suplimentară.
Principala caracteristică a acestui mediu de programare grafică este aceea că utilizează simboluri intuitive și scheme bloc pentru dezvoltarea aplicațiilor , astfel utilizatorul realizează aplicația soft cu ajutorul Instrumentelor Virtuale (VI-urilor). Instrumentele virtuale pot fi reprezentate și sub formă de simbol grafic și ulterior pot fi utilizate în construcția altor aplicații. LabVIEW permite achiziția de semnale de la o varietate de echipamente cu ajutorul driverelor de comunicație, simplificând astfel timpul de dezvoltare a aplicației noi,fără a fi nevoie de a învăța protocoalele de programare specifice fiecarui instrument în parte. O mare parte din driverele de comunicație, folosesc Visual Instrument Software Arhitecture (VISA), pentru comunicarea cu diferite game de bus-uri de comunicație, precum GPIB sau serial, folosind acelasi cod LabVIEW.
Lansarea mediului de programare LabVIEW
Pentru lansarea mediului grafic de programare LabVIEW accesam START – Programs\National Instruments LabVIEW 2010. După accesarea programului va apărea fereastra din figura 3.1.
Figura 2.8 Fereastra principală de lansare LabView.
Pentru deschidere unui nou VI accesăm File\New VI sau New\Blank VI și vor apărea ferestrele din figura 3.2.
Figura 2.9 Panoul și diagrama din LabVIEW.
Panoul Frontal (Front Panel) reprezintă interfața grafică cu utilizatorul, în care acesta va introduce datele de intrare și în urma rulării programului vor fi afișate datele de ieșire.
Diagrama Bloc (Block Diagram) reprezintă fereastra în care programatorul realizează raționamentele necesare pentru prelucrarea informațiilor și algoritmul după care aplicația va efectua calculele. După realizarea unei aplicații doar programatorul mai are acces la diagrama bloc.
Paleta de controale (controls) reprezintă fereastra care apare doar în cadrul panoului frontal și conține sub-palete cu elemente de control și indicatoare de diferite tipuri .
Afișarea și accesarea paletei de controale se face în două moduri:
apăsând click dreapta cu mouse-ului pe interfața panoului, sub-paletele deschizându-se automat la trecerea cursorului mousului pe deasupra lor. Paleta va rămâne vizibilă, doar până la selectarea unui element.
Figura 2.10 Paleta de controale accesată din interfață .
din meniul View -> Controls Palette. În acest caz, sub-paleta se deschide doar când se dă clic pe simbolul său. Paleta rămâne vizibilă și după selectarea unui element.
Figura 2.11 Paleta de controale accesata din meniu .
Paleta de unelte este o fereastră comună, care apare atât în cadrul panoului, cât și al diagramei. Afișarea acestei palete se face din meniul View, comanda Tools Pallete .
Figura 2.12 Paleta de unelte .
Paleta de funcții este fereastra ce apare numai în cadrul diagramei și conține sub-palete cu categorii diferite de funcții, structuri specifice de programare sau proceduri .
Afișarea paletei de funcții se poate face în două moduri:
apăsând click dreapta cu mouse-ului într-o zonă liberă a diagramei, sub-paletele deschizându-se automat la trecerea cursorului mousului pe deasupra lor. Paleta rămâne vizibilă doar până la selectarea unei funcții.
accesând, din meniul View, comanda Functions Palette .În cazul acesta, sub-paleta se deschide doar când se face un clic pe simbolul său. Paleta rămâne vizibilă și după selectarea unei funcții.
Figura 2.13 Paleta de funcții .
Principalele moduri de rulare a unei aplicații
Modul de rulare a unui program este stabilit de următoarele butoane aparente în toolbarul panoului și diagramei.
Figura 2.14 Bara de butoane a panoului și a diagramei.
Fereastra Help
Fereastra help ajută utilizatorul să afle cu ușurință informații despre anumite funcții și simboluri pe care nu le cunoaște. Când fereastra help este activată, punem cursorul mousului deasupra simbolului sau funcției pe care nu o cunoaștem iar in fereastra help ne apar informații despre acea funcție sau acel simbol.
Figura 2.15 Help-ul mediului LabVIEW.
Crearea unei pictograme în labVIEW și folosirea acesteia.
Fiecare VI creat, afișează o pictogramă în colțul din dreapta sus al panoului frontal. O pictogramă, este o reprezentare grafică a unui VI. Aceasta poate conține text, imagini, sau o combinație a celor două. Dacă se utilizează VI-ul ca un subVI, pictograma identifică subVI-ul pe diagrama bloc a VI-ului. Pictograma se poate personaliza, făcând un dublu clic pe aceasta.
Structurile și buclele folosite în labVIEW
Structurile cele mai des folosite în labVIEW sunt:
For – execută un subprogram de un anumit număr de ori;
While – execută un subprogram, când este îndeplinită o condiție;
Case – conține mai multe subprograme, dintre care numai unul se execută în funcție de valoarea de intrare trecută pe structură;
Sequence structure (structura secvențială) – conține unul sau mai multe subprograme, care se execută secvențial;
Formula Node – efectuează operații matematice bazate pe intrări numerice;
Bucla For
Bucla for se folosește în aplicațiile unde se dorește repetarea unui subprogram de un anumit număr de ori.
Figura 2.16 Bucla For în LabVIEW.
În exemplul din imaginea de mai sus, i-am dat lui N valoarea 100, asta înseamnă ca subprogramul scris în interiorul buclei, se va repeta până când N va lua valoarea 100.
Schema logică a buclei for este următoarea:
Figura 2.17 Schema logică a buclei for
Logica buclei for este următoarea: îi setam lui N o valoare dorită, procesul începe de la i=0 și va verifica de fiecare dată dacă i=N până când această relație va deveni adevărată. Dacă i ≠ N, atunci valoarea i va fi incrementată cu o unitate și va deveni i=i+1, după care se va face din nou verificarea dacă relația devine adevărată. Daca relația tot nu este adevărată procesul se repetă până când relația va deveni adevărată.
Bucla While
Bucla while execută un subprogram când este îndeplinită o condiție.
Figura 2.18 Bucla While în LabVIEW.
În cadrul buclei while, subprogramul care se află în interiorul buclei se repetă până când valoarea booleană legată la terminalul condiționat este adevărată (TRUE).
Schema logică a buclei while este următoarea:
Figura 2.19 Schema logică a buclei while
Logica buclei while este următoarea: se verifică valoarea din terminalul condițional la sfârșitul fiecărei repetiții. Dacă valoarea este FALSE (negativă), condiția nu este îndeplinită și apare o altă repetiție. Dacă valoarea este TRUE (adevărată) atunci se iese din bucla while.
În cadrul buclei While, se poate schimba starea pe care terminalul condițional o verifică, astfel se poate seta ca structura să se repete când valoarea este TRUE (adevărată) și să se oprească când valoarea este FALSE (negativă). Astfel bucla while arată ca în figura următoare:
Figura 2.20 Bucla While când „Continue if TRUE”
Structura Case
Structura case conține una sau mai multe subprograme, dintre care numai unul se execută în funcție de valoarea de intrare trecută pe structură.
Figura 2.21 Structura case în labVIEW
Logica structurii case este următoarea :
Dacă condiția este realizată
Atunci
Execută diagrama din interiorul structurii True
Dacă nu
Executa diagrama din interiorul structurii False
Sequence structure (structura secvențială)
O structură secvențială conține una sau mai multe subprograme, sau cadre, care vor fi
executate în ordine secvențială. În labVIEW există două tipuri de structură secvențială: “Flat Sequence Structure” și “Stacked Sequence Structure”.
Structura secvențială plată (Flat Sequence Structure) este utilizată, pentru a asigura execuția unei subdiagrame, înainte sau după o altă subdiagramă. Pentru a adăuga o nouă structură secvențială,în interiorul structurii mari, se da click dreapta pe chenarul structurii, și se alege “Add Frame Before” sau ”Add Frame After”. Structurile secvențiale plate, sunt executate de la stânga la dreapta.
Figura 2.22 Structura secvențială plată în labVIEW
Structura secvențială stivă (Stacked Sequence Structure), spre deosebire de cea plată, aceasta conține doar o singură fereastră vizibilă. Adăugarea mai multor ferestre se face lafel ca în cazul structurii secvențiale plate, doar că în cazul secvenței stive, ferestrele primesc indici începând de la 0 și nu mai sunt vizibile toate în aceeași fereastră.
Figura 2.23 Structura secvențială stivă în labVIEW
Formula Node
Formula Nod este o structură bazată pe text, care se poate utiliza pentru a efectua
operații matematice pe diagrama bloc. Această secvență este utilă pentru ecuații care au multe variabile, sau care sunt mai complicate de realizat.
Figura 2.24 Structura Formula Node în labVIEW
Avantajele utilizării de formule de calcul în labVIEW sunt urmatoarele:
– ușurează scrierea formulelor matematice cât și întelegerea acestora;
– elimină erorile, apărute la scrierea formulelor matematice in limbajul grafic ;
– ocupă mai puțin loc în diagrama bloc, fața de cazul implementării prin noduri si fire;
Implementarea unui sistem de achiziție de date.
Pentru a implementa un sistem de achiziție de date, trebuie mai întâi, să definim canalele virtuale care corespund canalelor reale ale plăcii de achiziție. Definirea acestor canale se realizează și se testează prin programul „Measurement & Automation Explorer”,, executându-se pașii următori:
Start → Programs → National Instruments → Measurement and Automation
Figura 2.24 Lansarea programului “Measurement and Automation”
Din fereastra Configuration → My System → Data Neighborhood, dăm clic dreapta → Create New → Fereastra Create New → Global Virtual Chanel → Finish.
Figura 2.25 Fereastra “Global Virtual Chanel”
În fereastra „Create New Channel” se setează tipul canalului: Analog Input, Analog Output sau Digital I/O, după care, în fereastra „Enter Chanel Name and Description” se introduce un nume descriptiv pentru canal și o scurtă descriere a lui, după care se trece la fereastra „Chanel Wizard” în care se specifică:
tipul mărimii măsurate (tensiune, curent, rezistență, frecvență, termocuplu și termorezistență de diferite tipuri);
domeniul de măsură (valoarea minimă și maximă);
tipul plăcii de achiziție de date;
tipul de conectare la canalul utilizat (terminație unică, diferențială);
unitatea de măsură (volți, amperi, ohmi, Hz);
tipul de scală (implicit „No scaling”);
numărul canalului real utilizat;
De fiecare dată când se definește un nou canal virtual trebuiesc parcurși toți acești pași iar numele acestora se vor utilizate în panoul de control al aplicației LabView pentru identificarea lor.
Funcții de achiziție – comandă.
Când se lucrează cu placa de achiziție de date, rolul celor două părți ale aplicației sunt următoarele:
panoul de control , acesta realizează interfața dintre programator/operator și LabView;
diagrama de blocuri, aceasta realizează interfața dintre LabView și semnalele de intrare/ieșire din placa de achiziție (partea hardware).
Blocurile de achiziție permit achiziția (comanda) mărimilor de proces prin funcții dedicate. Ele pot achiziționa/comanda următoarele mărimi:
mărimi analogice care corespund unei tensiuni echivalente a unei mărimii fizice măsurate/comandate .
mărimi binare care corespund datelor cu acest tip de reprezentare.
LabVIEW oferă o bogată paletă de funcții de achiziție/comandă.Aceste funcții sunt sub-VI-uri concepute astfel încât să efectueze configurarea plăcii de achiziții, să citească datele sau să le trimită pe canalele plăcii și să proceseze apoi aceste informații analogice sau binare după strategia de control prestabilită.
Figura 2.26 Fereastra de palete cu blocuri pentru achiziție de date
și comandă de semnale
Achiziția poate să fie continuă datorită posibilităților hardware pe care le oferă placa de achiziție, sau pot fi realizate prin implementarea unui VI care să trimită periodic, la citirea unuia sau mai multor canale de achiziție.
Datele achiziționate pot fi valori numerice simple, vectori de valori numerice sau pot fi variabile speciale de tip formă de undă (waveform) care rețin și instanța temporală a achiziției.
2.2.2. Programul în labVIEW.
Primul pas pe care l-am făcut în realizarea programului în labVIEW, a fost să fac un „Test Panels” asupra fiecărei intrări și ieșiri. Definirea porturilor de intrare și ieșire de pe placa de achiziție este următoarea.Pinii P0.6 și P0.7 sunt porturile care acționează motorul benzi transportoare. Pinii P0.2 și P0.3 acționează electropompa 1. Pinii P0.4 și P0.5 sunt pinii care acționează a doua electropompă. Motorul postului de uscare l-am definit ca port analog A0.1. Primul senzor l-am definit pe portul P1.3, senzorul 2 pe portul P1.1,iar ultimul senzor pe portul P1.2 . Pentru fiecare post de spălare am folosit câte două porturi de ieșire,datorită curentului mic pe care il generează placa de achiziție pe pin, astfel curentul fiind insuficient pentru a putea comanda motoarele.
După ce am realizat fizic, montarea porturilor pe placa de achiziție, am conectat placa la calculator, conexiunea s-a facut prin portul Dev2.
Fig.2.27 Schema bloc de conectare DAQ-6008
Folosind programul “Measurement & Automation Explorer”, am testat fiecare port în parte pentru a vedea dacă conexiunea fizică s-a făcut cu succes și dacă procesul funcționează în condiții optime. Am definit două porturi: port0 și port1. Portul, Port0 l-am folosit pentru senzori (porturi de intrare) iar Port1 ca porturi de ieșire pentru acționarea motoarelor. În cadrul Port 1 am definit 4 linii (0:3), iar în cadrul Port 0 am definit 8 linii (0:7)
Fig.2.28 Configurare Port0
Fig.2.29 Configurare Port1
După definirea porturilor și a liniilor aferente acestora, am trecut la scrierea programului în labVIEW și la realizarea interfeței grafice.
Primul pas pe care l-am făcut în realizarea programului a fost sa inserez câte un canal virtual pentru fiecare intrare și ieșire în parte și să le conectez la câte un canal fizic ca în Fig.2.30.
Fig.2.30 Creare unui canal virtual
După cum se observă din figura de mai sus am creat 3 canale virtuale și le-am legat la câte un canal fizic. Prima linie reprezintă senzorii, iar celelalte doua motorul benzii transportoare. Canalele fizice le-am configurat în funcție de configurația pinilor de pe placa de achiziție. De exemplu, în cazul senzorilor avem : Dev2/ port1/line 0:3; unde: Dev2 reprezintă portul comunicației seriale cu calculatorul,port1 reprezintă portul configurat în “Measurement & Automation Explorer”, iar line 0:3 reprezintă liniile (porturile) pe care sunt montați senzorii. Am folosit un singur canal pentru toate liniile de senzori. În cazul ieșirilor, am procedat asemănator , doar că am folosit câte un singur canal pentru fiecare linie. Pentru motorul uscatorului, fiind montat la pinul analogic A0.1, am creat un canal virtual și i-am presetat valoarea maximă de 5V și valoarea minimă de 0V, iar la canalul fizic am ales analog output 1 (ao1).
Fig.2.31 Creare unui canal virtual pentru iesire analogică
După ce am realizat definirea fiecarui canal fizic și virtual,în cadrul unei bucle while am scris programul ce face legătura dintre senzori și posturile de lucru. Pentru ca fiecare post de lucru în parte să se execute secvențial de la stânga la dreapta și să nu existe probleme în pornirea simultana a mai multor posturi sau a unui alt post înainte celui care trebuie am folosit structura secvențială plată (Flat Sequence Structure)
Fig.2.32 Flat Sequence Structure
În primul cadru al structurii secvențiale am folosit pentru fiecare post de lucru în parte câte un bloc “Digital Bool 1Line 1Point”. Acest bloc scrie o singură probă de valori booleene pentru o sarcină care conține un singur canal de ieșire digitală. Când un post este activat (este TRUE), celelalte posturi sunt oprite (sunt pe FALSE).
Fig.2.33 Digital Bool 1Line 1Point
În cel de-al doilea cadru am folosit o structură case în interiorul căreia am utilizat o structură secvențială plată cu 3 cadre. Rolul acestei structuri este de a executa subprogramul din secvența structurată plată atunci când condiția de la intrare este adevărată și de a executa subprogramul când condiția de la intrare este falsă. În cadrul acestei structuri am folosit și o temporizare de 4 secunde reprezentănd timpul de lucru al postului de lucru curent.
Fig.2.34 Structura case din cadrul primului post de lucru
În cadrul celorlalte două posturi de lucru am procedat asemănător primului post. După realizarea structurii tuturor posturilor de lucru după bucla While am introdus câte un bloc “DAQmx Clear Task” care șterge sarcinile create anterior pentru a evita alocarea memoriei inutile.
În interfața grafică am folosit un buton care oprește întregul proces și un bloc “Boolean Data Read” care afișează prin intermediul unui bec ce post de lucru este acționat în acel timp. Deasemeni, tot pe interfață am introdus și un program care afișează ora curentă. Programul este format dintr-o buclă while în interiorul căreia am pus un bloc “Format Date/Time String Function” și o temporizare de o secundă .
Interfața grafică este prezentată în figura de mai jos.
Fig.2.35 Interfața grafică a aplicației realizate
CAPITOLUL 3
CONCLUZII
Lucrarea de față a avut ca temă, automatizarea unei stații de spălat autovehicule. După cum s-a menționat, încă de la început, automatizarea a cunoscut o dezvoltare deosebită mai ales în ultimul deceniu, în mai toate domeniile de activitate. Ideea de automatizare apărută și în cazul stațiilor de spălat autovehicule, a adus o serie de avantaje dar și dezavantaje. Cel mai mare avantaj în cadrul unei stații automatizate este rapiditatea cu care se execută procesul de spălare. Clienții noi care vin, știu exact cât timp mai au de așteptat pană cand mașina lor va intra în posturile de spălare și cât va dura până la finalizarea procesului de spălare. Stațiile neautomatizate, în care omul execută manual procesul de spălare, sunt lente și nu pot garanta niciodată un timp fix de spălare, sau cât timp mai durează pană ce următorul client va începe și la el procesul de spălare. Practic, spre deosebire de stațiile neautomatizate, în care operatorul uman la diferite intervale de timp are pauză, în cadrul stațiilor automatizate procesul de spălare poate funcționa nonstop.Un alt avantaj pe care îl oferă stațiile automate, este acela că eficiența de spălare este foarte bună spre deosebire de stațiile neautomatizate, iar mașinile cand ies din postul de uscare sunt perfect uscate. Un dezavantaj al acestui proces de automatizare ar fi acela că dacă se întamplă ca un senzor sau o pompă sa nu mai funcționeze,sau alimentarea cu energie electrică să se întrerupă, atunci întreg fluxul de spălare va fi întrerupt, iar procesul va fi reluat doar după ce un operator uman va rezolva problema și va reporni procesul.
În prezenta lucrare, am încercat să realizez modul de automatizare a unei stații de spălat autovehicule, prin două medii de programare diferite, Arduino si labVIEW. Am ales să folosesc ambele medii de programare deoarece fiecare mediu de programare are atât avantaje cât și dezavantaje. Mediul Arduino este un mediu de programare usor de înțeles și ușor de folosit, structura programelor fiind foarte simplă. Arduino, spre deosebire de labVIEW, este un mediu de programare creat pentru cei care nu au cunoștinte foarte mari în programare. Modul de programare în Arduino este pe bază de cod. Spre deosebire de Arduino, labVIEW este un mediu grafic de programare, programarea se face în mod grafic,nefiind nevoie de a scrie cod. Un avantaj pe care îl are labVIEW față de Arduino este interfața grafică,în care putem afișa grafice și putem vedea evoluția în timp a unui proces. Cu ajutorul interfeței din labVIEW putem accesa și alte fișiere externe de pe calculator, de pe un server sau de pe o adresă de internet, lucru pe care Arduino nu îl poate face. În schimb, Arduino prevede un microcontroler care poate fi programa, odată uploadat programul în memoria nevolatilă a microcontrolerului, acesta se poate executa fără a mai fi nevoie de o conexiune la calculator, lucru pe care labVIEW nu îl poate face. Comanda procesului în labVIEW se poate face doar din interfața grafică a programului. Un alt avantaj pe care il are labVIEW este ca poate lucra și în modul “Real Time”(în timp real). Spre deosebire de Arduino, în labVIEW datele achiziționate pot fi salvate, prelucrate și afișate sub diverse forme (tabele, grafice). LabVIEW se poate folosi și în locuri greu accesibile de om pentru a achiziționa date și a le trimite pe internet către un server unde ulterior vor fi monitorizate si stocate într-o bază de date. O diferență majoră între labVIEW si Arduino este legată de modul de programare. Programele în Arduino au aceeași structură ,sunt simple, scurte și flexibile, se pot modifica foarte ușor de la un proces la altul, fără a fi nevoie sa o luăm de la capăt cu programarea, pe când programul în labVIEW este mult mai stufos, necesită cunoștințe mai amănunțite de programare, iar pentru a programa un alt proces, programarea se face aproape de la început.
În consecință, ambele medii de programare mi se par folositoare și utile pentru a pune în funcțiune o automatizare fără a cheltui foarte mulți bani, modulele de achiziție fiind destul de accesibile la preț, pentru funcționarea pe care o pot avea.
BIBLIOGRAFIE
C. Cepișcă, M. Veyssiere, Condiționarea senzorilor și a semnalelor, Editura ICPE, București, 1995
Cornel Cobianu și Valerică Cimpoca , Senzori și traductoare, Ed. Printech, București, 2001;
F. Coteț, O. Ciobanu, Bazele programării în LabVIEW, Editura Matrix, București, 1998;
H.G. Coandă – Curs Circuite Electronice;
I.Lupea, LabVIEW Programare grafică,Editura Risoprint,Cluj-Napoca,2004;
J. M. R. Gutiérrez – Labview + Arduino, ver 1.0 ,2012
L.Kreindler, R.Giuclea, Bazele microprocesoarelor, Edtura Matrix,București ,1997;
M.Giugudean, Proiectarea unor circuite electronice,Editura Facla,Timișoara,1983;
M. Mâinea- Curs Senzori și Traductoare;
*** http://e-automobile.ro/categorie-electronica/106-senzor-hall.html;
*** http://www.electrical4u.com/construction-of-dc-motor-yoke-poles-armature-field-winding-commutator-brushes-of-dc-motor/;
*** http://www.technologystudent.com/elec1/transis1.htm;
*** http://www.ni.com/pdf/manuals/320999e.pdf;
*** http://www.ladyada.net/learn/arduino/lesson1.html;
*** http://arduino.cc/en/Main/arduinoBoardUno;
***http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries;
BIBLIOGRAFIE
C. Cepișcă, M. Veyssiere, Condiționarea senzorilor și a semnalelor, Editura ICPE, București, 1995
Cornel Cobianu și Valerică Cimpoca , Senzori și traductoare, Ed. Printech, București, 2001;
F. Coteț, O. Ciobanu, Bazele programării în LabVIEW, Editura Matrix, București, 1998;
H.G. Coandă – Curs Circuite Electronice;
I.Lupea, LabVIEW Programare grafică,Editura Risoprint,Cluj-Napoca,2004;
J. M. R. Gutiérrez – Labview + Arduino, ver 1.0 ,2012
L.Kreindler, R.Giuclea, Bazele microprocesoarelor, Edtura Matrix,București ,1997;
M.Giugudean, Proiectarea unor circuite electronice,Editura Facla,Timișoara,1983;
M. Mâinea- Curs Senzori și Traductoare;
*** http://e-automobile.ro/categorie-electronica/106-senzor-hall.html;
*** http://www.electrical4u.com/construction-of-dc-motor-yoke-poles-armature-field-winding-commutator-brushes-of-dc-motor/;
*** http://www.technologystudent.com/elec1/transis1.htm;
*** http://www.ni.com/pdf/manuals/320999e.pdf;
*** http://www.ladyada.net/learn/arduino/lesson1.html;
*** http://arduino.cc/en/Main/arduinoBoardUno;
***http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries;
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Statie Automata DE Spalat Autovehicule (ID: 163734)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
