Mündəricat:
- Addım 1: DS1803 -ün əlaqələri
- Addım 2: Komanda Baytı
- Addım 3: DS1803 -ə nəzarət
- Addım 4: Quraşdırın
- Addım 5: Proqram
Video: Arduino ilə DS1803 İkili Rəqəmsal Potansiyometr: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:48
DS1803 rəqəmsal potmetrinin istifadəsini Arduino ilə bölüşmək istəyirəm. Bu IC, iki telli bir interfeys üzərində idarə oluna bilən iki rəqəmsal potmetrdən ibarətdir, bunun üçün tel.h kitabxanasından istifadə edirəm.
Bu IC normal analoq potmetrini əvəz edə bilər. Bu yolla, məsələn, gücləndiricini və ya enerji təchizatını idarə edə bilərsiniz.
Bu təlimatda işini göstərmək üçün iki LED -in parlaqlığını idarə edirəm.
Arduino, fırlanan bir kodlayıcının nəbzini sayır və dəyəri dəyişən qazana [0] və qazana [1] yerləşdirir. Enkoderdəki düyməni basdığınızda, qazan [0] ilə qazan [1] arasında keçid edə bilərsiniz.
Qazanların həqiqi dəyəri DS1803 -dən geri oxunur və dəyişən potValue [0] və potValue [1] -də yerləşdirilir və LCD -də göstərilir.
Addım 1: DS1803 -ün əlaqələri
Burada DS1803 -ün əlaqələrini görə bilərsiniz. H potansiyometrin yüksək tərəfidir, L aşağı tərəfi və W silecekdir. SCL və SDA avtobus əlaqələridir.
A0, A1 və A2 bağlantısı ilə DS1803 -ə öz ünvanını verə bilərsiniz, beləliklə bir avtobusla daha çox cihazı idarə edə bilərsiniz. Mənim nümunəmdə, bütün pinləri yerə bağlayaraq DS1803 ünvanını 0 verdim.
Addım 2: Komanda Baytı
DS1803 -ün işləmə üsulu əmr baytında istifadə edilə bilər. "Yazma potensiometri-0" seçdiyiniz zaman hər iki potansiyometr seçilir, yalnız potansiyometr-0-ı tənzimləmək istədiyiniz zaman yalnız ilk məlumat baytını göndərməlisiniz. "Potansiyometr yazın-1" yalnız potmetr-1-i tənzimləyin. "Hər iki potensiometrə yaz" hər iki potensiometrə eyni dəyər verir.
Addım 3: DS1803 -ə nəzarət
Nəzarət baytı (şəkil 3) bir cihaz identifikatoruna malikdir, bu həmişə eyni qalır. Mənim nümunəmdə A0, A1 və A2 0-a bərabərdir, çünki bütün A pinlərini yerə qoyaraq ünvan seçirik. Arduino -da "Wire.beginTransmission" və "Wire.requestFrom" əmrləri ilə son R/W 0 və ya 1 olaraq təyin ediləcək. Şəkil 5 -də bütün teleqramı görə bilərsiniz. Oxunan teleqram Şəkil 4 -də göstərilmişdir.
Addım 4: Quraşdırın
Bu sxem hər şeyi necə bağlayacağınızı göstərir. Nokia LCD fərqli bağlantılarla mövcuddur, özünüzü düzgün bağladığınızdan əmin olun. Həm də fırlanan kodlayıcının fərqli versiyaları var, bəzilərinin ortasında digərlərində olmayan ortada var. Enkoderin A və B çıxış siqnallarını süzmək üçün kiçik bir filtr şəbəkəsi (100nF qapaqlı 470 Ohm rezistor) qoydum. Çıxışda çox səs -küy olduğu üçün bu filtrə ehtiyacım var. Bəzi səs -küyləri ləğv etmək üçün proqramımda debüt taymerini də qoydum. Qalanları üçün dövrənin aydın olduğunu düşünürəm. LCD, Adafruit https://www.adafruit.com/product/338 vasitəsilə sifariş verilə bilər.
Addım 5: Proqram
2 telli avtobusun istifadəsi üçün Wire.h kitabxanası daxildir. LCD-dən istifadə etmək üçün https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library saytından yükləyə biləcəyiniz Adafruit kitabxanasını da əlavə edirəm Adafruit_GFX.h kitabxanası burada mövcuddur https:// github. com/adafruit/Adafruit-GFX-Kitabxanası.
#daxil edin
#daxil edin
#daxil edin
Adafruit_PCD8544 ekran = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Burada bütün dəyişənləri görə bilərsiniz. Bayt və əmr baytını daha əvvəl təsvir edildiyi kimi idarə edin. DeBounceTime, kodlayıcınızdakı səs -küydən asılı olaraq tənzimlənə bilər.
bayt qazan [2] = {1, 1}; bayt controlByte = B0101000; // 7 bit, bayt əmriByte = B10101001; // son 2 bit potmetr seçimidir. bayt potValue [2]; int i = 0; int deBounceTime = 10; // Gürültüdən asılı olaraq bu dəyəri tənzimləyin const enc encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; imzasız uzun newDebounceTime = 0; imzasız uzun oldTime; boolean preslənmiş = 0; boolean sayı = 1;
Quraşdırmada doğru pinləri təyin edirəm və statik mətni LCD -yə qoyuram
void setup () {Wire.begin (); Serial.begin (9600); pinMode (encoder_A, INPUT); pinMode (encoder_B, INPUT); pinMode (düyməPin, GİRİŞ); newDebounceTime = milis ();
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ədə əvvəlcə aralığın 500 ms -dən çox olub olmadığını yoxlayıram, əgər varsa LCD yenilənir. Əks təqdirdə, kodlayıcıdakı düymə yoxlanılır. ToggleBuffer düyməsinə basıldıqda çağırılır. Bundan sonra kodlayıcı yoxlanılır. 0 girişi aşağıdırsa (fırlanma aşkarlanır) B girişini yoxlayıram, B girişi 0 olarsa potu artırıram , digərlərini azaldıram. Bundan sonra, dəyər tel.write vasitəsilə DS1803 -ə göndəriləcək.
boşluq döngəsi () {
interval ();
if (digitalRead (buttonPin) == 1 && (pressed == 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;}} başqa {pot -; if (qazan <1) {qazan = 1;}} say = 1; newDebounceTime = milis ();
Wire.beginTransmission (controlByte); // ötürməyə başlayın
Wire.write (commandByte); // potmetrlərin seçimi Wire.write (qazan [0] * 10); // Wire.write potmeter məlumatlarının 1 baytını göndərin (pot [1] * 10); // Wire.endTransmission potmeter məlumatlarının 2 baytını göndərin (); // ötürməni dayandırın} başqa halda (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = milis (); }}
void toggleBuffer () {presed = 1; əgər (i == 0) {i = 1;} başqa {i = 0;}}
Əvvəlcə varisləri yazmalı olduğum sahəni təmizləyirəm. Bunu bu sahədə düzbucaqlı çəkmək üçün edirəm. Bundan sonra dəyişənləri ekrana yazıram.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // oxumaq ilk potmeter byte potValue [1] = Wire.read (); // ikinci potmeter byte display.fillRect (40, 0, 40, 45, BEYAZ) oxuyun; // LCD displeydə dəyişkən ekranı sil.setCursor (40, 10); display.print (potValue [0]); // LCD displeyə 1 -ci potmetr dəyərini yazın. setCursor (40, 22); display.print (potValue [1]); // LCD display.setCursor -a 2 -ci potmetr dəyərini yazın (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// məlumatların LCD -yə yazılması üçün interval taymeri ((millis () - oldTime)> 500) {writeToLCD (); oldTime = milis (); }}
Tövsiyə:
CPE 133 İkili İkili Onlu Final Layihəsi: 5 Addım
CPE 133 Final Projesi İkili İkili: İkili Nömrələr rəqəmsal məntiq düşünərkən ağla gələn ilk şeylərdən biridir. Bununla birlikdə, İkili Nömrələr yeni başlayanlar üçün çətin bir anlayış ola bilər
2 Potansiyometr və 2 Servo: Arduino ilə İdarə Edilən Hərəkət: 4 Addım
2 Potansiyometr və 2 Servo: Arduino ilə İdarə Edilən Hərəkət: Əvvəlcə bu dövrəni bir araya gətirmək üçün müvafiq materialları toplamalısınız
CircuitPython -da Potansiyometr tərəfindən idarə olunan 7 -seqmentli ikili ekranlar - Görmə qabiliyyətinin nümayişi: 9 addım (şəkillərlə)
CircuitPython-da Potentiometer tərəfindən idarə olunan 7 seqmentli ikili ekranlar-Görmə qabiliyyətinin nümayişi: Bu layihə, bir neçə 7 seqmentli LED displeydə (F5161AH) ekranı idarə etmək üçün potensiometrdən istifadə edir. Potensiometr düyməsi döndükdə göstərilən nömrə 0 ilə 99 aralığında dəyişir. Hər an yalnız bir LED çox qısa müddətdə yanır, amma
Arduino Dərsliyi - Potansiyometr ilə Servo Motor İdarəetmə: 5 addım
Arduino Dərsliyi - Potansiyometr ilə Servo Motor İdarəetmə: Bu təlimat, " Arduino: Potansiyometr ilə Servo Motoru Necə İdarə Etmək " in yazılı versiyasıdır. Bu yaxınlarda yüklədiyim YouTube videosu. Yoxlamaq üçün YouTube kanalına daxil olmağı məsləhət görürəm
Bir Potansiyometr ilə Bir Step Motora Necə Nəzarət Edilir .: 5 Addım
Bir Potansiyometrlə Bir Step Motoru Necə İdarə Etmək olar: Bu təlimatda, potansiyometrdən istifadə edərək bir step motorun vəziyyətini necə idarə edəcəyinizi göstərəcəyəm. Beləliklə, başlayaq