Go Down

Topic: CRONOGRAFO BALISTICO (Read 10662 times) previous topic - next topic

vince59

chiedo scusa ma non riesco a trovare un mio thread relativo a quanto in argomento che dovrei aver pubblicato tempo fa.
Non ricordo quanto si fosse andati avanti ma è un idea sulla quale sono ritornato.
Ben accette indicazioni, sia per la parte HW che SW, per avviare il progetto.
Intento cerco qualcosa anche in inglese.

vince59

questo è un codice che intendo studiare...

Code: [Select]
/*
Tomado de http://aeroquad.com/showthread.php?845-How-do-I-make-a-tachometer-with-my-spare-arduino-board-and-IR-LED-and-RECEIVER
Modificado por Pablo Andrade Mejía http://www.arduinolab.wordpress.com

05 de Noviembre de 2012

Se le añadió la función de enviar la velocidad en metros por segundo y pies por segundo al monitor serial
lo que quita la necesidad de tener una pantalla de cristal líquido

Aquellos que tengan dudas acerca de cómo se debe conectar los sensores para que funcione correctamente
hagan click aquí http://www.instructables.com/id/Arduino-Based-Optical-Tachometer/step3/IR-Detector-Circuit/

Los fotodiodos o fototransistores son nombrados como attachInterrupt(0, front, CHANGE); Éste está relacionado
con el pin digital 2, y, el attachInterrupt(1, rear, CHANGE); Éste está relacionado con el pin digital 3

Quienes quieran probarlo pueden conectar dos botones a los pines 2 y 3

Los fotodiodos deben tener una resistencia entre 10k y 100kohm conectados al colector (pin, o pata larga) y esta al pin digital
para asegurarnos que cuando el haz de luz sea interrumpido el voltaje llegue a 0 o tierra
*/

#include <LiquidCrystal.h>
 
#define MPS2FPSCOEFF 3.28084
#define LENGTH 0.159             
#define MICRO2SEKCOEFF 1000000

LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

volatile int stateFront = HIGH;
volatile int stateRear = HIGH;

int led1 = 12;                             
int led2 = 13;                             
int startChrono;
unsigned long startTime, stopTime, elapsed;
double fpsSpeed, mpsSpeed; //double tiene la misma función que float, así que no hay que preocuparse
 
void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Super Chrono");
  Serial.print("Cronografo");
  lcd.setCursor(0, 1);
  lcd.print("by Honk");
  delay(700);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Initializing...");
  Serial.println("Inicializando"); 
  delay(700);
  lcd.clear();
 
  startChrono = 0;
  elapsed = 0;
  fpsSpeed = mpsSpeed = 0;
 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  /*
  Sí los resultados no son los esperados donde dice CHANGE cambien por RISING o LOW
  tanto como en attachInterrupt(0, front, "      "); como en attachInterrup(1, rear, "     ");
 
  Sí todo resulta bien simplemente no hagan nada
  */
  attachInterrupt(0, front, CHANGE); //0 (on digital pin 2) kanske falling/rising/low
  attachInterrupt(1, rear, CHANGE);  //1 (on digital pin 3)
 
  lcd.setCursor(0, 0);
  lcd.print("Take a shot!");
  Serial.println("Preparado para disparar?");
}
 
void loop()
{
  //Start counting when interrupted
  if(stateFront == LOW && startChrono == 0)
  {
    startTime = micros();  // Count microseconds since start
    startChrono = 1;       // Set Chrono flag
    digitalWrite(led1, HIGH);
  }
 
  // Stop counting and calculate speed
  if(stateRear == LOW && startChrono == 1)
  {
    stopTime = micros();  // Count microseconds since start
    startChrono = 0;      // Clear Chrono flag
    elapsed = stopTime - startTime;  // Calculate elapsed time (in us)
 
    digitalWrite(led2, HIGH);
    mpsSpeed = (LENGTH*(MICRO2SEKCOEFF)) / elapsed;            // s = v * t, v = s / t
    fpsSpeed = mpsSpeed * MPS2FPSCOEFF;

    lcd.clear();
    lcd.print("Fps: ");
    lcd.print(fpsSpeed);
    Serial.println("PPS(Pies por segundo) ");
    Serial.print(fpsSpeed);
    lcd.setCursor(0, 1);
    lcd.print("m/s: ");
    lcd.print(mpsSpeed);
    Serial.println("Metros por segundo ");
    Serial.print(mpsSpeed);
   
    startChrono = 0;
   
    delay(500);
    digitalWrite(led2, LOW);
    digitalWrite(led1, LOW); 
   
  }
 
}

