giovedì 14 marzo 2019

Filtro Kalman e tempo di campionamento

Stavo continuando a provare questa libreria del filtro Kalman per MPU quanto, per risparmiare spazio su disco, ho provato a modificare il tempo di campionamento da 20 ms ad 1 secondo ed ' accaduto qualcosa che non mi aspettavo




Tempo di campionamento 1 sec

Nr campioni : 5085
Media : -0.35
Range : 7.44
Std : 0.21
Varianza : 0.044
Skewness : -14.8

Tempo di campionamento 0.02 sec

Nr campioni : 67889
Media : -0.35
Range : 0.33
Std : 0.0.37
Varianza : 0.0014
Skewness : -0.011

Come si vede il valore medio e' comparabile ma la standard deviation e' decisamente peggiore con il tempo di campioanmento di 1 secondo

martedì 12 marzo 2019

Google Car Agosto 2018

Ad agosto avevo avvistato la Google Car a giro per Firenze



ed adesso mi sono ritrovato (macchina arancione) in Google Street View...anche se non e' la prima volta


MPU 6050 con filtro Kalman ed Arduino Uno

Ho trovato questa comoda libreria per interfacciare MPU6050 (un accelerometro-giroscopio triassiale) con Arduino e processare i dati con il filtro di Kalman in tempo reale

