Jump to content
ELFORUM - Forumul electronistilor
Sign in to follow this  
Guest AndreiAndrei

Citire date de pe 2 senzori si generarea unui grafic

Recommended Posts

Guest AndreiAndrei

Sunt incepator in domeniu.

Vreau sa simulez un banc care sa-mi arate dezechilibru unui rotor cu ajutorul Arduino. Intentionezi sa fac asta cu 2 senzori:

un accelerometru piezoelectric, care sa-mi arate cat de mare este dezechilibru (probabil amplituda)

si un sensor de turatie , cred ca magnetic (sau optic daca este posibil)

In functie de aceste valori vreau sa generez un graphic (pe PC su pe un display) care imi arata in ce turatie ce dezechilibru am.

Daca nu se poate face cu arduino accept orice alt controller, dar sa pot intelege si eu cum se intampla lucrurile astea.

sunt dispus sa platesc pentru proiectul respectiv 200 E.

0722628845

 

Multumesc

Edited by AndreiAndrei

Share this post


Link to post
Share on other sites

Andrei de ce nu incerci sa iti faci proiectul singur?

 

Primul post si in care ceri realizarea unui proiect. Banuiesc ca este vorba de un proiect la facultate.

De vreme ce ai intrat la o facultate de acest gen, poate ca ai putea sa si inveti cate ceva ... Proiectele de acest gen sunt cele care te ajuta sa intelegi ce ai invatat (teoretic) si mai apoi, dupa ce termini facultatea, sa ai un job in care sa fii bine remunerat.

Ca sa nu spun ca nu este corect sa foloseti banii parintilor pentru ca nu vrei sa muncesti putin.

 

Nu este atat de greu daca vei aloca putin timp.

Si da, poti folosi Arduino pentru a achizitiona datele de la 2 senzori si sa le trimiti catre PC cu ajutorul unui convertor USB la serial.

 

De citit: 

http://www.maintenancetechnology.com/2008/03/measuring-displacement-using-accelerometers/

http://elimelecsarduinoprojects.blogspot.ro/2013/06/measure-rpms-arduino.html

http://www.egr.msu.edu/classes/ece480/capstone/spring11/group03/Application%20Note.pdf

 

http://www.instructables.com/id/Arduino-Based-Optical-Tachometer/

 

Un exemplu cum plotezi datele pe PC:

https://www.arduino.cc/en/Tutorial/Graph

 

Gasesti pe Internet tot ce vrei, doar sa cauti ...

Edited by mars01

Share this post


Link to post
Share on other sites
Guest AndreiAndrei

Multumesc mult pentru incurajare!!!

 

M-am si apucat de treaba.

Share this post


Link to post
Share on other sites

Poti, bineinteles, pune intrebari punctuale despre lucrurile care nu-ti merg cum trebuie. O sa descoperi ca la "gasit gandaci" in proiecte suntem mai saritori decat la facut proiecte "de-a gata". E suficient sa-ti demonstrezi implicarea.

 

PS  Daca postul anterior a fost o "ironie fina", ignora postul asta.

Share this post


Link to post
Share on other sites

Eu am luat in serios postul tau, dar imi prin urechile in processing. Am un singur senzor analogic care trimite pe serial. Obtin un grafic, dar nu stiu cum sa fac sa-l salvez intr-un fisier.

Asta ar fi problema, salvarea graficului pentru o consultare, prelucrare ulterioara.

Share this post


Link to post
Share on other sites

Eu as zice sa-ti faci topicul propriu si sa fii putin mai explicit.

Momentan eu am inteles ca arduino + senzorul functioneaza ok si trimit datele la pc, ce-ti lipseste fiind un program in calculator care sa salveze datele primite pentru prelucrari ulterioare.

Daca e asa, nu e nici sectiunea potrivita. :)

Share this post


Link to post
Share on other sites

Un link pentru o librarie Processing, cu ajutorul careia vei putea afisa datele primite de la Arduino, intr-un grafic.

http://www.gicentre.net/utils/chart

 

Practic tot ce ai de facut in Processing este sa salvezi datele primite (nivel vibratii motor, RPM motor) in cate un vector. Cei doi vectori ii vei plota cu functiile oferite de librarie, afisand de exemplu datele de vibratie pe  axa Y si turatia pe axa X.

Datele le salvezi pe masura ce vin intr-un fisier folosind solutiile de mai sus.

 

Un grafic aiurea, modificand exemplul oferit.

 

Posted Image

Edited by mars01

Share this post


Link to post
Share on other sites
Guest AndreiAndrei

Am inceput studiul cu graficul celor 2 senzori si m-am proptit in viteza de citire a datelor cu arduino.

Ca sa fiu mai inteles voi povesti cum trebuie sa functioneze bancul respectiv:

se pune rotorul pe banc si se tureaza cu presiune mare de aer (9 bari.)

