Benvenuto in Moddingstudio.com.

  1. #1
    RyujiAndy è offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy

    Regolare l'intensità di un LED tramite un potenziometro

    Abbiamo già visto in precedenza come gestire un segnale PWM per regolare l'intensità di un LED, ora vorrei introdurre i pin analogici per regolare manualmente questo segnale.
    Costruendo il seguente circuito:
    notiamo che ho collegato un potenziometro al pin A0, questo perchè arduino è in grado di misurare la differenza di potenziale tra 0V e 5V e restituisce come verdremo in seguito un valore compreso tra 0 e 1023.
    Ora per comodità definiamo le variabili che tengono conto dei pin dove abbiamo collegato il LED ed il nostro potenziometro:
    Codice:
    int pinpot = 0;
    int pinled = 9;
    Ora ci servono altre due variabili dove andremo a memorizzare lo stato del potenziometro ed il relativo valore del segnale PWM per regolare l'intensità del led:
    Codice:
    int valpot = 0;
    int valled = 0;
    Come sempre dobbiamo inizializzare i pin tramite la funzione "void setup":
    Codice:
    void setup() {
      pinMode(pinled, OUTPUT);
    }
    Il pin A0 non è necessario definire perchè è già un input analogico.
    tramite a funzione "analogRead" possiamo leggere la differenza di potenziale presente tra il cursore e la massa.

    Se guardiamo il simbolo elettrico del potenziometro è come se avessimo due resistenze che variano a seconda della posizione del cursore e quindi la differenza di potenziale di R2 cambia.
    Dobbiamo tenere in considerazione una proporzione tra il valore del segnale PWM che è compreso tra 0 e 255 e il valore restituito dal pin analogico, compreso tra 0 e 1024, quest'ultimo è 4 volte superiore al primo e quindi possiamo scrivere il nostro loop:
    Codice:
    void loop() {
      valpot = analogRead(pinpot);
      valled = valpot / 4;
      analogWrite(pinled, valled);
      delay(10);
    }
    Ora vorrei introdurre una nuova funzione: il rimappamento. Questa serve per scalare un valore tenendo conto di 2 margini differenti:
    Codice:
    restituzione = map(valore, da minimo, da massimo, a minimo, a massimo);
    ora applichiamolo al nostro programma:
    Codice:
    int pinpot = 0;
    int pinled = 9;
    int valpot = 0;
    int valled = 0;
    
    void setup() {
      pinMode(pinled, OUTPUT);
    }
    
    void loop() {
      valpot = analogRead(pinpot);
      valled = map(valpot, 0, 1023, 0, 255);
      analogWrite(pinled, valled);
      delay(10);
    }
    Schema elettrico:
    Ultima modifica di RyujiAndy; 27-11-2012 alle 19:59
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

  2. L'utente RyujiAndy è stato ringraziato per questo Post da:

    SNK (03-08-2014)

  3. # ADS
    Circuit advertisement


     

  4. #2
    ManuelX è offline
    • Registrato da Nov 2010
    • Messaggi: 2,215
    • Ha ringraziato: 48
      Grazie ricevuti: 8

    Yes Grande Andy!
    Ormai son costretto a prenderlo per poter provare tutti questi
    Il [Solo gli utenti registrati e attivati possono vedere i link ]è alla base di Moddingstudio. Seguitelo scrupolosamente e ne trarrete benefici anche Voi.

    I PM soffocano il Forum, sfruttate la funzione CERCA e arricchite ModdingStudio contribuendo a Vostra volta.

  5. #3
    greenball è offline
    • Registrato da Dec 2010
    • Messaggi: 348
    • Ha ringraziato: 1
      Grazie ricevuti: 12
      Visita il profilo Google+ di greenball
    ryu potresti fare un articolo su come poter utilizzare per esempio un buzzer e lo schermo lcd ? fare tipo un timer che allo schadere del tempo suona il buzzer ed eventualmente un led?

  6. #4
    tizio45 è offline
    • Registrato da Dec 2011
    • Messaggi: 1,130
    • Ha ringraziato: 0
      Grazie Ricevuti
    io ne so fare uno per una rele con keypad, cioè un relè che si eccita solo se è premuto un codice esatto ma non riesco a inserire un cicalino

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Torna a inizio pagina
Moddingstudio.com - Powered by vBulletin
Copyright (c) 2011 vBulletin Solutions, Inc. All rights reserved.
Brown Editore S.r.l. - Capitale Sociale 1.087.500€ I.V. - P.Iva: 12899320159 - Viale Sarca, 336 Edificio 16 - 20126 Milano
Tutti gli orari sono GMT +1. Adesso sono le 01:09.