Ciao a tutti, come da titolo.. vorrei capire come rilevare la direzione di un oggetto. In pratica io ho una finestrella di circa 3cm di diametro. All'interno dovrei posizionare un sensore e capire l'oggetto che ci passa davanti in che direzione si muove. La distanza di rilevamento é minima.. letteralmente striscia sul sensore quasi. Solo non saprei come definire in che direzione va. Infrarossi o simili se ho capito rilevano solo la presenza, non la direzione. Cé qualcosa che possa fare al caso mio? Grazie
Se metti 2 sensori IR in quella stessa finestrella, vedendo quale dei due interviene per primo, capisci la direzione del moto. Questo se l'oggetto viaggia per esempio solo da sx a dx o viceversa, se potesse andare anche su o giù o trasversalmente sarebbe più complicato.
Grazie anzitutto per la risposta. Si avevo pensato di mettere più sensori, ma riuscirebbe a rilevarli? perchè in quello spazio la differenza sarebbe di pochissimi millisecondi. Scusa ma purtroppo sto iniziando ora a entrare in questo mondo.. e cerco di capire un pò le cose. Ho cercato ma non ho trovato info su ogni quanto avviene la rilevazione.. Avevo pensato al limite di ricavare magari un altro mezzo centimetro di diametro e mettere 3 o 4 sensori posizionati magari ad altezze diverse dentro che ne so.. tipo uno rispetto all'altro di mezzo centimetro a scendere, in modo tale che in teoria avrei comunque delle letture differenti in base la direzione di arrivo e uscita, purtroppo non arriva solo da destra o sinistra, ma devo intercettare su 360 gradi.. Ma in pratica non sò se funzionerebbe.. inoltre a questo punto visto il numero complessivo di finestrelle è 6 non sò se la Mega mi gestirebbe tutti quei sensori.. in totale sarebbero 18 o 24 (in base a quanti ne userei in ogni finestrella)
Che ne pensate?
Grazie
Se utilizzasse gli interrupt non dovrebbe esserci nessun problema ad individuare intervalli di pochi millisecondi ma credo che si possa scendere anche sotto il ms. Dovresti dare più dettagli su cosa ti serve fare, magari anche con delle immagini o disegni, cosicché qualcuno ti possa aiutare più nello specifico. Mettere più di due sensori per ogni direzione comunque ti posso dire che non serve. Magari potresti realizzare otto finestre a croce più le diagonali, tipo vecchi joypads.
Buongiorno grazie per il suggerimento, comunque ogni finestrella é separata dalle altre.. quindi va calcolata come singola. In pratica io sul sensore striscio un oggetto.. uno scatolino.. ma devo capire da che direzione arriva.. non saprei come illustrare meglio. In base dimensione e velocità il passaggio sul sensore avverrà per una manciata di millisecondi.. dai 65 ai 600.. scusa l'ignoranza, ma cosa intendi x l'usi degli interrupt? grazie.
Se metti due sensori, praticamente è lo stesso concetto dei sensori per encoder.
Prova ad iniziare studiando QUESTO, vedi soprattutto la parte degli encoder lineari. Poi dopo aver costruito i tuoi due sensori, sperimenta un poco ad esempio con cose tipo QUESTA.
Arduino viagga a microsecondi ... ed i sensori con fotodiodi sono anche piu veloci ... quindi il poblema del tempo non si pone piu di tanto ... metti due sensorini a riflessione del tipo che si usa nelle stampanti o fax per vedere se passa la carta, ad esempio questi sono larghi in tutto circa 7mm e mezzo, due affiancati ci stanno in 3cm ed avanza anche spazio ... poi ne leggi uno con un'interrupt e controlli lo stato dell'altro, come si fa con gli encoder ...
Metti di leggere il primo con l'interrupt ... se l'oggetto va in una direzione, l'altro non sara' scattato, se invece va nell'altra l'altro sensore sara' gia scattato (ovviamente, l'oggetto deve essere abbastanza largo per poter coprire entrambi i sensori insieme, quindi diciamo largo almeno 10mm) ...
Aggiungo solo che se ti serve conoscere anche la velocità dell'oggetto, calcoli il tempo che trascorre tra l'intervento dei due sensori e la calcoli sapendo la distanza tra loro.
Grazie per i consigli..seguirò i link e cercherò di capire.. comunque il discorso direzione va stabilito su + lati.. cioè posso arrivare da N, S, E, W e le vie di mezzo (giusto per intenderci) .. Gli oggetti hanno una dimensione che comunque va da 10cm*22cm a salire, quindi non ci sono problemi.. comunque.. approfondisco un pò sulla base dei vostri consigli, grazie davvero moltissimo!!
Rieccomi qui.. ieri dando un occhio ai link che mi avete consigliato mi é venuta un idea.. ma non sò se applicabile.. e se... usasdi i sensori ottici dei mouse? ho dato un occhiata sul forum e a quanto ho capito si possono collegare alcuni modelli.. ma la mia domanda é.. posso collegarne 6? In teoria avrei già direzione e velocità no? Grazie
Ho trovato questo che dovrebbe essere perfetto come sensore..
o leggermente piú economico cé il 3050.. Potrebbe essere fattibile prima che faccio la spesa? Grazie
Alieno79:
il discorso direzione va stabilito su + lati.. cioè posso arrivare da N, S, E, W e le vie di mezzo
Ah, questo complica un pochino le cose (ma che stai facendo, un sensore per bagagli di un aeroporto? ).
Ti servono necessariamente 2 coppie di sensori posizionati ortogonalmente e più vicini possibile. Quando qualcosa passa davanti, attiverà entrambi i sensori, ed in base allo sfasamento delle rispettive coppie devi determinare la direzione. La precisione del rilevamento dipende quindi dall'algoritmo che implementerai, che si basa sullo sfasamento dei segnali delle coppie.
Ad esempio se il sensore X rileva i movimenti orizzontali (quindi i rilevatori saranno posizionati uno verso Este ed uno ad Ovest, chiamiamoli quindi XE ed XW) e quello Y queli verticali (YN e YS), se un oggetto si muove da W ad E avremo che il sensore X rileverà la direzione grazie al fatto che si sarà attivato prima il sensore XW e poi quello XE, mentre l'altro sensore Y non rileverà alcuno sfasamento (YN e YS si attiveranno contemporaneamente).
Se un oggetto si muove invece in direzione SW-NE avremo sfasamento in entrambi i sensori, con quello X che dà la direzione W-E mentre Y la direzione S-N.
Per determinare la direzione devi quindi considerare le letture di entrambi i sensori. Diciamo che per ogni sensore stabilisci la direzione che consideri "principale" (è solo una convenzione, diciamo per X sarà da W a E mentre per Y sarà da N a S) quindi ogni lettura deve restituire un valore tra -1, 0 e 1 che indicano rispettivamente:
1 = direzione positiva (per X: W-E per Y: N-S)
0 = nessun rilevamento/sfasamento
-1 = direzione opposta (per X: E-W per Y: S-N)
Quindi la direzione rilevata sarà:
X=0 Y=0 -> nessun oggetto
X=0 Y=1 -> N-S
X=0 Y=-1 -> S-N
X=1 Y=0 -> W-E
X=1 Y=1 -> NW-SE
...e così via
Tutto questo considerando solamente le 8 direzioni.
Se avessi bisogno di maggiore precisione, servirebbe un poco di trigonometria, ossia ogni sensore dovrebbe fornire non solamente -1, 0 e 1, ma un valore dipendente dal grado di sfasamento rilevato, ossia calcolare la direzione (es. in radianti) in modo più preciso come angolo dato dall'ampiezza degli sfasamenti. Infine, oltre alla direzione, sempre in base ai valori di sfasamento potresti calcolare anche il modulo ossia la velocità.
Grazie docdoc.. avevo pensato anche io a questa soluzione.. ma dato poi sono 6 punti di controllo dovrei gestire 6x4 = 24 sensori.. per questo cercavo di ottimizzare la cosa.. comunque no ahaha non é x smistare i bagagli, é per un progetto piú piccolo ahaha l'unica parte complicata é questa.. comunque sto vedendo di capire se possibile usare 6 sensori ottici dei mouse.. in teoria penso risolverebbe ogni problema.. ma non ho capito se con la mega posso gestirli.. purtroppo sto avvicinandomi ad arduino solo ora.. attualmente stavo simulando su unity.. il problema é capire nel mondo fisico cosa usare a livello di hw.. grazie sempre a tutti x i consigli e supporto e idee
Alieno79:
poi sono 6 punti di controllo dovrei gestire 6x4 = 24 sensori.. per questo cercavo di ottimizzare la cosa..
Eh, certo, se ogni punto di rilevamento deve essere in grado di determinare la direzione (ed opzionalmente la velocità) è inevitabile, purtroppo, il numero di combinazioni è quello.
In alternativa dovresti passare ad un rilevamento ottico ma poi ti serve qualcosa di più potente, come un Raspberry PI3 e librerie OpenCV, ma la cosa diventa ancora più complicata.
comunque sto vedendo di capire se possibile usare 6 sensori ottici dei mouse..
Non l'ho capita. I sensori ottici dei mouse sono di due tipi, meccanici (quelli vecchi con la "pallina" per capirci) ed ottici (quelli attuali).
I primi funzionano con degli encoder a forcella posizionati sul disco con delle piccole fessure, uno per ogni asse. Quindi questi non vedo come tu possa sfruttarli.
I secondi sfruttano invece le irregolarità del piano in cui si trovano per determinare lo spostamento: se è questo che intendevi, teoricamente potrebbe anche funzionare, ovviamente l'oggetto che vuoi rilevare deve sempre passare abbastanza vicino al sensore (diciamo un mouse messo in qualche modo lateralmente o superiormente alla zona di passaggio) ma poi dovresti essere in grado di interfacciare 6 mouse USB ad Arduino... Ed è forse più complicato di avere 24 normali sensori IR.
ma non ho capito se con la mega posso gestirli.. purtroppo sto avvicinandomi ad arduino solo ora..
Se hai bisogno di quel numero di informazioni sono necessari vari input digitali, per cui si, con un Mega ce la fai, sicuramente come interfacce. Ogni sensore sarà associato ad un interrupt e da lì puoi fare tutto quello che ti occorre, ovviamente poi dipende anche dalla velocità necessaria per i calcoli e dall'efficienza dell'algoritmo che implementerai...
boh.. io pensavo di nn usare i mouse.. ma i sensori come nei mouse ottici.. ne ho trovati 2 tipi con sketch arduino.. tra i 20 e i 30 euro.. si.. l'oggetto scorre su un piano, li ho una finestrella dove metto il sensore.. il tempo minimo di passaggio é intorno i 60ms in base la velocita.. su ho messo 2 link con i sensori che ho trovato.. mi chiedevo xò se la mega ne supportava 6.
4 ir andrebbero bene.. ma rischio che magari mi prende la finestrella solo a 3/4 e nn mi leggerebbe uno dei 4 sensori nella finestrella e andrebbe a fare casino.. la finestrella sarà intorno i 2cm o poco più
Be', su un piano, i sensori per mouse ottici sono una buona soluzione perche' ti danno gli spostamenti su X ed Y contemporaneamente, solo che la maggior parte di quelli "moderni" e' USB, quindi non so se ne puoi gestire 6 ... serve trovare quelli che hanno anche uscite SPI oppure I2C ...
allora, io ho comprato dal cinese un mouse a 5 eurini.. dentro cè il sensore MX8733B
ho trovato online il datasheet al seguente indirizzo :
Mi potete dare info su come collegarlo o comunque su dove trovare qualche libreria o guida?
Attendo con ansia, che se funziona vado a comprare gli altri 5 .. visto gli restano solo quelli!!!
Grazieeee sempreeee
Ecco, quello e' un'esempio di quelli che dicevo prima, l'uscita e' solo USB ...
PMT9123 mi sembra fosse I2C ... altri sensori della Avago ed Agilent, erano I2c oppure seriali, tipo HDNS-2000, ADNS-1620, ADNS-2051, ADNS-2610, ADNS-5020E, S2091, OM02 ... serve trovare dei "vecchi" mouse ottici, quelli che avevano all'interno i due chip, sensore e convertitore USB (o PS2) separati ... se hanno un solo chip, e' quasi sicuramente solo usb ...
ah ok.. allora per ora ho trovato questo online..
costosetto..ma penso a sto punto valga la pena.. perchè trovare 6 vecchi mouse mi pare difficile ora..
comunque potrei intanto provare a usare questo sensore per fare le prove .. anche ordinandoli penso ci metteranno un pò ad arrivare
Dove posso trovare info per capire come cablarlo?
ah.. e se provassi a prendere un mouse quelli con chiavetta wifi? Magari avranno un sistema diverso visto devono convertire i segnali sul wifi.. che ne pensi?
Di nuovi in I2C o SPI ci sarebbe il PAT9125EL della pixart, che ha gia anche l'illuminatore IR incorporato ... e' in case leadless, quindi saldarlo e' un po difficile, ma sembra ci siano anche le schede di valutazione con il chip gia saldato sopra, solo che bisogna vedere se qualcuno le vende qui in giro ... e soprattutto il costo ...
A proposito di questo sensore, c'era uno studio per usarlo come filament detector nelle stampanti 3d prusa MK3, magari hanno realizzato gia la scheda, per cui sarebbe forse piu facile trovarlo, anche se non ho idea se sia vantaggioso come prezzo ... oppure serve trovare qualcuno con un fornetto reflow che te li saldi su degli stampati ...