void front()
{
  stateFront = !stateFront;
}

void rear()
{
  stateRear = !stateRear;
}

fabpolli

Non so se sia il medesimo caso ma questo thread dovrebbe chiarire un po' di cose credo... prova a guardalo e valita se è il medesimo progetto che vuoi relaizzare tu

Standardoil

Cosa che è cronografo balistico?
Io conoscevo galvanometri balistici, e da questi i corrispondenti voltmetri, amperometri wattmetri etc etc
Ma uno strumento registratore (....grafo) non credo possa essere balistico
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Etemenanki

chiamano in quel modo i cronometri a traguardi che servono per misurare la velocita' di frecce e proiettili in genere (magari se ha una stampantina termica incorporata, questo giustifica il "grafo", non so ... ;))
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Standardoil

Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Etemenanki

Credo pero' che il problema maggiore sia far leggere gli ingressi pi piu velocemente possibile ... per il poco che mi ricordo, le "digitalRead" sono relativamente lente ... c'e' un modo per rilevare lo stato di due pin il piu velocemente possibile ? ... magari usando gli interrupt ?

Se si, allora forse si puo mettere in una variabile il valore di micros all'attivazione del primo, quello di micros all'attivazione del secondo, poi si sottrae e si calcola la velocita' (con lo scarto della precisione intrinseca della MCU, ovviamente, ma dovrebbe essere possibile ... magari usando due cicli bloccanti per fare in modo che il micro non perda tempo a fare nient'altro mentre aspetta di leggere gli ingressi)

