Isi kandungan:
- Langkah 1: Sambungan DS1803
- Langkah 2: Bait Perintah
- Langkah 3: Kawalan DS1803
- Langkah 4: Sediakan
- Langkah 5: Program
Video: Potensiometer Dual Digital DS1803 Dengan Arduino: 5 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:12
Saya ingin berkongsi penggunaan potmeter digital DS1803 dengan Arduino. IC ini mengandungi dua potmeters digital yang dapat dikendalikan melalui antara muka dua wayar, untuk ini saya menggunakan library wire.h.
IC ini boleh menggantikan potmeter analog biasa. Dengan cara ini anda dapat mengawal misalnya penguat atau bekalan kuasa.
Dalam arahan ini saya mengawal kecerahan dua LED untuk menunjukkan yang berfungsi.
Arduino mengira denyutan pengekod putar dan meletakkan nilainya dalam periuk berubah [0] dan periuk [1]. Apabila anda menekan suis pengekod, anda boleh beralih antara periuk [0] dan periuk [1].
Nilai sebenar pot dibaca kembali dari DS1803 dan diletakkan dalam variabel potValue [0] dan potValue [1] dan dipaparkan pada LCD.
Langkah 1: Sambungan DS1803
Di sini anda dapat melihat sambungan DS1803. H adalah sisi tinggi potensiometer, L sisi rendah dan W pengelap. SCL dan SDA adalah sambungan bas.
Dengan sambungan A0, A1 dan A2 anda dapat memberikan alamat DS1803 itu sendiri, dengan cara ini anda dapat mengendalikan lebih banyak peranti melalui satu bas. Dalam contoh saya, saya telah memberikan iklan DS1803 0 dengan menghubungkan semua pin ke tanah.
Langkah 2: Bait Perintah
Cara DS1803 beroperasi boleh digunakan dalam bait arahan. Apabila anda memilih "tulis potensiometer-0" kedua potensiometer dipilih, apabila anda hanya mahu menyesuaikan potensiometer-0, anda hanya perlu menghantar bait data pertama. "Tulis potensiometer-1" hanya sesuaikan potmeter-1. "Tulis ke kedua potensiometer" memberikan nilai yang sama kepada kedua-dua potensiometer.
Langkah 3: Kawalan DS1803
Byte kawalan (gambar 3) mempunyai pengecam peranti, ini tetap sama. Dalam contoh saya A0, A1 dan A2 adalah 0 kerana kami memilih adres dengan meletakkan semua pin A ke tanah. R / W bit terakhir akan ditetapkan ke 0 atau 1 dengan perintah "Wire.beginTransmission" dan "Wire.requestFrom" di Arduino. Pada gambar 5 anda dapat melihat keseluruhan telegram. Telegram yang dibaca ditunjukkan pada gambar 4.
Langkah 4: Sediakan
Litar ini menunjukkan cara menghubungkan semuanya. LCD Nokia tersedia dengan sambungan yang berbeza, pastikan anda menyambungkan dengan betul. Juga pengekod putar versi yang berbeza, beberapa mempunyai persamaan pada pin tengah yang lain tidak. Saya telah meletakkan sedikit rangkaian penapis (470 Ohm perintang dengan topi 100nF) untuk menapis isyarat output A dan B pengekod. Saya memerlukan penapis ini kerana outputnya mempunyai banyak bunyi. Saya juga meletakkan pemasa debounce dalam program saya untuk membatalkan sedikit bunyi. Selebihnya saya rasa litarnya jelas. LCD boleh dipesan melalui Adafruit
Langkah 5: Program
Untuk penggunaan bas 2 wayar saya sertakan perpustakaan Wire.h. Untuk menggunakan LCD saya sertakan perpustakaan Adafruit yang boleh anda muat turun dari https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library juga perpustakaan Adafruit_GFX.h terdapat di sini https:// github. com / adafruit / Adafruit-GFX-Perpustakaan.
#sertakan
#sertakan
#sertakan
Paparan Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Di sini anda dapat melihat semua pemboleh ubah. Bait kawalan dan bait arahan seperti yang dijelaskan sebelumnya. DeBounceTime dapat disesuaikan bergantung pada kebisingan pada pengekod anda.
pot bait [2] = {1, 1}; byte controlByte = B0101000; // 7 bit, perintah byteByte = B10101001; // 2 bit terakhir adalah pemilihan potmeter. bait potValue [2]; int i = 0; int deBounceTime = 10; // Laraskan nilai ini bergantung pada noise const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; newDebounceTime panjang yang tidak ditandatangani = 0; lama lama yang tidak ditandatangani; boolean ditekan = 0; kiraan boolean = 1;
Dalam persediaan saya menentukan pin yang betul dan meletakkan teks statik pada LCD
batal persediaan () {Wire.begin (); Serial.begin (9600); pinMode (encoder_A, INPUT); pinMode (encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = milis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (HITAM); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); paparan.display ();
}
Dalam gelung saya mula-mula memeriksa apakah selang waktu lebih dari 500ms, jika ya LCD dikemas kini. Sekiranya tidak, butang pada pengekod diperiksa. Sekiranya ditekan toggleBuffer dipanggil. Selepas ini pengekod diperiksa. Sekiranya input 0 rendah (putaran dikesan) saya periksa input B, jika input B adalah 0 I kenaikan pot , yang lain saya tolak. Selepas ini nilainya akan dihantar ke DS1803 melalui wire.write.
gelung kosong () {
selang ();
if (digitalRead (buttonPin) == 1 && (ditekan == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {ditekan = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} lain {pot -; if (pot <1) {pot = 1;}} kiraan = 1; newDebounceTime = milis ();
Wire.beginTransmission (controlByte); // mula menghantar
Wire.write (commandByte); // pemilihan potmeters Wire.write (pot [0] * 10); // hantar byte pertama data potmeter Wire.write (pot [1] * 10); // hantar byte data potmeter ke-2 Wire.endTransmission (); // berhenti menghantar} lain jika (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
batal toggleBuffer () {ditekan = 1; jika (i == 0) {i = 1;} lain {i = 0;}}
Mula-mula saya membersihkan kawasan di mana saya harus menulis perbezaannya. Saya melakukan ini untuk melukis sebuah segi empat tepat di kawasan ini. Selepas itu saya menulis pemboleh ubah ke skrin.
batal writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // baca potmeter byte potValue pertama [1] = Wire.read (); // baca paparan byte potmeter kedua.fillRect (40, 0, 40, 45, WHITE); // skrin pemboleh ubah yang jelas pada paparan LCD.setCursor (40, 10); display.print (potValue [0]); // tulis nilai potmeter pertama ke paparan LCD.setCursor (40, 22); display.print (potValue [1]); // tulis nilai potmeter ke-2 ke paparan LCD.setCursor (60, (10 + i * 12)); display.print ("<"); paparan.display (); }
selang kekosongan () {// pemasa selang untuk menulis data ke LCD jika ((milis () - lamaTime)> 500) {writeToLCD (); oldTime = millis (); }}
Disyorkan:
Mengawal Kecerahan LED Dengan Potensiometer Dengan Arduino: 3 Langkah
Mengawal Kecerahan LED Dengan Potensiometer Dengan Arduino: Dalam projek ini, kita akan mengawal kecerahan LED menggunakan rintangan berubah-ubah yang disediakan oleh potensiometer. Ini adalah projek yang sangat asas untuk pemula tetapi akan mengajar anda banyak perkara mengenai potensiometer dan kerja LED yang diperlukan untuk membuat
Potensiometer Digital MCP41HVX1 untuk Arduino: 10 Langkah (dengan Gambar)
Potensiometer Digital MCP41HVX1 untuk Arduino: Keluarga potensiometer digital MCP41HVX1 (aka DigiPots) adalah peranti yang meniru fungsi potensiometer analog dan dikendalikan melalui SPI. Aplikasi contoh akan menggantikan tombol kelantangan pada stereo anda dengan DigiPot yang
Potensiometer & Servo: Gerakan Terkawal Dengan Arduino: 4 Langkah
Potentiometer & Servo: Controlled Motion With Arduino: Mula-mula anda perlu mengumpulkan bahan yang relevan untuk menyatukan litar ini
Dual 7-segmen Paparan Dikendalikan oleh Potensiometer di CircuitPython - Demonstrasi Ketekunan Penglihatan: 9 Langkah (dengan Gambar)
Dual 7-segmen Paparan Dikendalikan oleh Potensiometer di CircuitPython - Demonstrasi Ketekunan Penglihatan: Projek ini menggunakan potensiometer untuk mengawal paparan pada beberapa paparan LED 7 segmen (F5161AH). Semasa tombol potensiometer dipusingkan, jumlah yang ditunjukkan berubah dalam julat 0 hingga 99. Hanya satu LED menyala pada bila-bila masa, sekejap, tetapi
LED Dimmer Dengan Potensiometer: 5 Langkah (dengan Gambar)
LED Dimmer With Potentiometer: Ini adalah instruksional yang mengajar anda bagaimana menggunakan potensiometer untuk meredupkan LED