testul dureaza in medie 1-3 secunde, in timpul asta rotorul ajunde la 240 000 turatii pe minut, adica 3000 turatii pe secunda.

cand s-a terminat testul pe ecran trebuie sa apara graficul (x,y) cu ce dezechilibru (pe axa y) si in ce turatie (pe axa x) il are rotorul respectiv. La fel trebuie sa apara si unghiul de dezechilibru.

Eu inteleg ca trebuie sa procedez in felul urmator:

trebuie sa pot citi 3000 de turatii pe secunda plus sa gasesc si unghiul unde dezechilibru este maxim. O turatie are 360 grade, adica trebuie sa citesc fiecare grad al fiecarei turatii. De aici inteleg asa 3000(turatii pe secunda) x 360 (grade a fiecarei turatii) =1080000 de masuratori pe secunda.

 

am gasit la arduino functia micros(cred ca e vorba de microsecunde)

am incarcat pe un aduino uno urmatorul skech:

 

unsigned long time;void setup(){  Serial.begin(9600);}void loop(){  Serial.print("Time: ");  time = micros();  //prints time since program started  Serial.println(time);

 

 si am primit in serial monitor urmatoarele rezultate (afisez o parte din ele)

 

Time: 103044Time: 117604Time: 132164Time: 146724Time: 161284Time: 175844Time: 190404Time: 204964

 

de aici vad ca arduino face masuratorile aproximativ la  14560 microsecunde sau 14.56 milisecunde  sau 0.01456 secunde , adica aproximativ de 68 de ori pe secunda,

iar mie imi trebuie  1080000 de masuratori pe secunda .

 

Aici m-am si blocat putin.

Cine vede ca sunt pe un drum gresit va rog sa ma corecteze si sa ma invete cum se face.

Multumesc tuturor !!!

 

 

Share this post


Link to post
Share on other sites

Comunicatia seriala (mai ales ca ai configurat-o la 9600 bauzi) e lenta, nu te baza pe ea pentru "benchmark".

Din pacate tema nu pare prea usoara. Cel putin nu pentru mine.

Ceva detalii (foi de catalog) pentru senzori ai?

Share this post


Link to post
Share on other sites

Problema ta nu sta in comunicatia datelor catre PC. Pur si simplu salvezi datele intr-un buffer intr-o memorie RAM (poate fi si externa, SPI) si la final (dupa cele 3 secunde de achizitie de date) , cand ai toate datele necesare, le trimiti catre PC cu numai conteaza ce viteza. Important este ca datele vor ajunge la PC si pe urma se ploteaza graficul.

 

Adevarata problema sta in senzorul de vibratii (accelerometru) ... nu cred ca o sa gasesti ceva accesibil care sa iti ofere un rezultat pe microsecunda adica o frecventa de esantionare mai mare de 1MHz.

Cel mai probabil va trebui sa folosesti un algoritm de gasire a unui maxim printr-o "cautare" mai intai bruta, si care o faci din ce in ce mai rafinata. Vibratiile se vor manifesta cel mai probabil sub forma unui clopot Gauss cea ce inseamna ca vei putea detecta cam pe unde ai vibratii. Oricum ingineria se bazeaza pe "aproximativ" (adica suficient de precis)  si nu pe 100% exact (ideal).

Partea cu unghiul este mai dificila dar ai putea sa gasesti mai intai RPM-ul unde se manifesta vibratia iar apoi sa te folosesti de un timer pentru a declansa cate o masuratoare pentru unghiuri diferite (turatia se presupune ca este constanta pe timpul masurarii)

 

[LE - nu trebuie sa faci cele 360 de masuratori intr-o singura rotatie ...]

 

Si probabil va trebui sa te orientezi catre Arduino Due (controller ARM Cortex M3) sau un Maple si sa te folosesti de DMA.

Probabil ca pentru citirea vitezei vei avea nevoie de un disc perforat cu 360 de orificii si trebuie gasit un senzor optic suficient de rapid.

 

Cum spunea Liviu, cu datele oferite de tine in ultimul post, pare un proiect dificil (cel putin dpdv al senzorilor).

Edited by mars01

Share this post


Link to post
Share on other sites
Guest AndreiAndrei

Eu am acces la un asemenea banc de la care ne putem inspira.

am gasit senzorul de vibratii exact care sta pe bancul respectiv, atasez caracteristicile in linkul de mai jos.

http://i63.tinypic.com/4fu592.jpg

 

Accelerometrul respectiv reactioneaza pana la 8khz, dar mie imi sunt suficienti si 3khz, pentru ca turatia maxima va fi de 3000/sec, adica dupa cum inteleg eu senzorul da un impuls in puctul de dezechilibru la fiecare turatie (asa cred eu). Turatia este in crestere pana la 3000/s De aceea ma gandesc ca trebuie sa fac cat mai multe masuratori in timpul fiecarei turatii ca sa pot prinde acest impuls si sa aflu si unghiul in care el a fost dat.

 

senzorul magnetic de citire a turatiilor arata ca in schita de mai jos:

 

http://tinypic.com/view.php?pic=f9qbz7&s=9#.VyL_OWdJnVI

http://i67.tinypic.com/f9qbz7.jpg

 

el a fost confectionat manual de baetii care au facut bancul.

 

functioneaza in felul urmator: se magnitizeaza varful rotorului (aici se stabileste si punctul zero de unde incepe numaratoarea) si in timp ce el se roteste la 'gura' senzorului (fiind rotorul magnetizat) da impulsuri electrice in spirele care se vad in desen. Acest curent cred ca trebuie intii amplificat, filtrat si citit. pentru amplificare mi-a recomandat cineva sa folosesc MAX5354CUA+ dau si link catre el  http://www.tme.eu/en/katalog/#id_category=112878&search=max5354&s_field=accuracy&s_order=DESC&page=1&currency=EUR

 

Pe rotor nu pot agata nimic, pentru ca lucrul respectiv ii va induce un dezechilibru, care imi va arata gresit unghiul.

La baietii care au facut bancul respectiv graficul merge in timp real (poate ofera si asta vre-un indiciu)

 

mai jos pun o poza care am facut-o la circuite , poate sugereaza cuiva vre-o idee. intrarile de jos sunt de la senzori si cea din dreapta pleaca la PC.

controlerul mare este un Atmega 162 16PU.

 

http://i67.tinypic.com/xfdmbd.png

http://tinypic.com/view.php?pic=xfdmbd&s=9#.VyMGgWdJnVI

 

Daca eu ceva nu inteleg corect va rog sa ma corectati !

Multumesc tuturor !!!

Edited by AndreiAndrei

Share this post


Link to post
Share on other sites

Ce sa zic.

Daca graficul celorlalti este real time, adica ceva de genul:

http://www.openprocessing.org/sketch/136774

(click in dreptunghiul care apare in centru si apoi tine apasata o tasta, spre exemplu "s", tasta are rol de sursa de informatie)

 

atunci in mod clar ei nu trimiteau toate datele achizitionate de senzori catre PC. Cel putin un Atmega nu face fata la acel volum de date. Chiar si controlere mai potente se folosesc de DMA pentru a lasa procesorul sa mai faca si altceva.

Faptul ca se folosesc de comunicatia UART arata ca volumul de date este totusi redus, sub 500KB/sec. Si arata ca in algoritmul de achizitie de date se fac unele simplificari.

 

IC-ul MAX5354 este un convertor ADC (analog to digital) si nu este propriuzis un amplificator (desi contine totusi un buffer in el). Rolul lui este sa faca informatia de turatie procesabila digital. Probabil ca cu cat turatia este mai mare cu atat curentul generat in solenoid este mai mare si tensiunea masurata de ADC este astfel mai mare. Nu stiu cat de lineara este curba tensiune_solenoid/viteza ca sa ai o precizie buna.

 

Ai control asupra presiunii aerului? Adica poti controla viteza de rotatie a rotorului? Sau odata ce incepi sa sufli .... sufli pana numai poate :)