Secondo problema che mi viene in mente, la lettura del proiettile ... i sistemi "commerciali" usano dei sensori di immagine relativamente primitivi (due fotodiodi tagliati a triangolo ed uniti a formare un rettangolo, con una lente semicilindrica che mette a fuoco una striscia di materiale bianco illuminata in modo uniforme con infrarossi ... formano una specie di "sensore differenziale", in cui in realta' non viene letta una vera e propria "immagine" anche se li chiamano sensori di immagine, ma quella configurazione causa una variazione dell'uscita quando un'oggetto attraversa la zona messa a fuoco, anche se non e' perfettamente centrato, cosa che invece sarebbe necessaria con un solo fotodiodo o con un traguardo ottico, ed il circuito si limita a produrre un'impulso qualsiasi sia la variazione), sensori che pero' purtroppo e' abbastanza difficile trovare in vendita ... se uno ha pazienza e manualita', ci si puo costruire due supporti su cui fissare delle striscie di specchio superficiale (recuperabili da vecchi scanner o stampanti multifunzione rottamati) in modo che si fronteggino, un lato fisso e l'altro regolabile con una vitina ... poi si prendono due modulini laser da pochi Euro, si fissano in fondo rivolti verso uno degli specchi, e si regola quello mobile perche' produca un tracciato a zigzag fra gli specchi, mettendo il fotodiodo in alto dal lato opposto del "pannello" di linee luminose (in questo modo il raggio lo si interrompe in qualsiasi punto si faccia passare l'oggetto ... non troppo semplice da realizzare, ma neppure impossibile) ... l'altro sistema che mi viene in mente cosi al volo sarebbe costruire due "camere a riga", l'equivalente di un sensore a fori stenopeici, pero' con delle fessure al posto dei fori ... ma non so se si possano trovare dei fotodiodi abbastanza sensibili per poterli usare in quel modo ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

vince59

#7
May 16, 2018, 09:28 pm Last Edit: May 16, 2018, 09:30 pm by vince59
Bsera, confermo che il cronografo/cronometro di cui si parla serve per misurare la velocità del pallino di una carabina ad aria compressa. La velocità di uscita dovrebbe essere sui 160/170 m/s ed inserendo il peso del pallino è anche possibile stabilire i joule di potenza dell'arma. Quest'ultima parte attiene all'algoritmo di calcolo che al momento è la cosa più semplice. Ho cercato solo ieri sera e verificato che esiste più di qualche progetto autocostruito con Arduino ed intendevo fare la stessa cosa. Ignoro, al momento, quale sia la parte hardware impiegata per leggere il passaggio del pallino. ...studio un pò è vi faccio sapere.

date un occhiata qui:

https://www.youtube.com/watch?v=jZOJLJD3aNU

Etemenanki

...
https://www.youtube.com/watch?v=jZOJLJD3aNU
... ha traforato il terminale della carabina per inserirci i sensori ... ASSASSINO !!!

Oltretutto il principio e' sbagliato, e puo causare errori ... non ultimo quello dovuto al fronte di compressione dell'aria di fronte al pallino all'interno della canna (l'aria ha una sua densita', e comprimendola la si cambia, cambiando anche il suo indice di rifrazione ... se il fronte di compressione e' costretto all'interno della canna, potrebbe generare di fronte al pallino una zona in cui il raggio dei sensori viene spostato "prima" che il pallino vero e proprio arrivi sul sensore ... vero che sarebbe valido per entrambi, ma non e' "predicibile" di quanto possa essere la rifrazione, per cui puo essere fonte di errori) ... se poi usa un qualche lubrificante, i residui potrebbero accumularsi sui sensori con il tempo, e voglio vederlo a smontare tutto ogni volta che li deve pulire :D

Non dico che non funzioni, si puo anche realizzare un sistema con il tubo, ed alcuni apparati economici di fascia bassa usano proprio quel sistema, ma "STACCATO" dell'arma, mai integrato nel terminale di volata ...

Se vuoi fare qualche esperimento, c'erano dei fotodiodi PIN differenziali di fascia abbastanza economica, SFH221, che incorporano due fotodiodi affiancati nello stesso case, non sono dei veri e propri diodi a quadratura o dei sensori a triangoli, ma costano molto meno (sugli 8 Euro, 20 volte di meno del piu "straccio" sensore ad immagine o diodo a quadratura), e con una lente semicilindrica o astigmatica (o forse addirittura solo una fenditura, e' da provare) dovrebbe essere possibile fare in modo che "mettano a fuoco" una striscia bianca al centro dei due fotodiodi, come fanno in questo tipo di apparecchi ... poi dovrebbe bastare leggere i diodi in modo differenziale e generare un'impulso nel momento in cui la variazione passa da uno all'altro dei diodi (quando l'ombra del pallino passa da uno all'altro dei due chip, uno aumenta e l'altro diminuisce il segnale) ... certo difficilmente si otterranno risultati uguali a quelli di un'apparato da 250 Euro, ed e' tutta roba da sperimentare ... ma in fondo il bello dell'hobby non e' proprio sperimentare ? ... ;)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

vince59

@ etemenanki. E' probabile che il tizio abbia tagliato uno stabilizzatore ed applicato sul vivo di volata. Escludo che sia stato così folle da tagliare quello proprio dell'arma.

Come hai ountualizzato è il concetto che fai-da-te che è devastante.
Non sono ferrato come te....tfatico a comprendere quale sia la difficoltà tecnica della lettura dell'interruzione di un fascio....se utilizzassi due di quei puntatori laser a batteria?
l'idea è prendo due di quei puntatori laser e li sparo verso qualcosa che legge e rilevo il momento in cui il fascio viene interrotto. Preciso che il pallino ha un diametro di 4,5 mm.
Il problema del codice al momento non l'ho affrontato perchè si tratta di rilevare velocità elevate dell'ordine di 160/170 m/s e non so ancora quale "algoritmo" utilizzare.

gpb01

#10
May 17, 2018, 05:54 pm Last Edit: May 17, 2018, 05:55 pm by gpb01
Il problema del codice al momento non l'ho affrontato perchè si tratta di rilevare velocità elevate dell'ordine di 160/170 m/s e non so ancora quale "algoritmo" utilizzare.
Quello non mi sembra un grosso problema .. su una distanza di 1mt (distanza sulla quale non credo che, in prossimità dell'uscita del pallino ci sia calo apprezzabile) a 170mt/sec si ha un tempo di passaggio di quasi 6 msec. ... tempo facilmente misurabile con un paio di interrupt (primo pasaggio e secondo passaggio) e l'utilizzo di micros().

Il problema è semmai la scelta di due fotosensori che rispondano a quella velocità ::) ... e anche l'allineamento del tutto.

Guglielmo
Search is Your friend ... or I am Your enemy !

Etemenanki

> vince59: il problema piu che altro e' dovuto al fatt oche il pallino ha, appunto, "solo" 4.5mm di diametro, e la zona di lettura (se vuoi realizzare qualcosa tipo il chrony) e' larga, quindi non puoi usare un solo raggio, a meno che la tua mira non sia talmente precisa da consentirti di interrompere con sicurezza due raggi del diametro di circa 1mm a distanze diverse dal vivo di volata (cosa che probabilmente, neppure il campione mondiale di tiro a segno riuscirebbe a fare ;))