(Per un articolo di data fusion sui dati di accelerometro e giroscopio si puo' andare a questo link applicato ai filtri Kalman)


La connesione tra MPU 6050 (anche chiamato GY 521) avviene sul canale I2C. E' quindi collegare Vcc a 3,3V, GND e SDA su pin Arduino A4 ed SCL su pin Arduino A5



Ho acquisito un po' di misure e le ho poi processate con Octave. Si vede chiaramente che il valore medio dell'angolo di roll e' comparabile tra le misure con e senza filtro di Kalman...il dato che varia in modo sensibile e' la standard deviation (le misure sono state effettuate a sensore fermo e spengendo e riaccendendo il sensore per evitare un eventuale drift del giroscopio)

Le misure sono angoli di roll espressi in gradi decimali

Set senza filtro Kalman
Nr misure : 7572
Media : -6.76
Range : 2.15
Stdev : 0.2
Varianza : 0.041
Skewness : 0.054



Set 1 con fil tro Kalman
Nr misure : 28013
Media : -6.71
Range : 0.46
Stdev : 0.05
Varianza : 0.003
Skewness : -0.051


Set 2 con fil tro Kalman
Nr misure  : 11844
Media : -6.71
Range : 0.46
Stdev : 0.05
Varianza : 0.003
Skewness : -0.12



Set 3 con fil tro Kalman
Nr misure : 5545
Media : -6.76
Range : 0.35
Stdev : 0.05
Varianza : 0.0025
Skewness : 0.14



venerdì 8 marzo 2019

Internet Yellow Pages

Un reperto del passato, un libro in cui sono elencati e descritti siti Web ...e direi che Google e prima ancora Altavista erano gia' disponibili




AStable NE555

Stavo giocando con la generazione di suoni con una Arduino ed un altoparlante (metto sotto il semplice progettino) quando mi e' venuto in mente....perche' non farlo senza microcontrollore ma con la sola elettronica analogica e quindi con un NE555

Circuito NE555 Astable

Fonte Wikipedia





Accrescere il valore del condensatore C  al di sotto del potenziometro riduce la frequenza aumentando il periodo.

Accrescere il valore della parte superiore R1 della resistenza variabile (parte superiore guardando il grafico sopra) aumenta il periodo di segnale alto (ma non modifica il periodo di segnale basso

Accrescere il valore della parte inferiore R2 della resistenza variabile aumenta il periodo di segnale basso e decrementa il duty cycle (ovvero il rapporto tra stato alto e stato basso fino ad un minimo del 50%)

il tempo di stato 1 sara' pari a T_alto = 0.693(R1+R2)*C
il tempo di stato 0 sara' pari a T_alto = 0.693*R2*C
per avere un periodo alto uguale al periodo basso R1 deve essere posto a zero

La frequenza e' calcolata come f=1.4/((R1+2R2)*C)

https://dlb.sa.edu.au/rehsmoodle/file.php/466/kpsec.freeuk.com/555timer.htm


per avere una frequenza di 440 Hz si deve porre di circa 164 nF (questo il calcolatore)



Ovviamente al posto del voltmetro va messo un altoparlante

Il consumo di NE555 e' di circa 15 mA

E se si volesse scendere con duty cyle inferiori al 50%??? (ovvero se invece di generare un suono volessi un interruttore che si apre ad determinati intervalli per un breve periodo di tempo)

Si devono inserire due diodi attorno al potenziometro

Circuito NE555 Astable con duty cycle inferiore al 50%



Un sostituto a basso consumo di NE555 e' ICM7555 che funziona anche a 1.5 V con un consumo di 60 microA

Configurazione Astable di ICM7555


Se si vuole generare un suono con Arduino basta lo script sottostante e collegare il jack audio al GND ed al PIN 11 per avere una nota di 250 Hz

---------------------------------------------------
void setup() {
  pinMode(11, OUTPUT);
}
void loop() {
  digitalWrite(11, HIGH);  
  delay(2);                       
  digitalWrite(11, LOW);     
 delay(2);                  
}
---------------------------------------------------



Ma come fare ad avefe note piu' acute con periodo inferiore al microsecondo. Si possono usare le librerie Mozzi e Tone che, giocando sui timer TCRR0A eTCRR0B permettono di ottenere variazioni piu' brevi dello stato delle porte digitali (a 16 MHz il limite teorico di un clock del processore e' di 62.5 nanosecondi)

giovedì 7 marzo 2019

Oscilloscopio DSO150 Shell ed Arduino Uno

Ho preso un oscilloscopio portatile DSO150 per una trentina di euro (gia' montato ad esclusione del case)


Premendo i primi due pulsanti (V/Div e Sec/Div) ed agendo su Adj si puo' modificare le divisioni sull'asse verticale da 5mv/Div a 20V/Div e sull'asse orizzontale da 10 us/Div a 500 s/Div.
Agendo su Trigger si puo' avere l'impostazione Automatica, Normale e Single (L'icona piu' a destra del Trigger indica se il trigger avviene in fase ascendente o discendente)
Premendo il tasto OK si manda in Hold il dispositivo

Se si preme due volte il pulsante Sec/Div il cursore nella parte alta diventa blu e con ADJ si puo' spostare a destra e sinistra il grafico

Attenzione : il valore V picco-picco risulta essere di 0.5 V mentre la Arduino ha una tensione sul pin di 5 V. Tale differenza di valori e' dovuta al fatto che la sonda ha una attenuazione di un fattore 10

Usando il solo comando ADJ si trasla verso l'alto e verso il basso tutto il grafico

Se si usa lo script sotto stante su Arduino e si collega la sonda al pin 11 e si collega il GND dell'Arduino al GND a coccodrillo della sonda si ottiene il risultato della foto soprastante
------------------------------------------------------------
void setup() {
  pinMode(11, OUTPUT);
}

void loop() {
  digitalWrite(11, HIGH);   
  delay(10);                      
  digitalWrite(11, LOW);    
  delay(10);                       

}
------------------------------------------------------------



A sinistra il coccodrillo GND della sonda ed in grigio la sonda
Il dispositivo viene venduto anche con due coccodrilli al posto della sonda P6020 con attacco BNC ma meglio spendere qualche euro in piu'

L'alimentazione e' a 9 Volt con pin centrale positivo. Il consumo del dispositivo e' modesto ed oltre che da alimentatore di rete puo' essere utilizzata anche una comune batteria da 9V



Aggacciando la sonda all'anello accanto al BNC c'e' un segnale di test pari a 1KHz


Si vede come la parte superiore dello schermo sia popolata da molti indicatori...cio' rende un po' difficile la lettura del segnale (Duty cicle e' il rapporto, in un'onda quadra, tra il valore del tempo trascorso sullo stato alto rispetto a quello basso. Vengono inoltre riportata la frequenza, il periodo, il Max, Min voltaggio, il voltaggio medio, il valore di voltaggio picco-picco ed il voltaggio RMS ovvero il valore medio quadratico dell'onda))...in pratica e' il valore Vpp per l'inverso della radice quadrata di 2. La modalita' GND serve a centrare l'asse delle y sullo zero



Nella parte alta c'e' un ulteriore switch AC DC e GND. In modo DC la sonda e' direttamente collegata al dispositivo e si misurano le correnti continue, in modalita' AC viene frapposto un condensatore tra la sonda ed il misuratore in modo da eliminare la parte in corrente continua (ed e' quindi la modalita' idonea a misurare segnali variabili nel tempo

Zilog Z80

Dentro un apparato audio e' stato trovato questo Zilog Z80, in particolare un Z0806000PSC


Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...