Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
xin chào
Chúc mừng.. !!
Tôi (Somanshu Choudhary) thay mặt cho các liên doanh công nghệ Dcube sẽ điều khiển Rơle thông qua giao thức I2C bằng cách sử dụng Arduino nano và MCP23008.
Bước 1: Tổng quan
- Thiết bị MCP23X08 cung cấp khả năng mở rộng I / O 8-bit, mục đích chung, song song cho các ứng dụng bus I2C hoặc SPI.
- MCP23X08 bao gồm nhiều thanh ghi cấu hình 8 bit để lựa chọn đầu vào, đầu ra và phân cực. Hệ thống chủ có thể kích hoạt I / Os như là đầu vào hoặc đầu ra bằng cách ghi các bit cấu hình I / O. Dữ liệu cho mỗi đầu vào hoặc đầu ra được giữ trong thanh ghi Đầu vào hoặc Đầu ra tương ứng. Đảo cực của thanh ghi Cổng vào có thể được đảo ngược với thanh ghi Đảo cực. Tất cả các thanh ghi có thể được đọc bởi chủ hệ thống.
- LIÊN KẾT DATASHEET:
Bước 2: Những gì bạn cần / Liên kết
1. Arduino Nano LINK:
2. Shield cho Arduino Nano LINK:
3. Cáp USB loại A đến Micro loại B dài 6 feet
4. LIÊN KẾT Cáp I²C:
5. Tám Rơle có điều khiển I²C SPDT
6. Adapter LINK:
Bước 3: Sơ đồ mạch
Bước 4: Lập trình - Tôi
- Trong đoạn mã này, tôi sử dụng Mô hình lập trình hàm
- Tôi đã sử dụng các tab khác nhau để định nghĩa hàm và gọi hàm
MÃ DƯỚI TAB q:
// Mã gọi hàm đơn giản
#include void setup ()
{
// Địa chỉ I2C của MCP23008
#define MCP_ADDR 0x20
// Tham gia I2C Bus với tư cách chính
Wire.begin ();
// Bắt đầu giao tiếp nối tiếp và đặt tốc độ truyền
Serial.begin (9600);
// Bắt đầu truyền với thiết bị đã cho trên bus I2C
Wire.beginTransmission (MCP_ADDR);
// Chọn IODIR - đăng ký ĐĂNG KÝ HƯỚNG I / O
Wire.write (0x00);
// Chọn thao tác bắt buộc (đầu ra)
Wire.write (0x00);
// Chọn thanh ghi CẤU HÌNH
Wire.write (0x05);
// Chọn thao tác bắt buộc
Wire.write (0x0E);
// kết thúc quá trình truyền
Wire.endTransmission ();
}
void loop ()
{
a1_on ();
chậm trễ (1000);
a1_off ();
chậm trễ (1000);
a2_on ();
chậm trễ (1000);
a2_off ();
chậm trễ (1000);
a3_on ();
chậm trễ (1000);
a3_off ();
chậm trễ (1000);
a4_on ();
chậm trễ (1000);
a4_off ();
chậm trễ (1000);
a5_on ();
chậm trễ (1000);
a5_off ();
chậm trễ (1000);
a6_on ();
chậm trễ (1000);
a6_off ();
chậm trễ (1000);
a7_on ();
chậm trễ (1000);
a7_off ();
chậm trễ (1000);
a8_on ();
chậm trễ (1000);
a8_off ();
}
MÃ DƯỚI TAB q1:
// Mã này để bật và tắt relay 1 trên tàu
void a1_on () {
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x01);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a1_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
MÃ DƯỚI TAB q2:
// Mã này để bật và tắt relay 2 trên tàu
void a2_on () {
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x02);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a2_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
MÃ DƯỚI TAB q3: // Mã này để bật và tắt rơle 3 trên bo mạch
void a3_on ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x04);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a3_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
Bước 5: Lập trình - II
MÃ DƯỚI TAB q4:
// Mã này để bật và tắt rơle 4 trên tàu
void a4_on ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x08);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a4_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
MÃ DƯỚI TAB q5:
// Đoạn mã này để bật và tắt rơle 5 trên tàu
void a5_on ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x10);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a5_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
MÃ DƯỚI TAB q6: // Mã này để bật và tắt rơle 6 trên bo mạch
void a6_on ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x20);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a6_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
MÃ DƯỚI TAB q7: // Mã này để bật và tắt rơle 7 trên bo mạch
void a7_on () {
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x40);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a7_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
MÃ DƯỚI TAB q8: // Mã này để bật và tắt rơle 8 trên bo mạch
void a8_on () {
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x80);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
void a8_off ()
{
// Bắt đầu truyền
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
chậm trễ (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Xuất ra màn hình
Serial.print ("Giá trị GPIO:");
Serial.println (GPIO, BIN);
}
Bước 6: Video
Để biết thêm các câu hỏi khác Hãy truy cập trang web của chúng tôi:
www.dcubetechnologies.com