Share this post


Link to post
Share on other sites
Guest AndreiAndrei

Aerul vine dintr-o butelie de 600L, care in cateva secunde  ii scade presiunea si mai departe nu mai poate tura. (suflu pana nu mai poate:))

Graficul merge exact ca in aplicatia pe care mi-ati aratat-o.

 

Referitor la solenoid eu credeam ca acolo curentul apare si dispare (sau isi schimba polaritatea) in functie de polii '+' si '-' care se rotesc in apropiere de sensor. 

Va arat pozitia in care citeste in desenul de mai jos. 

 

http://i66.tinypic.com/2eq98jb.jpg

http://tinypic.com/view.php?pic=2eq98jb&s=9#.VyM71mdJnIU

 

Si sta la o distanta 7-10 mm fata de sensor si tot citeste.

Share this post


Link to post
Share on other sites

Bine, dar in acest caz numai vad sensul folosirii unui ADC ...  LE: poate doar daca in software urmaresti o chestie calitativa, un fel de "comparator" digital - daca adc-ul intoarce o valoare peste o valoare prag atunci ai un eveniment (rotatie), eliminandu-se "zgomotul".

 

Feeling-ul meu este ca de fapt nu este nevoie ca datele sa fie atat de precise, gen la turatia de 2501 RPM ai vibratia cutare sau cutare. Mai degraba o estimare din 50 in 50 de rotatii sau chiar mai grosier si pe urma eventual o interpolare, mediere. E foarte probabil ca o vibratie nu se manifesta atat de localizat ci este un fenomen cu o distributie asemanatoare cu un clopot Gauss, centrat la o anumita turatie. 

La aceasta ma refeream cand am amintit de simplificari.

Ar trebui sa afli intre ce limite trebuie sa te inscrii, asa numitele "design inputs".

Edited by mars01

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines