Pages: [1]   Go Down
Author Topic: misurare RPM elica  (Read 1350 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
avrei la necesstità di misurare gli RPM di un'elica, e mi stavo chiedendo quale fosse il metodo ideale. In particolare pensavo qualcosa stile fotocellula.
siamo intorno ai 7500 RPM al massimo, che con un elica bipala da circa 15000 passaggi al minuto. possiedo anche una tripala, quindi se il sensore arriva a 22500 passaggi al minuto sarebbe fantastico.

Vorrei che l'uscita del sensore fosse digitale, in modo da evitare il più possibile interferenze o analisi dei dati.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12571
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

22500rpm sono 375Hz, quindi penso che un LED IR ed un TSSOP del tipo ad impulsi dovrebbero risolverti il problema
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sì, alla fine ho usato un led IR (prima di aprire il post avevo provato con un comune led ma con scarsissimi risultati, troppo rumore) ma con il prescaler a 16 (circa 11000 letture al secondo)

poi i dati li ho analizzati con baudline, che mostra l'analisi di fourier delle frequenze.

con elica bipala 10x45:
MAX 7200rpm
MIN 2400rpm

rampa di salita: 100ms
rampa di discesa: 200ms

con elica tripla 9x5:
max 7700 RPM
min 1440 RPM
rampa salita: 370ms
rampa discesa: 1.2secondi

codice arduino (modificato da un vecchio codice):
Code:
#include <Servo.h>
 
 Servo s;

void setup() {
  // initialize the serial communication:
  Serial.begin(460800);
  delay(1000);
  analogReference(EXTERNAL);
  ADCSRA &= B11111100; //prescaler to 16, about ~77 kHz sample rate
  s.attach(7);
}
unsigned long somma;
//int numeroSample = 300;
boolean stato = false;
int vel=0;
void loop() {
  if (Serial.available()>0){
    digitalWrite(13, stato?HIGH:LOW);
    stato=!stato;
    int i = Serial.read();
    switch(i){
      case 'm':
        vel=0;
        break;
      case 'M':
        digitalWrite(13, HIGH);
        vel=180;
        break;
      case '+':
        vel+=10;
        break;
    }
    s.write(vel);
  }
  /*
  somma=0;
  //for (int i=0; i < numeroSample;i++){
    somma+=analogRead(A0);
  //}
 
  // send the value of analog input 0:
  Serial.println((int)(somma/numeroSample));
  // wait a bit for the analog-to-digital converter
  // to stabilize after the last reading:
  //delay(2);
  */
  Serial.write( (byte)map(analogRead(A0), 0, 1024, 0, 256) );
  //Serial.write('\n');
}

codice processing (grafico +salvataggio del file in temp, che è in ram quindi nessuna lag):
Code:
import processing.serial.*;

Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph

FileWriter a;

void setup () {
  // set the window size:
  size(400, 300);       

  // List all the available serial ports
  println(Serial.list());
  // I know that the first port in the serial list on my mac
  // is always my  Arduino, so I open Serial.list()[0].
  // Open whatever port is the one you're using.
  myPort = new Serial(this, Serial.list()[0], 460800);
  // don't generate a serialEvent() unless you get a newline character:
  //myPort.bufferUntil('\n');
  // set inital background:
  background(0);
  try {
    a = new FileWriter("/tmp/dati.txt", false);
  }
  catch(Exception e) {
    e.printStackTrace();
  }
}
void draw () {
  // everything happens in the serialEvent()
}
int i=0;
long tempo = millis();
int stroke1;
char lettura[] = new char[1];
void serialEvent (Serial myPort) {

  i++;
  if (millis()-tempo>1000) {
    println("Letture al sec:"+i);
    i=0;
    tempo= millis();
  }
 
  lettura[0] = (char)myPort.read();
  int inRead = lettura[0];

  float finByte = map(inRead, 0, 256, 0, height);
  try {
    a.write(lettura, 0, 1);
  }
  catch(Exception e) {
    e.printStackTrace();
  }
  // draw the line:
  stroke(stroke1, 34, 255);
  line(xPos, height, xPos, height - finByte);

  // at the edge of the screen, go back to the beginning:
  if (xPos >= width) {
    xPos = 0;
    if (stroke1 == 127)
      stroke1=20;
    else
      stroke1 = 127;
    background(0);
  }
  else {
    // increment the horizontal position:
    xPos++;
  }
}

void keyReleased() {
  if (key != CODED) {
    switch(key) {
    case 'z':
      println("MAX");
      myPort.write('M');
      break;
    case 'm':
      println("min");
      myPort.write('m');
      break;
    case '+':
      println("+");
      myPort.write('+');
      break;
    }
  }
}

notare che si può comandare il servo da processing, con + (+10 al servo), m (servo al minimo), z (servo al massimo)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 264
Posts: 21626
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
avrei la necesstità di misurare gli RPM di un'elica, e mi stavo chiedendo quale fosse il metodo ideale. In particolare pensavo qualcosa stile fotocellula.
siamo intorno ai 7500 RPM al massimo, che con un elica bipala da circa 15000 passaggi al minuto. possiedo anche una tripala, quindi se il sensore arriva a 22500 passaggi al minuto sarebbe fantastico.

Vorrei che l'uscita del sensore fosse digitale, in modo da evitare il più possibile interferenze o analisi dei dati.
Non puoi misurare la rotazione sul motore? Saresti indipendente dalle eliche e arriveresti piú semplicemente.
Potresti usare un sensore magnetico a effetto hall.
Ciao Uwe
Logged

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, a me interessa con le eliche, e non ho sensori hall in casa  smiley-mr-green
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9468
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vorrei che l'uscita del sensore fosse digitale, in modo da evitare il più possibile interferenze o analisi dei dati.

Devi usare un  vero fotodiodo ricevitore nella banda del visibile, a meno che non usi illuminatore IR, e ti serve anche un opamp che fa da amplificatore e squadratore perché in realtà il segnale in uscita è quasi sinusoidale, alla fine ottieni degli impulsi con durata leggermente inferiore a quella del passaggio dell'elica sul sensore distanziati del tempo tra i passaggi delle varie pale.
Attenzione che sei fai il test in casa con la luce accesa il sensore legge i 50 Hz di rete.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io intuberei il sensore in modo da ridurre le interferenze della luce che proviene dai lati, come misura aggiuntiva a quelle che ti hanno già descritto.
per avere un segnale più "pulito", quando ne ho avuto la necessità, ho usato un semplice 7404 con un partitore in entrata che comprendeva un trimmer così da poter dosare la sensibilità al segnale in entrata su una delle porte usate come trigger di schmitt, e mi restituiva un segnale perfettamente pulito e squadrato.
« Last Edit: October 01, 2012, 02:22:56 am by BrainBooster » Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9468
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io intuberei il sensore in modo da ridurre le interferenze della luce che proviene dai lati,

Ottimo consiglio.
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12571
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

l'IR38DM è un sensore impulsivo (emette un LOW appena si interrompe il fascio, ma ritorna subito su HIGH, anche se il fascio è ancora interrotto), il TSSOP34838 invece cambia stato per tutta la durata dell'interruzione; entrambi, dalle prove che feci al tempo della barriera, sono a mio modesto parere assolutamente insensibili ai 50Hz ed alla luce naturale e artificiale, una eventuale intubatura serve fondamentalmente per raggiungere distanze notevoli. Io ho lavorato fino ad un metro puntanto lampadine, portando il circuito al sole, ecc. mai avuta un'incertezza.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9468
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'IR38DM è un sensore impulsivo (emette un LOW appena si interrompe il fascio, ma ritorna subito su HIGH, anche se il fascio è ancora interrotto), il TSSOP34838

Non vanno bene per un contagiri, hanno la banda limitata e richiedono obbligatoriamente un illuminatore a frequenza fissa 36-42 kHz a seconda dei modelli, un contagiri per eliche sfrutta la luce ambientale per funzionare.
Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
avrei la necesstità di misurare gli RPM di un'elica, e mi stavo chiedendo quale fosse il metodo ideale. In particolare pensavo qualcosa stile fotocellula.
siamo intorno ai 7500 RPM al massimo, che con un elica bipala da circa 15000 passaggi al minuto. possiedo anche una tripala, quindi se il sensore arriva a 22500 passaggi al minuto sarebbe fantastico.

Vorrei che l'uscita del sensore fosse digitale, in modo da evitare il più possibile interferenze o analisi dei dati.
Non puoi misurare la rotazione sul motore? Saresti indipendente dalle eliche e arriveresti piú semplicemente.
Potresti usare un sensore magnetico a effetto hall.
Ciao Uwe
segui il consiglio di Uwe  smiley-mr-green  smiley-yell
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi correggo il led che ho usato non è un infrarosso ma un ultravioletto, non ho i datasheet ma si tratta di quei led che si vedono se sono accesi attraverso la cam del cellulare, quindi credo sui 400nm
Molto insensibile ai 50Hz di casa (problemi che ho avuto coi led a luce visibile, ma comunque nel programma con la trasformata di furier si vede un picco sui 50Hz, quando accedo all'altro pc vi passo le immagini)

Quote
segui il consiglio di Uwe   

lo seguirei se ne avessi ancora bisogno, ma non ho esattamente idea di come procedere.
Potrei usare un potenzimetro o un motore dc usato come dinamo collegato al motore da misurare, ma poi come farei a mettre in relazione il votaggio misurato con gli RPM? senza contare che diventerebbe molto importannte la qualità della costruzione, altrimenti gli attriti della dinamo/potenziometro invaliderebbero i dati
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma il sensore ti serve solo per tests sul banco o deve essere embedded a qualcosa di volante?
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

)
Quote

lo altrimenti gli attriti della dinamo/potenziometro invaliderebbero i dati
boh  secondo me ti stai facendo dei problemo inutili,   ma st'elica gira con un motore a scoppio?

"quasi" sicuramente si........  prendi  il segnale sul cavo candele

proprio oggi sto facendo la stessa cosa  devo contare i giri di un "albero"  sto facendo un disco forato,

(disco di alluminio di un hardisk)  fissato a una boccola,  gli farò 10 fori  e con un diodo e fotodiodio faro tutto
nessuna parte in contatto
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma il sensore ti serve solo per tests sul banco o deve essere embedded a qualcosa di volante?

nono, prove a banco, e mi son dimenticato di postare le foto... quando torno al pc le prendo, tra l'altro i test li salvavo in tmp quindi spero ci sia ancora qualcosa xD
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: