sono venuto in possesso, grazie ad uno degli iti con i quali collaboro, di alcuni braccetti robotici, composti da servi digitali componenti metalliche. Una roba economica diciamo.
Visto che la scuola non sapeva che farne, sto cercando di strutturare dei corsi per far approcciare i ragazzi sia alla parte di coding che ad un minimo di manualità sia meccanica che elettronica (almeno di base).
Il braccetto che sto studiando funziona correttamente, è facile da gestire con un arduino e dei potenziometri proporzionali.
Funziona discretamente anche usando una imu mpu6050, mentre sto avendo particolari difficoltà a pilotarlo da remoto con moduli rc 2.4ghz(gli stessi che uso sui droni).
Nello specifico i segnali pwm che arduino riceve dalla ricevente sono alquanto ballerini, oscillando di valori anche superiori alle 50unità, questo perchè i potenziometri che compongono gli stick della radio sono molto usurati e di scarsa qualità (infatti con la radio che uso sul drone principale le oscullazioni sono molto inferiori). Detto questo, volevo chiedere a voi consiglio per trovare il modo di smorzare queste oscillazioni altrimenti il braccetto sembra che abbia il parkinson!
Utilizzo la funzione map() per riproporzionare i valori letti dai pin pulseIn() alla scala adatta per pilotare i servi.
Sinceramente non ho capito che segnale ricevi, se è un PWM dovrebbe stare un tot di tempo a 5V e 1-tot di tempo a 0V. Come lo misuri?
In ogni caso se la PWM è veloce potresti risolvere con un condensatore e una resistenza, farlo via software dovresti complicare abbastanza il codice (o accontentarti di segnali molto oscillanti)
brazoayeye:
Sinceramente non ho capito che segnale ricevi, se è un PWM dovrebbe stare un tot di tempo a 5V e 1-tot di tempo a 0V. Come lo misuri?
In ogni caso se la PWM è veloce potresti risolvere con un condensatore e una resistenza, farlo via software dovresti complicare abbastanza il codice (o accontentarti di segnali molto oscillanti)
utilizzando il comando pulseIn(pin, HIGH); ti restituisce un valore che corrisponde alla durata del segnale alto.
Volevo evitare di intervenire sull'hardware ma preferivo intervenire in maniera software in modo da rendere il tutto compatibile anche con altre radio
Se la causa della lettura instabile é l' usura dei potenziometri da cui viene calcolato e in seguito generato un segnale di pilotaggo l' unico modo che vedo é sostituire tali potenziometri.
Ciao Uwe
uwefed:
Se la causa della lettura instabile é l' usura dei potenziometri da cui viene calcolato e in seguito generato un segnale di pilotaggo l' unico modo che vedo é sostituire tali potenziometri.
O sostituirli con degli encoder rotativi (e quindi gestire il tutto in modo leggermente diverso).
Ma sinceramente non ho ancora capito la configurazione di questo progetto, quando dici "pilotarlo da remoto con moduli rc 2.4ghz" cosa intendi dire? Mandi ad Arduino i segnali PWM tramite radio? Ci potresti fare uno schemino?
Allora la radio è quella in allegato la foto(una radio dotata di trasmittente 9ch 2.4ghz)
mentre la ricevente(che è stata precedentemente accoppiata univocamente alla radio) è una ricevente 9ch che provvede ad emettere un segnale pwm(1000μs - 2000μs) per ogni ch.
Premesso che non voglio intervenire sull'hw stavo cercando consiglio per creare un costrutto che permettesse di smorzare le oscillazioni causate dai potenziometri.
Beh certamente dipende dall'entità e frequenza delle fluttuazioni, ma per smorzare questo tipo di disturbi variabili in genere si usa fare una media mobile ed usare quella come valore di lettura.
Per intenderci, diciamo che voglio fare una media mobile di 5 letture. Se io leggo questi valori:
450
420
480
465
430
si vede che vanno da 420 a 480, un intervallo abbastanza ampio. Quindi faccio la media (somma diviso per il numero di elementi) che mi viene 449 ed uso questa come primo dato.
Ricevo un altro dato, diciamo 460, e lo metto in coda scartando il primo:
420
480
465
430
460
la media ora è 451, poco distante dalla precedente. E così via.
Il numero di campioni da usare per la media mobile dipende dalla velocità con cui si ricevono questi dati, dall'ampiezza della variabilità del dato stesso, e dalla rapidità di risposta che si richiede ai movimenti dello stick.
Per dire, se ho decine di campioni al secondo devo prevedere una coda più ampia per "ammorbidire" le variazioni, e visto che parli di valori che vanno da 1000 a 2000 microsecondi, avrai alcune centinaia di letture al secondo, per cui la coda non ha senso che sia di pochi elementi ma direi almeno una ventina. L'ampiezza della variabilità del dato (ossia la sua "inaffidabilità") contribuisce a sua volta ad aumentare la dimensione della coda, mentre la rapidità di risposta ai reali movimenti dello stick richiede di diminuirla. Per cui temo che tu possa solo procedere sperimentalmente per trovare il giusto compromesso tra stabilità e velocità di risposta.
Quest'ultimo aspetto ovviamente influirà notevolmente sul risultato per cui