Banco di guida con Arduino Uno

La resistenza di pull-up/pull-down nulla ha a che vedere con il “debouncing” … purtroppo il 90% delle guide su internet scrive delle emerite bojate.

Se vuoi evitare di compilcarti la vita, usa le pull-up interne alla MCU ed, esternamente, metti una rete R/C per fare “debouncing” come da schema che ti allego (dei tre possibili schemi che vedi devi usare il primo a sinistra, cambiando i valori rispetto a quelli indicati … R va bene 100Ω, mentre per C metti 100nF).

Per attivare le pull-up interne, quando nel setup() dichiari i pin di input con la pinMode() usa la sintassi:

pinMode(NumeroPin, INPUT_PULLUP);

… dove NumeroPin è il numero del pin che definisci di input e INPUT_PULLUP indica che lo vuoi, appunto, in INPUT ma con la pull-up attiva.

A questo punto, se il pulsante NON è premuto, tu leggerai HIGH grazie alla pull-up, mentre quando lo premi, esso dovrà chiudere verso GND e leggerai LOW.

Spero sia tutto chiaro.

Guglielmo

debouncing_hw.pdf (22.8 KB)

si è tutto chiaro, sei stato tempestivo e prezioso nelle risposte e nei consigli. A questo punto direi che lo schema elettrico è definito e posso cominciare la ricerca componenti e l' assemblaggio.

Ciò che dice Guglielmo, come sempre, è vero; in questo caso, però, se non devi leggere due pressioni consecutive dello stesso tasto ma ogni pressione ripetuta è ignorata essendo in attesa di un tasto diverso, puoi non porti il problema dell'antirimbalzo. Usa le resistenze di pull-up interne con i pulsanti verso massa e basta.

Datman: ... puoi non porti il problema dell'antirimbalzo.

Dato che male non fa ed è quello che [u]si deve sempre fare quando si usa un pulsante su una porta logica[/u], molto meglio NON diseducare un utente (... alle prime armi che sta imparando), che dare consigli validi si, ma solo per casi specifici ... non credi ? ? ? ::)

Guglielmo

DatMan la condizione che hai descritto è valida solo in parte, forse mi sono spiegato male.

Premendo il tasto blu avviene una commutazione verso l' avanti, quindi la leva di direzione che normalmente si trova in posizione neutra si sposta in avanti su posizione di marcia avanti. Premendo il tasto nero la leva si sposta indietro tornando su posizione neutra, premendo di nuovo il tasto nero la leva si sposta di nuovo indietro su posizione marcia indietro. I due tasti quindi attivano lo spostamento in una direzione o l' altra, quando la leva si trova all'estremità ( tutta avanti o tutta indietro ) avrò bisogno di due pressioni dello stesso tasto (non ravvicinate) per raggiungere l' opposto. Questa commutazione avviene in simulazione, vorrei assegnare un tasto a ogni direzione eliminando di fatto la pressione dello stesso tasto due volte. Tutto questo è valido solo per i pulsanti dedicati alla marcia, gli altri pulsanti invece hanno la funzione On-OFF quindi una pressione attiva la successiva disattiva. Scusate se mi sono dilungato ma volevo chiarire il concetto della funzione.

Ora mi sorge un dubbio "meccanico". Ho comprato buona parte del materiale, i potenziometri hanno una corsa di circa 280 gradi, diciamo che tenendo buono il punto zero io gli voglia far fare una corsa di appena 140 gradi, quindi circa la metà. Sarà possibile tramite la programmazione della funzione escludere la percentuale non usata? Quindi assegnando la funzione al potenziometro potrò dirgli di considerare come range di funzionamento 0-100% la corsa compresa tra 0 e 512? Se ciò non fosse possibile dovrei girare l' asse di corsa della leva legata al potenziometro cambiando di fatto il layout del banco.

Un potenziometro non ha una corsa di 360° (almeno io personalmente non ne conosco), ma comunque il cursore da un lato chiude con un contatto e dall'altro chiude con l'altro quindi hai comunque l'intero range di valori di resistenza nell'intervallo del valore massimo del potenziometro.

Se tu invece dei 240° ne usi solo una parte ... dovrai via software considerare l'estremo a cui arrivi come tuo massimo e quindi rimappare il tutto in modo che dal valore minimo assunto dal potenziometro, al valore massimo, tu consideri un valore da 0% a 100% ;)

Guglielmo

Grazie Guglielmo era quello che supponevo, in realtà mi aspettavo che la corsa meccanica del potenziometro fosse più limitata, a conti fatti forse per il mio utilizzo sarebbero andati meglio potenziometri a scorrimento, anziché rotativi.

Eccomi di nuovo al pezzo, allora ho cominciato a scrivere lo " sketch ", posso continuare qui o è meglio spostarmi sulla zona software aprendo una nuova discussione? Grazie

ciao Domanda tecnica, i miei condensatori hanno una gamba lunga ed una corta, sono polarizzati? quale gamba devo collegare al negativo e quale alla resistenza? grazie

Se sono quelli elettrolitici, cilindrici, dovrebbe esserci scritto. Dovresti trovare una banda su ogni lato con dentro ripetuti dei - e dall'altra parte dei + Tipo questi:

Grazie maubarzi non vedo nessun segno + ma sul fianco del condensatore partendo dalla sommità che questo simbolo -> - significa qualcosa?

Il - indica il negativo e coincide con il reoforo più corto:

https://it.rs-online.com/web/p/condensatori-elettrolitici/7111532/

grazie Datman

Ciao a tutti e grazie per i vostri preziosi consigli, il banco di guida è finito ed è stato pubblicato come promesso e reso pubblico sul mio sito. Ora sto implementando la parte luminosa, infatti il simulatore, fornisce dati in uscita che possono essere raccolti da una scheda arduino ed avviati a dei led ed uno schermo 4x20 I2C. Con un amico abbiamo già implementato lo skecth di uscita perfettamente funzionante. Per aggiungere realismo vorrei aggiungere un amperometro, che sale con l' aumento della potenza dato alla locomotiva attraverso il potenziometro apposito. Se metto un Trasformatore amperometrico sul cavo di ritorno al pin analogico, sarò in grado di rilevare i pochi milliampere che circolano e indirizzarli all' amperometro? Oppure, indirizzarli alla scheda che legge gli output ( arduino uno ) e attraverso una porzione di codice, far muovere uno strumento travestito da amperometro? Grazie per gli eventuali consigli!

Non riesco ad aprire l'immagine allegata al post #12.

Ciao, P.

pgiagno: Non riesco ad aprire l'immagine allegata al post #12.

Strano ... l'ho inserita anche nel post, prova a guardare ;)

Guglielmo

gpb01: Strano ... l'ho inserita anche nel post, prova a guardare ;)

Guglielmo

Infatti nel post la vedo. La scarico e se cerco di aprirla mi dà errore: "Errore nell'interpretare il file JPEG (Not a JPEG file: starts with 0x89 0x50)". Ho ubuntu 18.04 e Chromium. Grazie, devo indagare.

Ciao, P.

P.S. Come si fa ad inserire le immagini nel testo del post?

pgiagno: P.S. Come si fa ad inserire le immagini nel testo del post?

Una volta che l'hai allegata e pubblicato il post, recuperi con il tasto destro il link all'allegato, editi il post e usi il link come immagine da inserire con l'apposito bottone :D

Guglielmo

Grazie dell'informazione. Alla prima occasione provo.

Ciao, P: