İçindekiler:
- Adım 1: DS1803'ün Bağlantıları
- Adım 2: Komut Baytı
- Adım 3: DS1803'ün Kontrolü
- 4. Adım: Kurulum
- Adım 5: Program
Video: DS1803 Arduino ile Çift Dijital Potansiyometre: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Bir DS1803 dijital potmetrenin kullanımını bir Arduino ile paylaşmayı seviyorum. Bu IC, iki kablolu arayüz üzerinden kontrol edilebilen iki dijital potmetre içerir, bunun için wire.h kitaplığını kullanıyorum.
Bu IC, normal bir analog potmetrenin yerini alabilir. Bu şekilde örneğin bir amplifikatörü veya güç kaynağını kontrol edebilirsiniz.
Bu talimatta, çalışmayı göstermek için iki LED'in parlaklığını kontrol ediyorum.
Arduino, döner kodlayıcının darbelerini sayar ve değeri pot[0] ve pot[1] değişkenlerine yerleştirir. Enkoder üzerindeki düğmeye bastığınızda pot[0] ve pot[1] arasında geçiş yapabilirsiniz.
Potların gerçek değeri DS1803'ten okunur ve potValue[0] ve potValue[1] değişkenlerine yerleştirilir ve bir LCD'de görüntülenir.
Adım 1: DS1803'ün Bağlantıları
Burada DS1803'ün bağlantılarını görebilirsiniz. H, potansiyometrenin yüksek tarafı, L alt tarafı ve W sileceğidir. SCL ve SDA bus bağlantılarıdır.
A0, A1 ve A2 bağlantısı ile DS1803'e kendi adresini verebilirsiniz, bu şekilde bir bus üzerinden daha fazla cihazı kontrol edebilirsiniz. Örneğimde tüm pinleri toprağa bağlayarak DS1803 adresini 0 verdim.
Adım 2: Komut Baytı
DS1803'ün çalışma şekli komut baytında kullanılabilir. "Potansiyometre-0 yaz"ı seçtiğinizde her iki potansiyometre seçilir, sadece potansiyometre-0'ı ayarlamak istediğinizde sadece ilk veri baytını göndermeniz gerekir. "Potansiyometre-1 yaz" sadece potmetre-1'i ayarlayın. "Her iki potansiyometreye yaz", her iki potansiyometreye de aynı değeri verir.
Adım 3: DS1803'ün Kontrolü
Kontrol baytı (şekil 3) bir cihaz tanımlayıcısına sahiptir, bu her zaman aynı kalır. Örneğimde A0, A1 ve A2 0 çünkü tüm A pinlerini toprağa koyarak adres seçiyoruz. Son bit R/W, Arduino'da "Wire.beginTransmission" ve "Wire.requestFrom" komutu ile 0 veya 1'e ayarlanacaktır. Şekil 5'te telgrafın tamamını görebilirsiniz. Okunan telgraf şekil 4'te gösterilmektedir.
4. Adım: Kurulum
Bu devre her şeyin nasıl bağlanacağını gösterir. Nokia LCD farklı bağlantılarla mevcuttur, sizinkini doğru bağladığınızdan emin olun. Ayrıca döner kodlayıcının farklı versiyonları vardır, bazılarının orta pim üzerinde ortak noktası vardır, bazılarının değil. Kodlayıcının A ve B çıkış sinyallerini filtrelemek için küçük bir filtre ağı (100nF kapaklı 470 Ohm direnç) koydum. Çıktıda çok fazla gürültü olduğu için bu filtreye ihtiyacım var. Ayrıca biraz gürültüyü iptal etmek için programıma bir geri dönme zamanlayıcısı koydum. Geri kalanı için devrenin açık olduğunu düşünüyorum. LCD, Adafruit https://www.adafruit.com/product/338 adresinden sipariş edilebilir.
Adım 5: Program
2 kablolu veri yolunun kullanımı için Wire.h kitaplığını ekliyorum. LCD'yi kullanmak için https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library adresinden indirebileceğiniz Adafruit kütüphanesini de ekliyorum, ayrıca Adafruit_GFX.h kütüphanesini burada https://github mevcuttur. com/adafruit/Adafruit-GFX-Library.
#Dahil etmek
#Dahil etmek
#Dahil etmek
Adafruit_PCD8544 ekran = Adafruit_PCD8544(7, 6, 5, 4, 3);
Burada tüm değişkenleri görebilirsiniz. Daha önce açıklandığı gibi kontrol baytı ve komut baytı. DeBounceTime, kodlayıcınızdaki gürültüye bağlı olarak ayarlanabilir.
bayt pot[2] = {1, 1};bayt kontrolByte = B0110000; // 7 bit, bayt komutuByte = B10101001; // son 2 bit potmetre seçimidir. bayt potValue[2]; int ben = 0; int deBounceTime = 10; // Bu değeri gürültüye bağlı olarak ayarlayın int encoder_A = 8; const int kodlayıcı_B = 9; const int buttonPin = 2; imzasız uzun newDebounceTime = 0; imzasız uzun oldTime; boolean basıldı = 0; boole sayısı = 1;
Kurulumda doğru pinleri tanımlıyorum ve statik metni LCD'ye koyuyorum
geçersiz kurulum() { Wire.begin(); Seri.başla(9600); pinMode(encoder_A, INPUT); pinMode(encoder_B, INPUT); pinMode(buttonPin, INPUT); newDebounceTime = millis();
display.begin();
display.setContrast(50); display.clearDisplay(); display.setTextSize(1); display.setTextColor(SİYAH); display.setCursor(0, 10); display.println("POT 1="); display.setCursor(0, 22); display.println("POT 2="); display.display();
}
Döngüde önce aralığın 500 ms'den fazla olup olmadığını kontrol ederim, evet ise LCD güncellenir. Değilse, kodlayıcı üzerindeki düğme kontrol edilir. Basıldığında toggleBuffer çağrılır. Bundan sonra kodlayıcı kontrol edilir. 0 girişi düşükse (dönüş algılandı) B girişini kontrol ederim, B girişi 0 ise pot artırır, diğerleri azaltır. Bundan sonra değer, wire.write aracılığıyla DS1803'e gönderilecektir.
boşluk döngüsü () {
Aralık();
if(digitalRead(buttonPin)== 1 && (basıldı == 0)){toggleBuffer();} if(digitalRead(buttonPin)== 0){basıldı = 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;} } sayı = 1; newDebounceTime = millis();
Wire.beginTransmission(controlByte); // iletmeye başla
Wire.write(commandByte); // potmetre seçimi Wire.write(pot[0] * 10); // potmetre verisinin 1. baytını gönder Wire.write(pot[1] * 10); // 2. bayt potmetre verisi gönder Wire.endTransmission(); // iletimi durdur }else if (digitalRead(encoder_A) == 1 && digitalRead(encoder_B) == 1 && count == 1 && (millis() - newDebounceTime > deBounceTime)){ count = 0; newDebounceTime = millis(); } }
void toggleBuffer(){ basıldı = 1; if (i == 0){i = 1;}else{i = 0;} }
İlk önce değişkenleri yazmam gereken alanı temizliyorum. Bunu, bu alanda bir dikdörtgen çizmek için yapıyorum. Ardından değişkenleri ekrana yazıyorum.
void writeToLCD(){ Wire.requestFrom(controlByte, 2); potValue[0] = Wire.read(); // ilk potmetre baytını oku potValue[1] = Wire.read(); // ikinci potmetre baytını oku display.fillRect(40, 0, 40, 45, BEYAZ); // LCD ekrandaki değişken ekranı temizle.setCursor(40, 10); display.print(potValue[0]); // LCD ekrana 1. potmetre değerini yaz.setCursor(40, 22); display.print(potValue[1]); // 2. potmetre değerini LCD ekrana yaz.setCursor(60, (10 + i * 12)); display.print("<"); display.display(); }
void interval(){ // LCD'ye veri yazmak için interval timer if ((millis() - oldTime) > 500) { writeToLCD(); eskiZaman = millis(); } }
Önerilen:
Arduino İle Potansiyometre ile LED Parlaklığını Kontrol Etme: 3 Adım
Arduino İle Potansiyometre İle LED Parlaklığını Kontrol Etme: Bu projede, potansiyometre tarafından sağlanan değişken direnç kullanarak LED'in parlaklığını kontrol edeceğiz. Bu yeni başlayanlar için çok basit bir projedir ancak size potansiyometre ve LED çalışması hakkında daha fazla bilgi edinmek için gerekli olan birçok şeyi öğretecektir
Arduino için MCP41HVX1 Dijital Potansiyometre: 10 Adım (Resimli)
Arduino için MCP41HVX1 Dijital Potansiyometre: MCP41HVX1 dijital potansiyometre ailesi (diğer adıyla DigiPots), bir analog potansiyometrenin işlevini taklit eden ve SPI aracılığıyla kontrol edilen cihazlardır. Örnek bir uygulama, stereonuzdaki ses düğmesini bir DigiPot ile değiştirmek olabilir
Potansiyometre ve Servo: Arduino İle Kontrollü Hareket: 4 Adım
Potansiyometre ve Servo: Arduino İle Kontrollü Hareket: Öncelikle bu devreyi bir araya getirmek için ilgili malzemeleri toplamanız gerekir
CircuitPython'da Potansiyometre ile Kontrol Edilen Çift 7-segmentli Ekranlar - Görme Kalıcılığının Gösterimi: 9 Adım (Resimlerle)
CircuitPython'da Potansiyometre Tarafından Kontrol Edilen Çift 7-segmentli Ekranlar - Görme Kalıcılığının Gösterimi: Bu proje, bir çift 7-segment LED ekranda (F5161AH) ekranı kontrol etmek için bir potansiyometre kullanır. Potansiyometre düğmesi çevrildiğinde, görüntülenen sayı 0 ila 99 aralığında değişir. Her an, çok kısa bir süre için yalnızca bir LED yanar, ancak
Arduino Uno R3 ile Potansiyometre ile LED Kontrolü: 6 Adım
Arduino Uno R3 ile Potansiyometre ile LED Kontrolü: Daha önce, yeni bir yazılımı tanımak için aydınlatıcı olabilecek kontrol panosuna veri göndermek için Seri Monitör kullanıyorduk. Bu dersimizde, bir potansiyometre ile bir LED'in parlaklığını nasıl değiştireceğimizi ve potansiyometrenin verilerini nasıl alacağımızı görelim