Buongiorno so che è un argomento trito e ritrito ... Però mi piacerebbe capire bene (senza scopiazzare in giro)
Allora ho letto e riletto un sacco di tutorial ma ognuno con un differente tipo di collegamento alcuni utilizzano le resistenze interne di Arduino (che vorrei evitare) altri utilizzano una sola resistenza da 10 KOhm sul pin digitale altri ancora utilizzano 2 resistenze una da 330Ohm sul pin digitale e da 10KOhm sul pin GND in pull DOWN o sul 5.5V in pull UP ... Ora sinceramente sono un po' confuso ....
Io utilizzerei l'ultimo esempio con 2 resistenze (da 330 e 10K) ...
Ora la domanda mi sorge spontanea ... A cosa è dovuta questa differenza di utilizzo delle resistenze?
Ho visto ora che ho invertito le pull UP e DOWN ... sistemato...
Devo mettere 5 pulsantini che mi comandano 2 motorini CC
Vorrei utilizzare 5 ingressi digitali differenti, potrei utilizzare un solo analogico ma avendo a disposizione pin preferirei utilizzarli separatamente
Una parte di schema me la ero preparata e la allego (resistenze da 10KOhm) ma mi accorgo che ho ancora troppi dubbi a riguardo ... a mio parere dovrei mettere anche delle resistenze che vanno ai pin digitali appunto da 330 Ohm sul digitale e 10KOhm sul pin GND
Per carità ... mai lette delle BOJATE così grandi ... quello non sa manco come funziona il ATmega328P ...
Ti riporto una frase tra tutte che dimostra tutta la sua ignoranza :
... Ma quando premiamo il pulsante cosa succede? In teoria i 5V “raggiungeranno” il nostro ingresso che diventerà un 1, ossia “ingresso attivato – HIGH” ossia esattamente ciò che volevamo fare. Questo è verissimo ma c’è un piccolo particolare che abbiamo trascurato, infatti non abbiamo fatto nulla per limitare la corrente ad un massimo di 40mA, motivo per cui il pin di ingresso potrà andare ad assorbire molta più corrente andando a friggersi in modo definitivo. Per limitare la corrente dobbiamo usare per forza una resistenza, diciamo di almeno 250 Ohm in modo che possano passare un massimo di 20mA (ricordiamo che è buona norma non superare la metà del massimo consentito) ...
... i pin in ingresso sono ad alta impedenza e NON assorbono praticamente nulla !!!
Quel valore è il massimo che il pin può erogare ... ovvero, se ci si attacca un "carico" (es. un LED) occorre limitare la corrente assorbita dal carico per NON bruciare il pin.
Quello non sa nemmeno di che parla.
Il discorso di mettere una resistenza in serie al bottone è ben altro ...
... non ci sarebbe alcun problema a tenere, ad esempio il pin a LOW con una pull-down e a tirare direttamente il pin ad HIGH collegandolo direttamente al +5V. Però ... se un domani carichi un altro programma (... magari per fare delle prove) e usi quel pin come OUTPUT può capitare che, magari mentre il programma fa su quel pin una digitalWrite(pin, LOW) (ovvero lo collega a massa), tu, inavvertitamente pigi il bottone e lo colleghi al +5V ... creando un bel corto tra massa e +5V !
Quindi, volendo essere previdenti e stare sicuri per ogni evenienza, una resistenza in serie ad un pin limita la corrente massima che esso può erogare, anche in caso di corti accidentali.
P.S.: L'articolo è del nostro moderatore Leo ... se il tuo antivirus ti indica qualche problema su quella pagina, sappi che è un falso positivo e che puoi tranquillamente aprirla.
Ho letto ora velocemente quindi chiedo scusa se magari sparo una cavolata poi questa sera rileggo... ma lal primo step (quello che a mio parere è il mio caso) dice di utilizzare una resistenza da 220Ohm al GND praticamente ... Ma io in rete trovo solo resistenze da 10KOhm al GND che è una differenza abissale....
corretto quindi il mio schema precedente(ma con resistenze più basse)?
roppo, tocca che leggi con attenzione o non riesci a seguire i discorsi !
Parliamo di DUE resistenze che hanno DUE SCOPI totalmente diversi ....
1. resistenza di pull-up (verso il +5V) o di pull-down (verso GND) serve per portare il pin in INPUT che ha un'alta impedenza e che NON deve mai essere lasciato flottante, ad uno stato ben preciso (pull-up = HIGH, pull-down = LOW) quando il bottone NON è premuto. Questa resistenza va bene di un valore da 2.2 KΩ a 10 KΩ ... quindi ... metti quella che hai disponibile purché tra questi valori.
2. resistenza per limitare la corrente in OUTPUT, e proteggere da corti circuiti un pin usato come OUTPUT ... circa 220Ω rammentando sempre che : ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.
gpb01:
roppo, tocca che leggi con attenzione o non riesci a seguire i discorsi !
Vero chiedo perdono ma essendo all'inizio devo leggere almeno 5 volte per capire...
Quindi ... e scusa se magari sono insistente ... ma voglio verificare se ho capito la "lezione" per quanto riguarda il tuo schema il pin sarà sempre HIGH e se leggo la pressione metto un LOW mentre se invertissi il collegamento (rosso al posto del nero) avrei sempre il pin a LOW e leggo la pressione del tasto con HIGH
Bene... domandone finale ( visto che sto partendo parto bene togliendomi ogni dubbio)
quale dei 2 sistemi è meglio utilizzare? cioè in base a quale criterio si può decidere quale dei 2 pull UP/DOWN
gpb01: 1. resistenza di pull-up (verso il +5V) o di pull-down (verso GND) serve per portare il pin in INPUT che ha un'alta impedenza e che NON deve mai essere lasciato flottante, ad uno stato ben preciso (pull-up = HIGH, pull-down = LOW) quando il bottone NON è premuto.
Come dice Guglielmo, dipende da te se vuoi lavorare in logica positiva o negativa. Di solito preferisco la logica positiva, ovvero normalmente un tasto non premuto per me è low, quando lo premo -> high
La seconda resistenza per eventuali problemi di corto è un di più, non strettamente necessaria, soprattutto se il circuito è "definitivo".
Un bel problema per i bottoni invece è il debounce (potremmo dire "falsi contatti"), prova a cercare nel forum, ne abbiamo già parlato.
Ma questo, data l'attuale preparazione di roppo, è uno step successivo ... :
Guglielmo
Ti quoto
SukkoPera:
Il problema è che lui sembra scartare questa soluzione a priori, non ho capito perché! :o
La scarto per dei motivi alquanto semplici
Il primo è una certa insucurezza visto che sono anche un po' sbadato e questo posso risolverlo con ma il collegamento deve esse pull UP e non pull DOWN mi paere di aver capito
pinMode(pin, INPUT_PULLUP);
il secondo è che ho letto in internet (che poi alcune fonti si sono rilevate farlocche appunto) che
Dal sito sopra
Resistenza pullup interna
A dirla tutta Arduino ci permette di semplificare le cose eliminando tutte le resistenze. Ma come? Se configurate il pin scelto che nel nostro caso era l’8, dopo aver configurato il pin come INPUT con pinMode(8, INPUT); possiamo usare digitalWrite(8, HIGH); per attivare la resistenza di pullup interna di Arduino di 20kΩ (la documentazione ufficiale riporta 20-50kΩ senza specificare meglio). Ciò può semplificare la struttura del nostro circuito, MA, se fate un errore nella programmazione, il pin non sarà protetto dalla resistenza per cui un errore di programmazione può portare a dei guasti, cosa che sicuramente non desideriamo
A questo punto però quanto scritto sopra da me nel code risolve la situazione
Se ne guadagna in portabilità e chiarezza del codice.
È vero che in questo modo il pulsante funziona "al contrario" (HIGH normalmente, LOW quando premuto), ma è una cosa tranquillamente gestibile, mentre il resto del discorso mi sembra un po' la solita pippa mentale, ma probabilmente per chi non ha mai smanettato con l'elettronica sembra più ragionevole. Vedrai che man mano che i tuoi progetti si complicheranno, cercherai anche tu di risparmiarti tutto quanto possibile :).
roppo ... ok che è il tuo primo collegamento ... ma bisogna che "ragioni su quello che fai" ...
... non vedi che appena schiacci un pulsante crei un corto circuito tra il +5V e il GND ? ? ? :o
Mai a poi mai fare un collegamento come quello ...
... riguarda quello che avevo messo io nell'altra pagina ... il +5V andava alla resistenza che serviva a tenere il pin HIGH ovvero era una pull-upESTERNA.
Se usi le pull-upINTERNE (INPUT_PULLUP) il collegamento con i +5V NON serve più (... e assolutamente MAI come lo hai fatto tu) visto che il pin viene tenuto normalmente HIGH dalla pull-up interna !!!