Table des matières:
- Étape 1: Connexions du DS1803
- Étape 2: Octet de commande
- Étape 3: Contrôle du DS1803
- Étape 4: configuration
- Étape 5: Le programme
Vidéo: DS1803 Double potentiomètre numérique avec Arduino : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
J'aime partager l'utilisation d'un potmètre numérique DS1803 avec un Arduino. Ce circuit intégré contient deux potmètres numériques qui peuvent être contrôlés via une interface à deux fils, pour cela j'utilise la bibliothèque wire.h.
Ce circuit intégré peut remplacer un potmètre analogique normal. De cette façon, vous pouvez contrôler par exemple un amplificateur ou une alimentation.
Dans ce instructable, je contrôle la luminosité de deux LED pour montrer le fonctionnement.
L'arduino compte les impulsions d'un encodeur rotatif et place la valeur dans les variables pot[0] et pot[1]. Lorsque vous appuyez sur le commutateur de l'encodeur, vous pouvez basculer entre pot[0] et pot[1].
La valeur réelle des pots est lue depuis le DS1803 et placée dans les variables potValue[0] et potValue[1] et affichées sur un écran LCD.
Étape 1: Connexions du DS1803
Ici vous pouvez voir les connexions du DS1803. H est le côté haut du potentiomètre, L le côté bas et W l'essuie-glace. SCL et SDA sont les connexions de bus.
Avec la connexion A0, A1 et A2, vous pouvez donner au DS1803 sa propre adresse, de cette façon vous pouvez contrôler plus d'appareils via un seul bus. Dans mon exemple, j'ai donné au DS1803 une adresse 0 en connectant toutes les broches à la terre.
Étape 2: Octet de commande
Le mode de fonctionnement du DS1803 peut être utilisé dans l'octet de commande. Lorsque vous sélectionnez "écrire le potentiomètre-0", les deux potentiomètres sont sélectionnés, lorsque vous souhaitez uniquement régler le potentiomètre-0, vous n'avez qu'à envoyer le premier octet de données. "Ecrire potentiomètre-1" ajuste uniquement potmètre-1. "Ecrire sur les deux potentiomètres" donne aux deux potentiomètres la même valeur.
Étape 3: Contrôle du DS1803
L'octet de contrôle (figure 3) a un identifiant de périphérique, celui-ci reste toujours le même. Dans mon exemple, A0, A1 et A2 sont à 0 car nous sélectionnons les adresses en mettant toutes les broches A à la terre. Le dernier bit R/W sera mis à 0 ou 1 par la commande "Wire.beginTransmission" et "Wire.requestFrom" dans l'Arduino. Dans la figure 5, vous pouvez voir l'ensemble du télégramme. Le télégramme lu est représenté sur la figure 4.
Étape 4: configuration
Ce circuit montre comment tout connecter. L'écran LCD Nokia est disponible avec différentes connexions, assurez-vous de bien connecter la vôtre. Aussi l'encodeur rotatif ses différentes versions, certaines ont le point commun sur la broche du milieu d'autres pas. J'ai mis un petit filtre réseau (résistance de 470 Ohm avec cap de 100nF) pour filtrer les signaux de sortie A et B de l'encodeur. J'ai besoin de ce filtre car la sortie avait beaucoup de bruit. J'ai également mis une minuterie anti-rebond dans mon programme pour annuler certains bruits. Pour le reste je pense que le circuit est clair. L'écran LCD peut être commandé via Adafruit
Étape 5: Le programme
Pour l'utilisation du bus 2 fils, j'inclus la bibliothèque Wire.h. Pour utiliser l'écran LCD, j'inclus la bibliothèque Adafruit que vous pouvez télécharger à partir de https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library. La bibliothèque Adafruit_GFX.h est également disponible ici https://github. com/adafruit/Adafruit-GFX-Library.
#comprendre
#comprendre
#comprendre
Affichage Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Ici vous pouvez voir toutes les variables. Octet de contrôle et octet de commande comme décrit précédemment. Le deBounceTime peut être ajusté en fonction du bruit sur votre encodeur.
octet pot[2] = {1, 1};octet controlByte = B0101000; // 7 bits, octet commandByte = B10101001; // les 2 derniers bits correspondent à la sélection du potentiomètre. octet potValue[2]; entier je = 0; int deBounceTime = 10; // Ajuster cette valeur en fonction du bruit const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; non signé long newDebounceTime = 0; oldTime long non signé; booléen enfoncé = 0; nombre booléen = 1;
Dans la configuration, je définis les bonnes broches et mets le texte statique sur l'écran LCD
void setup() { Wire.begin(); Serial.begin(9600); pinMode(encodeur_A, INPUT); pinMode(encodeur_B, INPUT); pinMode(boutonPin, 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();
}
Dans la boucle, je vérifie d'abord si l'intervalle est supérieur à 500 ms, si oui, l'écran LCD est mis à jour. Sinon, le bouton de l'encodeur est coché. Si vous appuyez dessus, le toggleBuffer est appelé. Après cela, l'encodeur est vérifié. Si l'entrée 0 est basse (rotation détectée) je vérifie l'entrée B, si l'entrée B est à 0 j'incrémente pot, les autres je décrémente. Après cela, la valeur sera envoyée au DS1803 via wire.write.
boucle vide() {
intervalle();
if(digitalRead(buttonPin)== 1 && (appuyé == 0)){toggleBuffer();} if(digitalRead(buttonPin)== 0){pressed = 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;} } compte = 1; newDebounceTime = millis();
Wire.beginTransmission(controlByte); // commencer à transmettre
Wire.write(commandByte); // sélection des potmètres Wire.write(pot[0] * 10); // envoie le 1er octet des données du potentiomètre Wire.write(pot[1] * 10); // envoie le 2ème octet des données du potentiomètre Wire.endTransmission(); // arrête de transmettre } else if (digitalRead(encoder_A) == 1 && digitalRead(encoder_B) == 1 && count == 1 && (millis() - newDebounceTime > deBounceTime)){ count = 0; newDebounceTime = millis(); } }
void toggleBuffer(){ pressé = 1; si (i == 0){i = 1;}else{i = 0;} }
J'efface d'abord la zone où je dois écrire les variables. Je fais cela pour dessiner un rectangle dans cette zone. Après cela, j'écris les variables à l'écran.
void writeToLCD(){ Wire.requestFrom(controlByte, 2); potValue[0] = Wire.read(); // lit le premier octet du potentiomètre potValue[1] = Wire.read(); // lit le deuxième octet du potentiomètre display.fillRect (40, 0, 40, 45, WHITE); // efface l'écran des variables sur l'affichage LCD.setCursor (40, 10); display.print(potValue[0]); // écrit la 1ère valeur du potentiomètre sur l'affichage LCD.setCursor (40, 22); display.print(potValue[1]); // écrit la 2ème valeur du potentiomètre sur l'affichage LCD.setCursor(60, (10 + i * 12)); display.print("<"); display.display(); }
void interval(){ // intervalle de temps pour écrire les données sur l'écran LCD if ((millis() - oldTime) > 500) { writeToLCD(); oldTime = millis(); } }
Conseillé:
Contrôle de la luminosité des LED avec potentiomètre avec Arduino : 3 étapes
Contrôle de la luminosité des LED avec potentiomètre avec Arduino : Dans ce projet, nous contrôlerons la luminosité des LED à l'aide de la résistance variable fournie par le potentiomètre. Il s'agit d'un projet très basique pour un débutant, mais il vous apprendra beaucoup de choses sur le fonctionnement des potentiomètres et des LED qui sont nécessaires pour faire de l'adva
Potentiomètre numérique MCP41HVX1 pour Arduino : 10 étapes (avec photos)
Potentiomètre numérique MCP41HVX1 pour Arduino : La famille de potentiomètres numériques MCP41HVX1 (alias DigiPots) sont des dispositifs qui imitent la fonction d'un potentiomètre analogique et sont contrôlés via SPI. Un exemple d'application serait de remplacer le bouton de volume de votre chaîne stéréo par un DigiPot qui est
Comment démonter un pied à coulisse numérique et comment fonctionne un pied à coulisse numérique : 4 étapes
Comment démonter un pied à coulisse numérique et comment fonctionne un pied à coulisse numérique : Beaucoup de gens savent comment utiliser des pieds à coulisse pour mesurer. Ce tutoriel vous apprendra comment démonter un pied à coulisse numérique et une explication du fonctionnement du pied à coulisse numérique
Double affichage à 7 segments contrôlé par potentiomètre dans CircuitPython - Démonstration de la persistance de la vision : 9 étapes (avec photos)
Deux écrans à 7 segments contrôlés par un potentiomètre dans CircuitPython - Démonstration de la persistance de la vision : ce projet utilise un potentiomètre pour contrôler l'affichage sur quelques écrans à LED à 7 segments (F5161AH). Lorsque le bouton du potentiomètre est tourné, le nombre affiché change dans la plage de 0 à 99. Une seule LED est allumée à tout moment, très brièvement, mais le
Gradateur LED avec potentiomètre : 5 étapes (avec photos)
Variateur de LED avec potentiomètre : il s'agit d'une instructable qui vous apprend à utiliser un potentiomètre pour tamiser une LED