Sommario:
- Passaggio 1: collegamenti del DS1803
- Passaggio 2: byte di comando
- Passaggio 3: controllo del DS1803
- Passaggio 4: configurazione
- Passaggio 5: il programma
Video: DS1803 Doppio potenziometro digitale con Arduino: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Mi piace condividere l'utilizzo di un potmeter digitale DS1803 con un Arduino. Questo circuito integrato contiene due potmeter digitali che possono essere controllati tramite un'interfaccia a due fili, per questo utilizzo la libreria wire.h.
Questo circuito integrato può sostituire un normale potmeter analogico. In questo modo puoi controllare ad esempio un amplificatore o un alimentatore.
In questa istruzione controllo la luminosità di due LED per mostrare il funzionamento.
L'arduino conta gli impulsi di un encoder rotativo e posiziona il valore nella variabile pot[0] e pot[1]. Quando si preme l'interruttore sull'encoder, è possibile passare da pot[0] a pot[1].
Il valore effettivo delle pentole viene letto dal DS1803 e posto nelle variabili potValue[0] e potValue[1] e visualizzato su un LCD.
Passaggio 1: collegamenti del DS1803
Qui puoi vedere le connessioni del DS1803. H è il lato alto del potenziometro, L il lato basso e W il tergicristallo. SCL e SDA sono i collegamenti bus.
Con la connessione A0, A1 e A2 puoi dare al DS1803 il proprio indirizzo, in questo modo puoi controllare più dispositivi tramite un bus. Nel mio esempio ho assegnato al DS1803 l'indirizzo 0 collegando tutti i pin a terra.
Passaggio 2: byte di comando
Il modo in cui opera il DS1803 può essere utilizzato nel byte di comando. Quando si seleziona "scrivi potenziometro-0" vengono selezionati entrambi i potenziometri, quando si desidera regolare solo il potenziometro-0, è sufficiente inviare il primo byte di dati. "Scrivi potenziometro-1" regola solo il potenziometro-1. "Scrivi su entrambi i potenziometri" fornisce a entrambi i potenziometri lo stesso valore.
Passaggio 3: controllo del DS1803
Il byte di controllo (figura 3) ha un identificatore di dispositivo, questo rimane sempre lo stesso. Nel mio esempio A0, A1 e A2 sono 0 perché selezioniamo adres mettendo a massa tutti i pin A. L'ultimo bit R/W sarà impostato su 0 o 1 dal comando "Wire.beginTransmission" e "Wire.requestFrom" in Arduino. Nella figura 5 si vede l'intero telegramma. Il telegramma letto è mostrato in figura 4.
Passaggio 4: configurazione
Questo circuito mostra come collegare tutto. Il Nokia LCD è disponibile con diverse connessioni, assicurati di collegare correttamente la tua. Anche l'encoder rotativo ha le sue diverse versioni, alcune hanno il comune sul pin centrale altre no. Ho messo una piccola rete di filtri (resistenza da 470 Ohm con cappuccio da 100 nF) per filtrare i segnali di uscita A e B dell'encoder. Ho bisogno di questo filtro perché l'uscita ha avuto molto rumore. Ho anche inserito un timer antirimbalzo nel mio programma per eliminare un po' di rumore. Per il resto penso che il circuito sia sgombro. Il display LCD può essere ordinato tramite Adafruit
Passaggio 5: il programma
Per l'utilizzo del bus a 2 fili includo la libreria Wire.h. Per utilizzare l'LCD includo la libreria Adafruit che puoi scaricare da https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library anche la libreria Adafruit_GFX.h è disponibile qui https://github. com/adafruit/Adafruit-GFX-Library.
#includere
#includere
#includere
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
Qui puoi vedere tutte le variabili. Byte di controllo e byte di comando come descritto in precedenza. Il deBounceTime può essere regolato in base al rumore sull'encoder.
byte pot[2] = {1, 1}; byte controlByte = B0101000; // 7 bit, byte commandByte = B10101001; // gli ultimi 2 bit sono la selezione del potmeter. byte potValue[2]; int i = 0; int deBounceTime = 10; // Regola questo valore in base al rumore const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; unsigned lungo newDebounceTime = 0; OldTime lungo non firmato; booleano premuto = 0; conteggio booleano = 1;
Nel setup definisco i pin giusti e metto il testo statico sull'LCD
void setup() { Wire.begin(); Serial.begin(9600); pinMode(encoder_A, INPUT); pinMode(encoder_B, INPUT); pinMode(pulsantePin, INPUT); newDebounceTime = millis();
display.begin();
display.setContrast(50); display.clearDisplay(); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0, 10); display.println("POT 1="); display.setCursor(0, 22); display.println("POT 2="); display.display();
}
Nel ciclo prima controllo se l'intervallo è superiore a 500 ms, in caso affermativo il display LCD viene aggiornato. In caso contrario, il pulsante sull'encoder è selezionato. Se premuto il toggleBuffer viene chiamato. Successivamente viene controllato l'encoder. Se l'ingresso 0 è basso (rilevata rotazione) controllo l'ingresso B, se l'ingresso B è 0 incremento pot, gli altri diminuisco. Dopodiché il valore sarà inviato al DS1803 tramite wire.write.
ciclo vuoto() {
intervallo();
if(digitalRead(buttonPin)== 1 && (premuto == 0)){toggleBuffer();} if(digitalRead(buttonPin)== 0){premuto = 0;}
if (digitalRead(encoder_A) == 0 && count == 0 && (millis() - newDebounceTime > deBounceTime)){ if (digitalRead(encoder_B) == 0){ pot++; if(pot > 25){pot = 25;} }else{ pot--; if(pot < 1){pot = 1;} } conteggio = 1; newDebounceTime = millis();
Wire.beginTransmission(controlByte); // inizia a trasmettere
Wire.write(commandByte); // selezione potmeter Wire.write(pot[0] * 10); // invia il primo byte dei dati del potenziometro Wire.write(pot[1] * 10); // invia il secondo byte dei dati del potenziometro Wire.endTransmission(); // interrompe la trasmissione }else if (digitalRead(encoder_A) == 1 && digitalRead(encoder_B) == 1 && count == 1 && (millis() - newDebounceTime > deBounceTime)){ count = 0; newDebounceTime = millis(); } }
void toggleBuffer(){ premuto = 1; if (i == 0){i = 1;}else{i = 0;} }
Per prima cosa pulisco l'area in cui devo scrivere le variabili. Lo faccio per disegnare un rettangolo in quest'area. Dopodiché scrivo le variabili sullo schermo.
void writeToLCD(){ Wire.requestFrom(controlByte, 2); potValue[0] = Wire.read(); // legge il primo byte potValue[1] = Wire.read(); // legge il secondo byte del potenziometro display.fillRect(40, 0, 40, 45, WHITE); // cancella lo schermo variabile sul display LCD.setCursor(40, 10); display.print(potValue[0]); // scrive il primo valore del potenziometro sul display LCD.setCursor(40, 22); display.print(potValue[1]); // scrive il secondo valore del potenziometro sul display LCD.setCursor(60, (10 + i * 12)); display.print("<"); display.display(); }
void interval(){ // timer a intervalli per scrivere dati su LCD if ((millis() - oldTime) > 500) { writeToLCD(); oldTime = millis(); } }
Consigliato:
Controllo della luminosità del LED con il potenziometro con Arduino: 3 passaggi
Controllo della luminosità del LED con il potenziometro con Arduino: in questo progetto, controlleremo la luminosità del LED utilizzando la resistenza variabile fornita dal potenziometro. Questo è un progetto molto semplice per un principiante, ma ti insegnerà molte cose sul funzionamento del potenziometro e del LED che sono necessari per fare progressi
Potenziometro digitale MCP41HVX1 per Arduino: 10 passaggi (con immagini)
Potenziometro digitale MCP41HVX1 per Arduino: La famiglia di potenziometri digitali MCP41HVX1 (aka DigiPots) sono dispositivi che imitano la funzione di un potenziometro analogico e sono controllati tramite SPI. Un'applicazione di esempio potrebbe sostituire la manopola del volume sul tuo stereo con un DigiPot che è
FET MOSTER - Driver per letto riscaldato per stampante 3D con doppio MOSFET da 500 Amp 40 Volt: 7 passaggi (con immagini)
MOSTER FET - Doppio driver per letto riscaldato per stampante 3D MOSFET da 500 Amp 40 Volt: probabilmente hai fatto clic su questa vacca sacra pensante, 500 AMP !!!!!. Ad essere onesti, la scheda MOSFET che ho progettato non sarà in grado di fare in modo sicuro 500Ampere. Potrebbe per un breve periodo, appena prima che esplodesse eccitato in fiamme. Questo non è stato progettato per essere un clev
Doppio display a 7 segmenti controllato da potenziometro in CircuitPython - Dimostrazione della persistenza della visione: 9 passaggi (con immagini)
Doppio display a 7 segmenti controllato da potenziometro in CircuitPython - Dimostrazione della persistenza della visione: questo progetto utilizza un potenziometro per controllare il display su un paio di display a LED a 7 segmenti (F5161AH). Quando si ruota la manopola del potenziometro, il numero visualizzato cambia nell'intervallo da 0 a 99. Si accende un solo LED alla volta, molto brevemente, ma il
Dimmer LED con potenziometro: 5 passaggi (con immagini)
Dimmer LED con potenziometro: questo è un istruibile che ti insegna come utilizzare un potenziometro per attenuare un LED