Taula de continguts:
- Pas 1: connexions del DS1803
- Pas 2: Byte de comandament
- Pas 3: control del DS1803
- Pas 4: configureu
- Pas 5: el programa
Vídeo: Potenciòmetre digital dual DS1803 amb Arduino: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
M'agrada compartir l'ús d'un mesurador digital DS1803 amb un Arduino. Aquest CI conté dos potòmetres digitals que es poden controlar a través d’una interfície de dos fils, per això faig servir la biblioteca wire.h.
Aquest CI pot substituir un mesurador analògic normal. D'aquesta manera, podeu controlar per exemple un amplificador o una font d'alimentació.
En aquest instructiu controlo la brillantor de dos LED per mostrar el funcionament.
L'arduino compta els polsos d'un codificador rotatiu i col·loca el valor en pot variable [0] i pot [1]. En prémer l'interruptor del codificador, podeu canviar entre el pot [0] i el pot [1].
El valor real de les olles es llegeix des del DS1803 i es col·loca a potValue variable [0] i potValue [1] i es mostra en una pantalla LCD.
Pas 1: connexions del DS1803
Aquí podeu veure les connexions del DS1803. H és el costat alt del potenciòmetre, L el costat baix i W el netejador. SCL i SDA són les connexions d'autobús.
Amb les connexions A0, A1 i A2 podeu donar al DS1803 la seva pròpia adreça, d'aquesta manera podeu controlar més dispositius mitjançant un bus. En el meu exemple, he donat l'adreça DS1803 0 connectant tots els pins a terra.
Pas 2: Byte de comandament
La manera com funciona el DS1803 es pot utilitzar al byte d'ordres. Quan seleccioneu "escriure potenciòmetre-0", se seleccionen els dos potenciòmetres, quan només voleu ajustar el potenciòmetre-0, només heu d'enviar el primer byte de dades. "Potenciómetre d'escriptura-1" només ajusteu el potòmetre-1. "Escriure als dos potenciòmetres" dóna als dos potenciòmetres el mateix valor.
Pas 3: control del DS1803
El byte de control (figura 3) té un identificador de dispositiu, que sempre és el mateix. En el meu exemple A0, A1 i A2 són 0 perquè seleccionem l'adreça posant tots els pins A a terra. L'últim bit R / W s'establirà a 0 o 1 mitjançant l'ordre "Wire.beginTransmission" i "Wire.requestFrom" a l'Arduino. A la figura 5 podeu veure tot el telegrama. El telegrama llegit es mostra a la figura 4.
Pas 4: configureu
Aquest circuit mostra com connectar-ho tot. La pantalla LCD de Nokia està disponible amb diferents connexions. Assegureu-vos de connectar-la bé. També el codificador rotatiu de les seves diferents versions, alguns tenen el comú en el pin mig, altres no. He posat una petita xarxa de filtres (resistència de 470 Ohm amb tap de 100nF) per filtrar els senyals de sortida A i B del codificador. Necessito aquest filtre perquè la sortida tenia molt de soroll. També he posat un temporitzador de rebut al meu programa per cancel·lar una mica de soroll. Per la resta crec que el circuit està clar. La pantalla LCD es pot demanar mitjançant Adafruit
Pas 5: el programa
Per a l'ús del bus de 2 fils, incloc la biblioteca Wire.h. Per utilitzar la pantalla LCD, incloc la biblioteca Adafruit que podeu descarregar des de https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library i també la biblioteca Adafruit_GFX.h està disponible aquí https:// github. com / adafruit / Adafruit-GFX-Library.
#incloure
#incloure
#incloure
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Aquí podeu veure totes les variables. Byte de control i byte d’ordres tal com s’ha descrit anteriorment. El deBounceTime es pot ajustar en funció del soroll del codificador.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bits, byte commandByte = B10101001; // els darrers 2 bits és la selecció de paràmetres. byte potValue [2]; int i = 0; int deBounceTime = 10; // Ajusteu aquest valor en funció del soroll int int codificador_A = 8; const int encoder_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; unsigned long oldTime; premut booleà = 0; recompte booleà = 1;
A la configuració defineixo els pins correctes i poso el text estàtic a la pantalla LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (codificador_A, INPUT); pinMode (codificador_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (NEGRE); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Al bucle primer comprovo si l'interval és superior a 500 ms, si és així, s'actualitza la pantalla LCD. Si no, es marca el botó del codificador. Si es prem el botó toggleBuffer, es crida. Després d'això, es comprova el codificador. Si l'entrada 0 és baixa (s'ha detectat la rotació) comprovo l'entrada B, si l'entrada B és 0 I incremento el pot , altres decremento. Després d'això, el valor s'enviarà al DS1803 mitjançant wire.write.
bucle buit () {
interval();
if (digitalRead (buttonPin) == 1 && (pressionat == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressionat = 0;}
if (digitalRead (codificador_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (codificador_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} else {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // començar a transmetre
Wire.write (commandByte); // selecció de potòmetres Wire.write (pot [0] * 10); // envia el primer byte de dades de potòmetre Wire.write (pot [1] * 10); // envia el 2n byte de dades de mesurador Wire.endTransmission (); // deixar de transmetre} else if (digitalRead (codificador_A) == 1 && digitalRead (codificador_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {pressionat = 1; if (i == 0) {i = 1;} else {i = 0;}}
Primer vaig netejar la zona on he d’escriure les variables. Ho faig per dibuixar un rectangle en aquesta àrea. Després d'això, escric les variables a la pantalla.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // llegeix el primer byte de potòmetre potValue [1] = Wire.read (); // llegeix el segon byte de potòmetre display.fillRect (40, 0, 40, 45, BLANC); // esborra la pantalla variable a la pantalla LCD.setCursor (40, 10); display.print (potValue [0]); // escriviu el primer valor del potòmetre a display.setCursor LCD (40, 22); display.print (potValue [1]); // escriviu el valor del 2n potòmetre a display.setCursor LCD (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// temporitzador d’interval per escriure dades a la pantalla LCD si ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Recomanat:
Control de la brillantor LED amb potenciòmetre amb Arduino: 3 passos
Control de la brillantor del LED amb potenciòmetre amb Arduino: en aquest projecte, controlarem la brillantor del LED mitjançant la resistència variable proporcionada pel potenciòmetre. Aquest és un projecte molt bàsic per a principiants, però us ensenyarà moltes coses sobre el potenciòmetre i el funcionament del LED que són necessaris per fer adva
Potenciòmetre digital MCP41HVX1 per Arduino: 10 passos (amb imatges)
Potenciòmetre digital MCP41HVX1 per a Arduino: la família de potenciòmetres digitals MCP41HVX1 (també coneguts com DigiPots) són dispositius que imiten la funció d’un potenciòmetre analògic i que es controlen mitjançant SPI. Un exemple d'aplicació seria substituir el comandament de volum del vostre equip estèreo per un DigiPot que és
Potenciómetre i servo: moviment controlat amb Arduino: 4 passos
Potenciòmetre i servo: moviment controlat amb Arduino: primer heu de reunir materials rellevants per muntar aquest circuit
Control de la brillantor del LED amb un potenciòmetre i Arduino: 6 passos
Controlar la brillantor del LED amb un potenciòmetre i Arduino: en aquest tutorial aprendrem com controlar la brillantor del LED amb un potenciòmetre i Arduino. Veure un vídeo de demostració
Dimmer LED amb potenciòmetre: 5 passos (amb imatges)
Dimmer LED amb potenciòmetre: es pot instruir que us ensenya a utilitzar un potenciòmetre per atenuar un LED