Quel video funziona (piu o meno) proprio perche' ha messo i due traguardi nello stabilizzatore di volata (e si, spero anch'io che non abbia massacrato quello originale dell'arma), per cui il pallino e' costretto a passarci davanti per forza ... ma se appena appena usi un qualche lubrificante (e li usano tutti), dopo poche decine di colpi avrai probabilmente i sensori coperti di sporco, residui di polvere impastata con olio, residui di piombo, pelumini dei feltrini di pulizia ... e non e' certo una soluzione facile, smontare tutto ogni poco tempo ...

si possono usare due laser, nessun problema in quello ... solo che bisogna fare una cosa di questo tipo https://www.youtube.com/watch?v=HwInYFFdCsg (magari fatta un tantino meglio di quella del video, che fa un po pena, ma e' il principio che conta, quello della "tenda" di raggi a zigzag) ... sara' un po un casino settare gli specchi, ma per funzionare funziona ... oppure, come il chrony, si prendono un paio di semicerchi di plastica bianca, li si illuminano con qualche led IR, e li si "leggono" con due fotodiodi differenziali in cui l'immagine della striscia e' "messa a fuoco" al centro dei due diodi ...

Perche',uno si potrebbe chiedere, proprio stramaledetti (:P) fotodiodi differenziali ? ... per evitare false letture ... se si usase un singolo fotodiodo, o anche un'array lineare, una variazione improvvisa di luminosita' potrebbe essere letta come start o stop, falsando la lettura ... usando invece un fotodiodo differenziale, si genera l'impulso solo quando l'ombra del pallino passa da un diodo all'altro (in pratica, l'unico momento in cui il segnale di uno sale di colpo e contemporaneamente il segnale dell'altro scende di colpo), ignorando tutti gli altri tipi di variazione luminosa ... gestendo i segnali in modo differente, si puo perfino misurare la velocita' di frecce o altri tipi di proiettili piu lunghi ...

trovando una lente astigmatica decente ed un paio di fotodiodi SMD abbastanza piccoli come dimensioni, si potrebbero anche saldare il piu vicino possibile  senza dover per forza usare un componente piu difficile da reperire in vendita ... o magari usando piu diodi SMD affiancati e disposti su due linee parallele, il piu vicini possibile, si puo costruire una piu semplice camera a fenditura ... ma li serve fare qualche esperimento ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

vince59

bgiorno Guglielmo ed Etemenanki.

Guglielmo ti sarei grato se, come al solito, mi potessi dare un indicazione su come metter su il codice. Tieni conoto però che la distanza del misuratore e sul vivo di volata o nelle immediate prossimità ovvero in 10/20 cm.

Etemanki. Ti seguo nel ragionamento generale ma mi perdo quando si va nel tecnicismo della lettura.
Ipotizzando di montare sul vivo di volata un tubo di diametro pari alla canna, il problema della precisione e relativa interruzione dei due fasci dovrebbe essere superato. Ancora meglio riducendo il diametro...è sufficente 6mm e già hai 1,5 mm in più rispetto al pallino. Non ho idea però di quanto il fascio si a largo anche perchè non mi è chiaro ancora quale sia il sensore ottimale.

Etemenanki

Ma tu vuoi costruire un sistema da integrare in una singola arma (termine improprio per le aria compressa, lo so, ma chiamiamola "arma" per convenzione), oppure uno che possa essere usato per qualsiasi arma in modo libero da vincoli ? ... perche' le due cose sono molto diverse ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

gpb01

Guglielmo ti sarei grato se, come al solito, mi potessi dare un indicazione su come metter su il codice. Tieni conoto però che la distanza del misuratore e sul vivo di volata o nelle immediate prossimità ovvero in 10/20 cm.
A 170 mt/sec abbiamo 17000 cm/sec il che significa che i tuoi 10 cm vengono percorsi 588 μsec. La risoluzione della funzione micros() è di 4 μsec quindi ... comunque la misura dovrebbe essere possibile.

Usi due interrupt, uno attivato al primo passaggio, uno attivato al secondo. Entrambi, l'unica cosa che fanno è salvare il valore di micros() ciascuno in una sua variabile dopo di che si tratta banalmente di fare una sottrazione e calcolare la differenza di μsec tra i due passaggi.

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up