Mục lục:
- Bước 1: Kết nối của DS1803
- Bước 2: Lệnh Byte
- Bước 3: Kiểm soát DS1803
- Bước 4: Thiết lập
- Bước 5: Chương trình
Video: Chiết áp kỹ thuật số kép DS1803 với Arduino: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
Tôi muốn chia sẻ cách sử dụng nồi kế số DS1803 với Arduino. IC này chứa hai nồi kế kỹ thuật số có thể được điều khiển qua giao diện hai dây, đối với điều này, tôi sử dụng thư viện wire.h.
IC này có thể thay thế một nồi kế tương tự bình thường. Bằng cách này, bạn có thể điều khiển bộ khuếch đại hoặc nguồn điện.
Trong hướng dẫn này, tôi kiểm soát độ sáng của hai đèn LED để hiển thị hoạt động.
Arduino đếm các xung của bộ mã hóa quay và đặt giá trị vào biến pot [0] và pot [1]. Khi nhấn nút trên bộ mã hóa, bạn có thể chuyển đổi giữa nồi [0] và nồi [1].
Giá trị thực của các bình được đọc lại từ DS1803 và được đặt trong biến potValue [0] và potValue [1] và hiển thị trên màn hình LCD.
Bước 1: Kết nối của DS1803
Tại đây bạn có thể thấy các kết nối của DS1803. H là cạnh cao của chiết áp, L là cạnh thấp và W của cần gạt nước. SCL và SDA là các kết nối xe buýt.
Với kết nối A0, A1 và A2, bạn có thể cung cấp cho DS1803 địa chỉ riêng của nó, bằng cách này, bạn có thể điều khiển nhiều thiết bị hơn thông qua một bus. Trong ví dụ của tôi, tôi đã cho DS1803 tuân theo 0 bằng cách kết nối tất cả các chân với đất.
Bước 2: Lệnh Byte
Cách hoạt động của DS1803 có thể được sử dụng trong byte lệnh. Khi bạn chọn "ghi chiết áp-0" cả hai chiết áp đều được chọn, khi bạn chỉ muốn điều chỉnh chiết áp-0, bạn chỉ phải gửi byte dữ liệu đầu tiên. "Ghi chiết áp-1" chỉ điều chỉnh chiết áp-1. "Ghi cho cả hai chiết áp" cho cả hai chiết áp cùng một giá trị.
Bước 3: Kiểm soát DS1803
Byte điều khiển (hình 3) có một mã định danh thiết bị, điều này luôn giữ nguyên. Trong ví dụ của tôi A0, A1 và A2 là 0 vì chúng tôi chọn các vị trí bằng cách đặt tất cả các chân A xuống đất. Bit cuối cùng R / W sẽ được đặt thành 0 hoặc 1 bằng lệnh "Wire.beginTransmission" và "Wire.requestFrom" trong Arduino. Trong hình 5, bạn có thể thấy toàn bộ bức điện. Bức điện đã đọc được thể hiện trong hình 4.
Bước 4: Thiết lập
Mạch này chỉ ra cách kết nối mọi thứ. Nokia LCD có sẵn với các kết nối khác nhau, hãy đảm bảo rằng bạn kết nối đúng. Ngoài ra, bộ mã hóa quay phiên bản khác nhau của anh ấy, một số có điểm chung ở chân giữa, số khác thì không. Tôi đã đặt một mạng bộ lọc nhỏ (điện trở 470 Ohm với nắp 100nF) để lọc tín hiệu đầu ra A và B của bộ mã hóa. Tôi cần bộ lọc này vì đầu ra có rất nhiều tiếng ồn. Tôi cũng đặt một bộ đếm thời gian gỡ lỗi trong chương trình của mình để loại bỏ một số tiếng ồn. Đối với phần còn lại, tôi nghĩ rằng mạch là rõ ràng. Bạn có thể đặt hàng màn hình LCD qua Adafruit
Bước 5: Chương trình
Để sử dụng bus 2 dây, tôi đưa vào thư viện Wire.h. Để sử dụng màn hình LCD, tôi bao gồm thư viện Adafruit mà bạn có thể tải xuống từ https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library cũng có thư viện Adafruit_GFX.h tại đây https://github. com / adafruit / Adafruit-GFX-Thư viện.
#bao gồm
#bao gồm
#bao gồm
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Ở đây bạn có thể xem tất cả các biến. Điều khiển byte và byte lệnh như đã mô tả trước đây. Thời gian deBounceTime có thể được điều chỉnh tùy thuộc vào tiếng ồn trên bộ mã hóa của bạn.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bit, byte commandByte = B10101001; // 2 bit cuối cùng là lựa chọn potmeter. byte potValue [2]; int i = 0; int deBounceTime = 10; // Điều chỉnh giá trị này tùy thuộc vào nhiễu const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; oldTime dài không dấu; boolean được ép = 0; số lượng boolean = 1;
Trong thiết lập, tôi xác định các chân bên phải và đặt văn bản tĩnh trên màn hình LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (mã hóa_A, INPUT); pinMode (encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (ĐEN); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Trong vòng lặp, đầu tiên tôi kiểm tra xem khoảng thời gian có nhiều hơn 500ms hay không, nếu có thì màn hình LCD sẽ được cập nhật. Nếu không chọn nút trên bộ mã hóa. Nếu được nhấn, bộ đệm chuyển đổi sẽ được gọi. Sau khi bộ mã hóa này được kiểm tra. Nếu đầu vào 0 ở mức thấp (phát hiện vòng quay), tôi kiểm tra đầu vào B, nếu đầu vào B là 0, tôi tăng giá trị , các đầu vào khác tôi giảm. Sau đó, giá trị sẽ được gửi đến DS1803 qua wire.write.
void loop () {
khoảng ();
if (digitalRead (buttonPin) == 1 && (được nhấn == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {được nhấn = 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 = millis ();
Wire.beginTransmission (controlByte); // bắt đầu truyền
Wire.write (commandByte); // lựa chọn potmeters Wire.write (pot [0] * 10); // gửi byte thứ nhất của dữ liệu potmeter Wire.write (pot [1] * 10); // gửi byte thứ 2 của dữ liệu potmeter Wire.endTransmission (); // dừng truyền} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {press = 1; if (i == 0) {i = 1;} else {i = 0;}}
Đầu tiên, tôi xóa khu vực mà tôi phải viết các biến thể. Tôi làm điều này để vẽ một hình chữ nhật trong khu vực này. Sau đó, tôi ghi các biến ra màn hình.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // đọc byte potmeter đầu tiên potValue [1] = Wire.read (); // đọc byte potmeter thứ hai display.fillRect (40, 0, 40, 45, WHITE); // xóa màn hình biến trên LCD display.setCursor (40, 10); display.print (potValue [0]); // ghi giá trị potmeter thứ nhất vào LCD display.setCursor (40, 22); display.print (potValue [1]); // ghi giá trị potmeter thứ 2 vào LCD display.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void khoảng () {// bộ định thời gian để ghi dữ liệu lên LCD if ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Đề xuất:
Kiểm soát độ sáng của đèn LED với chiết áp với Arduino: 3 bước
Điều khiển độ sáng của đèn LED bằng chiết áp Với Arduino: Trong dự án này, chúng ta sẽ điều khiển độ sáng của đèn LED bằng cách sử dụng điện trở thay đổi được cung cấp bởi chiết áp. Đây là một dự án rất cơ bản cho người mới bắt đầu nhưng nó sẽ dạy cho bạn nhiều điều về chiết áp và hoạt động của đèn LED, những thứ cần thiết để tạo ra
Chiết áp kỹ thuật số MCP41HVX1 cho Arduino: 10 bước (có hình ảnh)
Chiết áp kỹ thuật số MCP41HVX1 cho Arduino: Họ chiết áp kỹ thuật số MCP41HVX1 (hay còn gọi là DigiPots) là thiết bị bắt chước chức năng của chiết áp tương tự và được điều khiển thông qua SPI. Một ứng dụng ví dụ sẽ thay thế núm âm lượng trên dàn âm thanh của bạn bằng một DigiPot
Hướng dẫn Arduino - Điều khiển động cơ bước với chiết áp: 5 bước
Hướng dẫn Arduino - Điều khiển động cơ bước bằng chiết áp: Hướng dẫn này là phiên bản viết của " Arduino: Cách điều khiển động cơ bước bằng chiết áp " Video YouTube mà tôi đã tải lên gần đây. Tôi thực sự khuyên bạn nên xem nó. Kênh YouTube của tôi Đầu tiên, bạn sẽ thấy
Màn hình 7 đoạn kép được điều khiển bằng chiết áp trong CircuitPython - Thể hiện sự bền bỉ của tầm nhìn: 9 bước (có hình ảnh)
Màn hình 7 đoạn kép được điều khiển bằng chiết áp trong CircuitPython - Thể hiện sự bền bỉ của tầm nhìn: Dự án này sử dụng chiết áp để điều khiển màn hình hiển thị trên một vài màn hình LED 7 đoạn (F5161AH). Khi xoay núm chiết áp, số hiển thị thay đổi trong phạm vi từ 0 đến 99. Chỉ một đèn LED sáng bất kỳ lúc nào, rất nhanh, nhưng
Cho phép tạo ra một quả cầu pha lê ma thuật với phép thuật! ~ Arduino ~: 9 bước
Cho phép tạo ra một quả cầu pha lê ma thuật với phép thuật! ~ Arduino ~: Trong phần này, chúng tôi sẽ tạo một Magic Ball sử dụng cảm biến chuyển động và máy quét RFID để điều khiển hoạt ảnh của đèn LED bên trong