Daftar Isi:
- Langkah 1: Koneksi DS1803
- Langkah 2: Perintah Byte
- Langkah 3: Kontrol DS1803
- Langkah 4: Siapkan
- Langkah 5: Program
Video: DS1803 Potensiometer Digital Ganda Dengan Arduino: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:58
Saya ingin berbagi penggunaan potmeter digital DS1803 dengan Arduino. IC ini berisi dua potmeter digital yang dapat dikontrol melalui antarmuka dua kabel, untuk ini saya menggunakan perpustakaan wire.h.
IC ini dapat menggantikan potmeter analog biasa. Dengan cara ini Anda dapat mengontrol misalnya amplifier atau catu daya.
Dalam instruksi ini saya mengontrol kecerahan dua LED untuk menunjukkan cara kerja.
Arduino menghitung pulsa dari rotary encoder dan menempatkan nilainya dalam variabel pot[0] dan pot[1]. Saat Anda menekan sakelar pada encoder, Anda dapat beralih antara pot[0] dan pot[1].
Nilai sebenarnya dari pot dibaca kembali dari DS1803 dan ditempatkan dalam variabel potValue[0] dan potValue[1] dan ditampilkan pada LCD.
Langkah 1: Koneksi DS1803
Di sini Anda dapat melihat koneksi DS1803. H adalah sisi tinggi potensiometer, L sisi rendah dan W wiper. SCL dan SDA adalah koneksi bus.
Dengan koneksi A0, A1 dan A2 Anda dapat memberikan DS1803 alamatnya sendiri, dengan cara ini Anda dapat mengontrol lebih banyak perangkat melalui satu bus. Dalam contoh saya, saya telah memberikan alamat DS1803 0 dengan menghubungkan semua pin ke ground.
Langkah 2: Perintah Byte
Cara DS1803 beroperasi dapat digunakan dalam byte perintah. Ketika Anda memilih "tulis potensiometer-0" kedua potensiometer dipilih, bila Anda hanya ingin menyesuaikan potensiometer-0, Anda hanya perlu mengirim byte data pertama. "Tulis potensiometer-1" hanya menyesuaikan potmeter-1. "Tulis ke kedua potensiometer" memberikan nilai yang sama pada kedua potensiometer.
Langkah 3: Kontrol DS1803
Byte kontrol (gambar 3) memiliki pengenal perangkat, ini tetap selalu sama. Dalam contoh saya A0, A1 dan A2 adalah 0 karena kami memilih alamat dengan meletakkan semua A-pin ke ground. Bit terakhir R/W akan diatur ke 0 atau 1 dengan perintah "Wire.beginTransmission" dan "Wire.requestFrom" di Arduino. Pada gambar 5 Anda dapat melihat seluruh telegram. Baca telegram ditunjukkan pada gambar 4.
Langkah 4: Siapkan
Sirkuit ini menunjukkan bagaimana menghubungkan semuanya. LCD Nokia tersedia dengan koneksi yang berbeda, pastikan Anda menghubungkannya dengan benar. Rotary encoder nya juga beda versi, ada yg punya kesamaan di tengah pin yg lain tidak. Saya telah memasang jaringan filter kecil (resistor 470 Ohm dengan tutup 100nF) untuk menyaring sinyal keluaran A dan B dari encoder. Saya membutuhkan filter ini karena outputnya memang memiliki banyak noise. Saya juga menempatkan timer debounce di program saya untuk membatalkan beberapa kebisingan. Selebihnya saya pikir sirkuitnya jelas. LCD dapat dipesan melalui Adafruit
Langkah 5: Program
Untuk penggunaan bus 2-kawat saya menyertakan perpustakaan Wire.h. Untuk menggunakan LCD saya sertakan perpustakaan Adafruit yang dapat Anda unduh dari https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library juga perpustakaan Adafruit_GFX.h tersedia di sini https://github. com/adafruit/Adafruit-GFX-Library.
#termasuk
#termasuk
#termasuk
Tampilan Adafruit_PCD8544 = Adafruit_PCD8544(7, 6, 5, 4, 3);
Di sini Anda dapat melihat semua variabel. Kontrol byte dan perintah byte seperti yang dijelaskan sebelumnya. DeBounceTime dapat disesuaikan tergantung pada noise pada encoder Anda.
byte pot[2] = {1, 1};byte controlByte = B0101000; // 7 bit, byte commandByte = B10101001; // 2 bit terakhir adalah pemilihan potmeter. byte potValue[2]; int saya = 0; int deBounceWaktu = 10; // Sesuaikan nilai ini tergantung pada noise const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; lama waktu lama yang tidak ditandatangani; boolean ditekan = 0; jumlah boolean = 1;
Dalam pengaturan saya menentukan pin yang tepat dan meletakkan teks statis pada LCD
void setup() { Wire.begin(); Serial.begin(9600); pinMode(encoder_A, INPUT); pinMode(encoder_B, INPUT); pinMode(tombolPin, INPUT); newDebounceTime = milis();
tampilan.mulai();
display.setContrast(50); tampilan.clearDisplay(); display.setTextSize(1); display.setTextColor(HITAM); display.setCursor(0, 10); display.println("POT 1="); display.setCursor(0, 22); display.println("POT2="); tampilan.tampilan();
}
Dalam loop pertama-tama saya memeriksa apakah intervalnya lebih dari 500ms, jika ya, LCD diperbarui. Jika tidak tombol pada encoder dicentang. Jika ditekan toggleBuffer dipanggil. Setelah ini encoder diperiksa. Jika input 0 rendah (rotasi terdeteksi) saya memeriksa input B, jika input B adalah 0 saya menambah pot, yang lain saya kurangi. Setelah ini nilai akan dikirim ke DS1803 melalui wire.write.
lingkaran 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;} }else{ pot--; if(pot < 1){pot = 1;} } count = 1; newDebounceTime = milis();
Wire.beginTransmission(controlByte); // mulai mentransmisikan
Wire.write(commandByte); // pemilihan potmeter Wire.write(pot[0] * 10); // kirim byte pertama data potmeter Wire.write(pot[1] * 10); // kirim byte ke-2 data potmeter Wire.endTransmission(); // hentikan transmisi }else if (digitalRead(encoder_A) == 1 && digitalRead(encoder_B) == 1 && count == 1 && (millis() - newDebounceTime > deBounceTime)){ count = 0; newDebounceTime = milis(); } }
void toggleBuffer(){ ditekan = 1; if (i == 0){i = 1;}else{i = 0;} }
Pertama saya membersihkan area di mana saya harus menulis variabel. Saya melakukan ini untuk menggambar persegi panjang di area ini. Setelah itu saya menulis variabel ke layar.
void writeToLCD(){ Wire.requestFrom(controlByte, 2); potValue[0] = Wire.read(); // baca byte potmeter pertama potValue[1] = Wire.read(); // membaca byte potmeter kedua display.fillRect(40, 0, 40, 45, WHITE); // hapus layar variabel pada layar LCD.setCursor(40, 10); display.print(potValue[0]); // tulis nilai potmeter pertama ke layar LCD.setCursor(40, 22); display.print(potValue[1]); // tulis nilai potmeter ke-2 ke layar LCD.setCursor(60, (10 + i * 12)); tampilan.print("<"); tampilan.tampilan(); }
void interval(){ // timer interval untuk menulis data ke LCD if ((millis() - oldTime) > 500) { writeToLCD(); waktu lama = milis(); } }
Direkomendasikan:
Grafik Batang Warna Ganda Dengan CircuitPython: 5 Langkah (dengan Gambar)
Grafik Batang Warna Ganda Dengan CircuitPython: Saya melihat grafik batang LED ini di situs Pimoroni dan berpikir ini mungkin proyek yang murah dan menyenangkan saat melakukan penguncian covid-19. Ini berisi 24 LED, merah dan hijau, di masing-masing 12 segmen, jadi secara teori Anda harus dapat menampilkan r
Mengontrol Kecerahan LED Dengan Potensiometer Dengan Arduino: 3 Langkah
Mengontrol Kecerahan LED Dengan Potensiometer Dengan Arduino: Dalam proyek ini, kami akan mengontrol kecerahan LED menggunakan resistansi variabel yang disediakan oleh potensiometer. Ini adalah proyek yang sangat mendasar untuk pemula tetapi akan mengajarkan Anda banyak hal tentang potensiometer dan kerja LED yang diperlukan untuk membuat adva
Potensiometer Digital MCP41HVX1 untuk Arduino: 10 Langkah (dengan Gambar)
Potensiometer Digital MCP41HVX1 untuk Arduino: Keluarga potensiometer digital MCP41HVX1 (alias DigiPots) adalah perangkat yang meniru fungsi potensiometer analog dan dikendalikan melalui SPI. Contoh aplikasi akan mengganti kenop volume pada stereo Anda dengan DigiPot yang
Tampilan 7-segmen Ganda Dikendalikan oleh Potensiometer di CircuitPython - Demonstrasi Kegigihan Visi: 9 Langkah (dengan Gambar)
Tampilan 7-segmen Ganda Dikendalikan oleh Potensiometer di CircuitPython - Demonstrasi Kegigihan Visi: Proyek ini menggunakan potensiometer untuk mengontrol tampilan pada beberapa tampilan LED 7-segmen (F5161AH). Saat kenop potensiometer diputar, angka yang ditampilkan berubah dalam kisaran 0 hingga 99. Hanya satu LED yang menyala setiap saat, sangat singkat, tetapi
Mengontrol LED dengan Potensiometer Dengan Arduino Uno R3: 6 Langkah
Mengontrol LED dengan Potensiometer Dengan Arduino Uno R3: Sebelumnya, kami telah menggunakan Serial Monitor untuk mengirim data ke papan kontrol, yang mungkin mencerahkan untuk mengetahui perangkat lunak baru. Dalam pelajaran ini, mari kita lihat bagaimana mengubah luminance LED dengan potensiometer, dan menerima data potensiometer