Arduino Shields - bảng mở rộng cho arduino. Mở rộng các đầu vào tương tự trong Arduino Arduino mở rộng các cổng đầu ra đầu vào

  • 10.02.2022

Các bài báo mới

● 5,4. Mở rộng các cổng kỹ thuật số cho NodeMCU ESP8266 sử dụng chip MCP23017

Chúng tôi sẽ giới thiệu chỉ báo bằng đèn LED và cảnh báo bằng âm thanh khi sử dụng mô-đun Nodemcu làm bộ điều khiển nhà thông minh. Số lượng chân trên mô-đun Nodemcu ít hơn nhiều so với trên Arduino Mega, vì vậy chúng ta cần IC mở rộng đầu vào MCP23017. Chip MCP23017 bổ sung 16 cổng có thể được cấu hình cho cả đầu vào và đầu ra (Hình 5.7). Chip sử dụng bus I2C hai dây phổ biến.

Cơm. 5,7. Sơ đồ chân MCP23017

Địa chỉ của chip MCP23017 cho giao thức I2C có thể được đặt bằng sự kết hợp của các tín hiệu tại các đầu vào kỹ thuật số A0 - A2 (Hình 5.8), cho phép bạn kết nối 8 chip MCP23017 với bộ vi điều khiển cùng một lúc, tương ứng 16 * 8 = 128 chân.

Cơm. 5,8. Đặt địa chỉ của chip MCP23017

Chip có 2 ngân hàng cổng A (GPA0-GPA7) và B (GPB0-GPAB), mỗi cổng có thể được cấu hình cho đầu vào hoặc đầu ra.
Liệt kê 5.3. cho thấy một ví dụ về việc thiết lập các ngân hàng đầu ra A và B.

Liệt kê 5.3

// kết nối thư viện Wire.h #bao gồm đầu vào byte = 0; void setup ()(Serial.begin (9600); Wire.begin (0, 2); // khởi động I2C Wire.beginTransmission (0x20); // i2c - địa chỉ (A0-0, A1-0, A2-0) Wire.write (0x00); // Thanh ghi IODIRA Wire.write (0x00); // đặt PORT A làm đầu ra Wire.endTransmission (); ) void loop (){ // đọc dữ liệu từ PORT B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); đầu vào = Wire.read (); // ghi dữ liệu đã nhận vào PORT A Wire.beginTransmission (0x20); Wire.write (0x12); // địa chỉ PORT A Wire.write (input); // CỔNG A Wire.endTransmission (); chậm trễ (100); // tạm ngừng)

Việc sử dụng chip MCP23017 sẽ mở rộng số lượng tiếp điểm kỹ thuật số của mô-đun Nodemcu lên 16 và sẽ cho phép tổ chức chỉ báo LED và tín hiệu âm thanh của các thông số cảm biến quan trọng.

Mọi người đều yêu thích các bo mạch Arduino rẻ tiền, nhưng thường thì một dự án thiếu một hoặc hai cổng miễn phí theo đúng nghĩa đen! Và đôi khi có đủ cổng, nhưng bạn không muốn kéo một bó dây đến một phần khác của cấu trúc. Giả sử bạn cần đặt một số nút và đèn LED trên bảng điều khiển phía trước của thiết bị. Việc kết nối chúng với bo mạch chính chỉ bằng hai dây bus dữ liệu sẽ đáng tin cậy và dễ dàng hơn, chứ không phải bằng dây cáp hay dây nịt, phải không?

Đối với những tình huống như vậy, nhiều bộ mở rộng (mở rộng) cổng Arduino được thiết kế.

Thông thường, các chân của bộ vi điều khiển thực hiện một số chức năng khác nhau, vì vậy các bộ mở rộng sẽ khác nhau:

  1. Bộ mở rộng cổng GPIO tiêu chuẩn
  2. Bộ mở rộng đầu ra PWM
  3. Bộ mở rộng đầu vào tương tự - bộ ghép kênh và bộ ADC bên ngoài

Riêng biệt, cần đề cập đến bộ chuyển đổi kỹ thuật số sang tương tự (DAC) và bộ mở rộng không gian địa chỉ bus I2C. Các thiết bị này không sao chép trực tiếp chức năng của các cổng, nhưng mở rộng khả năng của vi điều khiển.

Trong bài đầu tiên của loạt bài này, chúng ta sẽ nói về các bộ mở rộng đơn giản và hữu ích nhất hoạt động như các cổng I / O kỹ thuật số. Đây là các vi mạch và. Chúng được sắp xếp và hoạt động hoàn toàn giống nhau, và chỉ khác nhau về số lượng cổng.

Chọn một mô-đun mở rộng cho Arduino

Mô-đun phổ biến và rẻ tiền nhất được làm trên chip PCF8574 (Hình 1)

Cơm. 1. Mô-đun mở rộng cổng PCF8574 phổ biến

Thuận lợi:
  • Giá thấp.
  • Các mô-đun có thể được kết nối trong một chuỗi bằng cách chỉ cần cắm phích cắm của một mô-đun vào ổ cắm của mô-đun trước đó. Đừng quên đặt jumper thành các địa chỉ mô-đun khác nhau!
Flaws:
  • Không thể lắp trực tiếp vào bảng mạch (tôi khuyên bạn nên hàn đầu nối cổng vào mặt sau).
  • Tổng cộng có tám cổng trong một mô-đun.

Nếu bạn đang muốn thực hiện các dự án nghiêm túc hơn, hãy đặt mua mô-đun 16-bit cho PCF8575 trên Aliexpress. Tôi thực sự khuyên bạn nên sử dụng mô-đun được hiển thị trong Hình. 2.

Cơm. 2. Mô-đun mở rộng cổng PCF8575

Thuận lợi:
  • Nhiều gấp đôi số cổng.
  • Nguồn điện 3.3V tích hợp, bạn có thể cấp nguồn cho các mô-đun khác.
  • Phù hợp mức logic tích hợp cho bus I2C ở các điện áp cung cấp khác nhau.
  • Định dạng thuận tiện cho một breadboard.
Flaws:
  • Giá trên.

Cách hoạt động của PCF8574 / PCF8575 GPIO Port Expander

Trao đổi dữ liệu diễn ra thông qua bus I2C. Chỉ cần bốn dây để kết nối với bảng Arduino, bao gồm cả nguồn. Địa chỉ bộ mở rộng được đặt bởi ba jumper trên đầu vào A0… A2, do đó, tám chip giống hệt nhau có thể được kết nối với bus cùng lúc và có được tối đa 8 * 8 = 64 cổng bổ sung với PCF8574 hoặc 8 * 16 = 128 với PCF8575 Chip.

Để xuất dữ liệu ra cổng, hãy ghi một byte dữ liệu vào địa chỉ của mô-đun trên bus I2C. Để đọc dữ liệu từ một cổng, hãy đọc một byte tại cùng một địa chỉ. Một byte luôn được viết và đọc toàn bộ, công việc với các chữ số riêng lẻ được thực hiện theo chương trình.

Các đầu ra của vi mạch là đầu vào đồng thời và không có thanh ghi dịch vụ nào xác định mục đích của đầu ra. Chỉ có một chốt mà byte đầu ra được ghi. Sao có thể như thế được?

Các cổng hoạt động theo cách thu mở và có điện trở kéo lên bên trong. Nếu một số 0 logic được ghi vào đầu ra, thì bóng bán dẫn đầu ra sẽ mở ra, bắt buộc phải kéo đầu ra "xuống đất". Việc đọc từ một cổng như vậy sẽ luôn trả về số không.

Hãy cẩn thận khi đặt điện áp cung cấp trực tiếp vào chân cắm có mức thấp hoặc nếu dòng điện bị vượt quá 50 mA bạn sẽ làm hỏng con chip!

Để sử dụng một cổng làm đầu vào, hãy ghi một cổng vào đó. Trong trường hợp này, bóng bán dẫn bên trong sẽ được đóng lại và kết quả đọc được sẽ được xác định bởi mức logic bên ngoài được áp dụng cho chân. Đầu ra miễn phí được kéo lên thành nguồn bằng một điện trở tích hợp.

Để sử dụng đồng thời một số cổng làm đầu vào và một số cổng làm đầu ra, trước khi mỗi byte dữ liệu được ghi vào bộ mở rộng, cần phải áp dụng mặt nạ các đơn vị cho những bit tương ứng với đầu vào bằng cách sử dụng phép toán “logic OR” . Đó là tất cả)))

Gián đoạn tạo ra

PCF857 * Bộ mở rộng cổng tạo xung ngắt cấp thấpở đầu ra INT với bất kỳ thay đổi nào trong tín hiệu đầu vào ở bất kỳ đầu vào nào của vi mạch. Điều này rất tiện lợi nếu bộ mở rộng phục vụ bàn phím. Nhưng bạn phải xác định trong trình xử lý ngắt nút nào đã được nhấn hoặc nhả. Bộ tạo ngắt được trang bị bộ lọc triệt tiêu tiếng ồn.

Ví dụ 1: Sử dụng mô-đun PCF8574

Hãy lắp ráp một mạch đơn giản gồm bốn đèn LED, một mô-đun PCF8574 và một bảng Arduino (Hình 3 và 4). Với sơ đồ chuyển đổi này, chúng tôi thậm chí không cần điện trở dập tắt cho đèn LED. Dòng điện chạy qua đèn LED và điện trở tích hợp được kết nối với ray điện.

Cơm. 3. Sơ đồ đấu dây của mô-đun PCF8574

Cơm. 4. Bố trí mạch với mô-đun PCF8574

Sao chép và dán bản phác thảo 1 vào bảng Arduino:

// Địa chỉ mô-đun trên bus (A0, A1, A2 = 0) int address = 0x38; // Dữ liệu đọc từ module uint8_t dataReceive; // Dữ liệu được ghi vào module uint8_t dataSend; void setup () (Wire.begin (); Serial.begin (9600); // Cao đến tất cả các cổng PCF8574 dataSend = B11111111; pcf8574_write (dataSend);) void loop () (// Đọc một byte từ dữ liệu mô-đunReceive = pcf8574_read (); // Xuất ra màn hình ở định dạng nhị phân Serial.println (dataReceive, BIN); // Dịch chuyển các bit còn lại bởi một nibble dataSend = dataReceive<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

Mức cao ban đầu được ghi vào tất cả các cổng của vi mạch, vì vậy các cổng P0 ... P3 có thể hoạt động như các đầu vào.

Các mức trên chân cổng được đọc sau mỗi 500 ms và kết quả đọc được hiển thị trên màn hình. Nếu bạn kết nối một trong các đầu vào P0… P3 với một dây chung, số 0 xuất hiện trong bit của nó. Sau đó, giá trị đọc được chuyển sang trái bốn bit, kết quả là xuất ra cổng và một trong các đèn LED tắt. Ví dụ, nếu số 0 được đọc ở chân P0, thì đèn LED được kết nối với chân P4 sẽ tắt.

Lưu ý rằng trước mỗi lần ghi vào bộ mở rộng, chúng ta phải áp dụng một mặt nạ bit cho tất cả các bit sẽ là đầu vào: dataSend | = B00001111;

Các chương trình con để làm việc với bus I2C cực kỳ đơn giản, không có lỗi nào được xử lý.

Khuyên bảo:để tìm và kiểm tra địa chỉ mô-đun trên bus I2C, bạn có thể sử dụng. Nó xuất cho thiết bị đầu cuối địa chỉ của tất cả các thiết bị đáp ứng yêu cầu bus.

Ví dụ 2: Sử dụng mô-đun PCF8575

Điểm đặc biệt của mô-đun PCF8575 là nó có 16 cổng, vì vậy nó luôn viết hai byte và đọc hai byte. Quy tắc này phải được tuân thủ ngay cả khi byte thứ hai không cần thiết.

Hãy thay đổi lược đồ một chút. Chúng tôi sẽ kết nối các đèn LED với các cổng P10 ... P13, và chúng tôi sẽ kết nối các cổng P00 ... P03 bằng một jumper với dây chung (Hình 5 và 6).

Cơm. 5. Sơ đồ đấu dây của mô-đun PCF8575

Cơm. 6. Bố trí mạch với mô-đun PCF8575

Sketch 2 trước tiên ghi các cổng vào tất cả các cổng, sau đó đọc trạng thái của chúng sau mỗi 500 mili giây. Thủ tục đọc trả về một từ 16 bit được chia thành các byte. Nội dung của byte thấp (chân P00… P07) được sao chép sang byte cao và tải trở lại mô-đun. Nếu một trong các đầu ra P00… P03 được kết nối với dây chung, thì một trong các đèn LED được kết nối với P10… P13 sẽ tắt.

// Thư viện làm việc với I2C #include // Địa chỉ mô-đun trên bus mặc định int address = 0x20; // Dữ liệu đọc từ module uint8_t hi, lo; uint16_t dataReceive; uint8_tdataHighByte; // Byte cao (P10 ... P17) uint8_t dataLowByte; // Byte thấp (P00 ... P07) void setup () (Wire.begin (); Serial.begin (9600); // Mức cao cho tất cả các cổng PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; pcf8575_write (dataLowByte, dataHighByte );) void loop () (// Đọc một byte từ dữ liệu mô-đunReceive = pcf8575_read (); // In ra màn hình ở định dạng nhị phân Serial.println (dataReceive, BIN); // Trích xuất byte thấp từ từ dài dataLowByte = lowByte (dataReceive); // Sao chép byte thấp vào dữ liệu byte caoHighByte = dataLowByte; // Che dấu byte thấp dataLowByte | = B11111111; // Ghi dữ liệu mới vào mô-đun, hai byte pcf8575_write (dataLowByte, dataHighByte); delay (500);) / / Thủ tục ghi một byte vào mô-đun void pcf8575_write (uint8_t dtl, int8_t dth) (Wire.beginTransmission (address); Wire.write (dtl); // Ghi byte thấp (P00 ... P07) Wire.write (dth); / / Ghi byte cao (P10 ... P17) Wire.endTransmission ();) // Thủ tục đọc một byte từ mô-đun int16_t pcf8575_read ( ) (Wire.beginTransmission (địa chỉ); Wire.endTransmission (); Wire.requestFrom (địa chỉ, 2); lo = Wire.read (); // Đọc byte thấp (P00 ... P07) hi = Wire.read (); // Đọc byte cao (P10 ... P17) return (word (hi, lo)); // Trả về từ dài)

Thư viện Arduino cho PCF8574 / PCF8575

Thư viện có thể được tải xuống từ GitHub. Tuy nhiên, như bạn có thể thấy, làm việc với bộ mở rộng cổng rất đơn giản và bạn có thể dễ dàng thực hiện mà không cần thư viện đặc biệt.

Một trong những lợi thế chính của nền tảng Arduino là tính phổ biến của nó. Nền tảng phổ biến được hỗ trợ tích cực bởi các nhà sản xuất thiết bị điện tử, phát hành các phiên bản đặc biệt của nhiều bo mạch khác nhau giúp mở rộng chức năng cơ bản của bộ điều khiển. Những bảng như vậy, được gọi một cách hợp lý là bảng mở rộng (tên khác: lá chắn, lá chắn arduino), phục vụ để thực hiện nhiều nhiệm vụ khác nhau và có thể đơn giản hóa đáng kể cuộc sống của một người mê cuồng nhiệt. Trong bài viết này, chúng ta sẽ tìm hiểu bảng mở rộng Arduino là gì và nó có thể được sử dụng như thế nào để hoạt động với nhiều loại thiết bị Arduino: động cơ (tấm chắn trình điều khiển động cơ), màn hình LCD (tấm chắn LCD), thẻ SD (bộ ghi dữ liệu), cảm biến (tấm chắn cảm biến) và nhiều loại khác.

Đầu tiên chúng ta hãy hiểu các điều khoản. Bảng mở rộng Arduino là một thiết bị hoàn chỉnh được thiết kế để thực hiện một số chức năng nhất định và được kết nối với bộ điều khiển chính bằng các đầu nối tiêu chuẩn. Một tên phổ biến khác của bảng mở rộng là lá chắn Arduino trong tiếng Anh hoặc đơn giản là lá chắn. Tất cả các thành phần điện tử cần thiết được cài đặt trên bảng mở rộng và tương tác với bộ vi điều khiển và các phần tử khác của bảng mạch chính xảy ra thông qua các chân arduino tiêu chuẩn. Thông thường, tấm chắn cũng được cấp nguồn từ bo mạch arduino chính, mặc dù trong nhiều trường hợp có thể cấp nguồn từ các nguồn khác. Trong bất kỳ tấm chắn nào, có một vài chân cắm miễn phí mà bạn có thể tùy ý sử dụng bằng cách kết nối bất kỳ thành phần nào khác với chúng.

Từ tiếng Anh Shield được dịch là cái khiên, cái bình phong, cái bình phong. Theo ngữ cảnh của chúng ta, nó phải được hiểu là thứ bao phủ bảng điều khiển, lớp này tạo ra một lớp bổ sung của thiết bị, một màn hình phía sau ẩn các phần tử khác nhau.

Tại sao cần có khiên arduino?

Mọi thứ đều rất đơn giản: 1) để chúng tôi tiết kiệm thời gian và 2) ai đó có thể kiếm tiền từ nó. Tại sao lại lãng phí thời gian thiết kế, đặt, hàn và gỡ lỗi thứ gì đó mà bạn có thể lấy đã lắp ráp và bắt đầu sử dụng ngay lập tức? Được thiết kế và lắp ráp tốt trên phần cứng chất lượng cao, bo mạch mở rộng thường đáng tin cậy hơn và chiếm ít không gian hơn trong thiết bị cuối cùng. Điều này không có nghĩa là bạn cần bỏ hẳn việc tự lắp ráp và không cần hiểu rõ nguyên lý hoạt động của một số phần tử nhất định. Rốt cuộc, một kỹ sư thực sự luôn cố gắng hiểu cách thức hoạt động của những gì anh ta sử dụng. Nhưng chúng ta sẽ có thể tạo ra nhiều thiết bị phức tạp hơn nếu chúng ta không phát minh lại bánh xe mỗi lần mà tập trung sự chú ý vào những gì mà ít người đã giải quyết được trước chúng ta.

Đương nhiên, bạn phải trả giá cho các cơ hội. Hầu như luôn luôn, chi phí của tấm chắn cuối cùng sẽ cao hơn giá của các thành phần riêng lẻ, bạn luôn có thể thực hiện một lựa chọn tương tự rẻ hơn. Nhưng ở đây, tùy thuộc vào bạn để quyết định mức độ quan trọng của thời gian hoặc tiền bạc dành cho bạn. Tính đến tất cả sự hỗ trợ có thể có từ ngành công nghiệp Trung Quốc, giá thành của bo mạch đang liên tục giảm, vì vậy hầu hết các lựa chọn thường được đưa ra là sử dụng các thiết bị làm sẵn.

Các ví dụ phổ biến nhất của tấm chắn là bảng mở rộng để làm việc với cảm biến, động cơ, màn hình LCD, thẻ SD, tấm chắn mạng và GPS, tấm chắn có rơ le tích hợp để kết nối với tải.

Kết nối lá chắn Arduino

Để kết nối tấm chắn, bạn chỉ cần cẩn thận "đặt" nó lên bo mạch chính. Thông thường, các chân của tấm chắn dạng lược (nam) dễ dàng được lắp vào các đầu nối của bảng Arduino. Trong một số trường hợp, cần phải điều chỉnh cẩn thận các chốt nếu bản thân bo mạch không được hàn ngay ngắn. Điều chính ở đây là hành động cẩn thận và không áp dụng vũ lực quá mức.

Theo quy định, lá chắn được thiết kế cho một phiên bản rất cụ thể của bộ điều khiển, mặc dù, ví dụ, nhiều lá chắn Arduino Uno hoạt động khá tốt với bảng Arduino Mega. Sơ đồ chân trên mega được làm theo cách sao cho 14 tiếp điểm kỹ thuật số đầu tiên và các tiếp điểm ở phía đối diện của bảng trùng với vị trí của các tiếp điểm trên UNO, vì vậy lá chắn từ arduino dễ dàng trở thành nó.

Lập trình Arduino Shield

Lập trình mạch với bảng mạch mở rộng không khác gì lập trình thông thường của arduino, bởi vì từ quan điểm của bộ điều khiển, chúng ta chỉ cần kết nối thiết bị của mình với các chân thông thường của nó. Trong bản phác thảo, bạn cần chỉ định các chân được kết nối trong tấm chắn với các chân tương ứng trên bảng. Theo quy định, nhà sản xuất chỉ ra sự tương ứng của các chân trên tấm chắn hoặc trong sách hướng dẫn kết nối riêng. Nếu bạn tải xuống các bản phác thảo được đề xuất bởi nhà sản xuất bảng, bạn thậm chí sẽ không cần phải làm điều đó.

Việc đọc hoặc ghi các tín hiệu lá chắn cũng được thực hiện theo cách thông thường: sử dụng các hàm và các lệnh khác quen thuộc với bất kỳ người dùng cuồng nhiệt nào. Trong một số trường hợp, có thể xảy ra va chạm khi bạn đã quen với sơ đồ kết nối này và nhà sản xuất đã chọn sơ đồ kết nối khác (ví dụ: bạn kéo nút xuống đất và trên tấm chắn - để cấp nguồn). Ở đây bạn chỉ cần cẩn thận.

Theo quy luật, bảng mở rộng này có trong bộ dụng cụ arduino và do đó, nó là thứ mà người dùng arduino gặp thường xuyên nhất. Lá chắn khá đơn giản - nhiệm vụ chính của nó là cung cấp các tùy chọn thuận tiện hơn để kết nối với bảng Arduino. Điều này được thực hiện thông qua các đầu nối đất và nguồn bổ sung, được đưa đến bo mạch tới từng chân analog và kỹ thuật số. Ngoài ra, trên bảng, bạn có thể tìm thấy các đầu nối để kết nối nguồn điện bên ngoài (bạn cần cài đặt jumper để chuyển đổi), đèn LED và nút khởi động lại. Các tùy chọn tấm chắn và các ví dụ sử dụng có thể được tìm thấy trong các hình minh họa.




Có một số phiên bản của bảng mở rộng cảm biến. Tất cả chúng khác nhau về số lượng và loại đầu nối. Các phiên bản phổ biến nhất hiện nay là Sensor Shield v4 và v5.

Lá chắn arduino này rất quan trọng trong các dự án chế tạo người máy. Cho phép bạn kết nối động cơ thông thường và động cơ servo với bảng Arduino cùng một lúc. Nhiệm vụ chính của lá chắn là cung cấp khả năng kiểm soát các thiết bị tiêu thụ dòng điện đủ cao cho một bo mạch arduino thông thường. Các tính năng bổ sung của bo mạch là chức năng điều khiển công suất động cơ (sử dụng PWM) và thay đổi chiều quay. Có nhiều loại bảng điều khiển động cơ. Điểm chung cho tất cả chúng là sự hiện diện trong mạch của một bóng bán dẫn mạnh mà qua đó tải bên ngoài được kết nối, các phần tử tản nhiệt (thường là bộ tản nhiệt), mạch để kết nối nguồn bên ngoài, đầu nối để kết nối động cơ và chân để kết nối với arduino.



Tổ chức công việc với mạng là một trong những nhiệm vụ quan trọng nhất trong các dự án hiện đại. Để kết nối với mạng cục bộ qua Ethernet, có một bảng mở rộng tương ứng.




Bảng mở rộng tạo mẫu

Các bảng này khá đơn giản - chúng có các miếng đệm tiếp xúc để gắn các phần tử, một nút đặt lại được hiển thị và có thể kết nối nguồn điện bên ngoài. Mục đích của những tấm chắn này là tăng tính nhỏ gọn cho thiết bị, khi tất cả các linh kiện cần thiết đều nằm ngay phía trên bo mạch chính.





Tấm chắn LCD Arduino và tấm chắn tft

Loại tấm chắn này được sử dụng để làm việc với màn hình LCD trong arduino. Như bạn đã biết, việc kết nối ngay cả màn hình văn bản 2 dòng đơn giản nhất cũng không phải là một nhiệm vụ tầm thường: bạn cần kết nối chính xác 6 địa chỉ liên hệ trên màn hình cùng một lúc, không tính nguồn điện. Việc chèn một mô-đun làm sẵn vào bảng arduino và chỉ cần tải lên bản phác thảo tương ứng sẽ dễ dàng hơn nhiều. Trong LCD Keypad Shield phổ biến, từ 4 đến 8 nút được kết nối ngay lập tức với bảng, cho phép bạn tổ chức ngay giao diện bên ngoài cho người dùng thiết bị. TFT Shield cũng giúp



Lá chắn ghi dữ liệu Arduino

Một nhiệm vụ khác khá khó khăn để tự thực hiện trong các sản phẩm của bạn là lưu trữ dữ liệu nhận được từ các cảm biến với tham chiếu thời gian. Tấm chắn làm sẵn không chỉ cho phép lưu dữ liệu và nhận thời gian từ đồng hồ tích hợp, mà còn kết nối các cảm biến một cách thuận tiện bằng cách hàn hoặc trên bảng mạch.




Bản tóm tắt ngắn gọn

Trong bài viết này, chúng tôi chỉ xem xét một phần nhỏ trong số lượng lớn các thiết bị mở rộng chức năng của arduino. Bảng mở rộng cho phép bạn tập trung vào điều quan trọng nhất - logic của chương trình của bạn. Những người tạo ra các tấm chắn đã cung cấp cho việc lắp đặt chính xác và đáng tin cậy, nguồn điện cần thiết. Tất cả những gì còn lại đối với bạn là tìm bảng bạn cần bằng cách sử dụng lá chắn từ tiếng Anh ấp ủ, kết nối nó với arduino và tải lên bản phác thảo. Thông thường, bất kỳ lập trình nào của khiên bao gồm thực hiện các hành động đơn giản để đổi tên các biến bên trong của một chương trình đã hoàn thành. Kết quả là, chúng tôi có được sự dễ dàng sử dụng và kết nối, cũng như tốc độ lắp ráp các thiết bị hoặc nguyên mẫu đã hoàn thiện.

Nhược điểm của việc sử dụng bảng mở rộng là chi phí của chúng và có thể mất hiệu quả do tính linh hoạt của các tấm chắn nằm trong bản chất của chúng. Đối với ứng dụng cụ thể hoặc thiết bị cuối của bạn, tất cả các tính năng của tấm chắn có thể không cần thiết. Trong trường hợp này, bạn chỉ nên sử dụng lá chắn ở giai đoạn tạo mẫu và thử nghiệm, và khi tạo phiên bản cuối cùng của thiết bị, hãy nghĩ đến việc thay thế nó bằng một thiết kế có sơ đồ và kiểu bố trí của riêng bạn. Đó là vào bạn, bạn có tất cả các khả năng cho sự lựa chọn phù hợp.

→ Làm thế nào để mở rộng số lượng đầu vào và đầu ra tương tự trên Arduino của bạn?

Làm cách nào để mở rộng số lượng đầu vào và đầu ra tương tự trên Arduino của bạn?

Bộ ghép kênh hoặc bộ phân kênh sẽ cho phép bạn mở rộng số lượng đầu vào và đầu ra trên Arduino của bạn.
4051 là bộ ghép kênh / phân kênh tương tự 8 kênh, do đó:
* Nếu bạn đang sử dụng 4051 làm bộ ghép kênh: Bạn có thể chọn bất kỳ đầu vào nào trong số 8 đầu vào khác nhau và đọc trạng thái của nó cho bộ điều khiển.
* Nếu bạn đang sử dụng 4051 làm bộ phân kênh, bạn có thể chọn bất kỳ đầu ra nào trong số 8 đầu ra khác nhau và ghi giá trị bạn muốn vào đó.

Ngoài ra, 4051 có thể xử lý các giá trị tương tự, trong Arduino của bạn, bạn có thể sử dụng tín hiệu tương tự 0-5V và kết nối IC với các đầu vào tương tự trên Arduino.

Để chọn đầu vào vi mạch mong muốn cũng như các chế độ hoạt động đọc hoặc ghi, chúng ta phải sử dụng ba tín hiệu điều khiển (S0, S1 và S2). Mỗi chân này phải được kết nối với một trong các đầu ra kỹ thuật số của Arduino. Mỗi đầu ra có một số (S0 = 1; S1 = 2; S2 = 4) và nếu một trong các đầu ra này được đặt ở mức logic cao thì số chân được biểu diễn sẽ là 4051.

Ví dụ:
* Nếu bạn đặt log “1” ở đầu vào của vi mạch S0 và S1 và log “0” ở S2, thì đầu vào y3 của vi mạch được chọn, nó trông giống như sau (1 +2 +0 = 3).
* Nếu bạn đặt log “1” tại đầu vào của vi mạch S0 và S2 và log “0” tại S1, thì đầu vào y5 của vi mạch được chọn, nó trông giống như sau (1 +0 +4 = 5).

Không thể đọc hoặc ghi trạng thái vào nhiều hơn một chân 4051 cùng một lúc. Nhưng bạn có thể đọc và ghi trạng thái từ đầu ra của chip khá nhanh chóng. Không cần có độ trễ giữa việc chọn, đọc hoặc ghi trạng thái của các chân 4051.

* Z ----- tín hiệu đầu vào hoặc đầu ra chung (kết nối với I / O Arduino)
* E ----- kích hoạt đầu vào (nhật ký hoạt động "0") (kết nối với mặt đất (GND))
* Vee --- điện áp cung cấp âm (kết nối với đất (GND))
* GND --- âm đất (0 V)
* S0-S2 - chọn đầu vào (kết nối với ba chân kỹ thuật số Arduino)
* y0-Y7 - đầu vào / đầu ra độc lập
* Vcc --- điện áp cung cấp dương (5V)



Hình ảnh bên trái ở trên là một ví dụ về cách sử dụng bộ ghép kênh 9 để đọc 64 đầu vào tương tự chỉ với một đầu vào tương tự Arduino.
Hình ảnh bên phải ở trên là ví dụ về cách sử dụng hai 4051 (một được định cấu hình làm bộ phân kênh và một làm bộ ghép kênh) trong ma trận 8x8 để kiểm tra 64 nút hoặc các đầu vào kỹ thuật số khác chỉ từ một đầu vào kỹ thuật số trên Arduino (từ thiết lập thứ hai bạn chỉ có thể có hai nút cùng một lúc). cùng một lúc, nếu không, bạn nên sử dụng cài đặt đầu tiên (bên trái)).

Ví dụ về mã:

// Ví dụ về việc sử dụng bộ ghép kênh / phân kênh tương tự 4051
// bởi david c.

int led = 13; // Thiết lập đèn LED ở chân thứ 13
int r0 = 0; // giá trị chọn đầu ra thành 4051 (S0)
int r1 = 0; // giá trị chọn đầu ra thành 4051 (S1)
int r2 = 0; // giá trị chọn đầu ra thành 4051 (S2)
int hàng = 0; // lưu trữ mã bin
int count = 0; // chải
int bin = (000, 1, 10, 11, 100, 101, 110, 111); // Một mảng số nhị phân xác định số lượng đầu vào / đầu ra được chọn của chip 4051, từ 1 đến 8.
void setup () (// BAN ĐẦU
pinMode (2, OUTPUT); // s0 thoát
pinMode (3, OUTPUT); // lối ra s1
pinMode (4, OUTPUT); // lối ra s2
digitalWrite (dẫn đầu, CAO); // thắp sáng đèn LED
beginSerial (9600); // Tỷ giá hối đoái UART
}

void loop () (
for (count = 0; count ≤ 7; count ++) (// xoay vòng qua các phần tử mảng từ 1 đến 8
row = bin [count];
r0 = hàng & 0x01;
r1 = (hàng >> 1) & 0x01; //
r2 = (hàng >> 2) & 0x01; //
digitalWrite (2, r0);
digitalWrite (3, r1);
digitalWrite (4, r2);
Serial.println (bin);
chậm trễ (1000);

Các chip SPI hoặc I2C ADC luôn sẵn có với nhiều độ phân giải, tốc độ lấy mẫu và số lượng kênh. Chúng khá dễ dàng để thêm vào bất kỳ Arduino nào.

Ví dụ, MCP3208 sẽ cung cấp 8 kênh độ phân giải 12 bit trên mỗi SPI, có nghĩa là 3 chân (MOSI / MISO / SCK) + 1 trên mỗi chip (SS). Vì vậy, 1 chip sẽ là 4 chân, 2 chip 5 chân, 3 chip 6 chân, v.v.

Mặc dù vậy, việc thêm nhiều IC vào bus SPI có thể gây phiền toái với việc tăng điện dung của tất cả các đầu vào đó có nghĩa là bạn cần làm chậm tốc độ nhắn tin một chút hoặc thêm một số bộ đệm để điều khiển bus nặng hơn.

Các chip I2C có thể phức tạp hơn vì chỉ có một số địa chỉ giới hạn trên bus I2C - ngoài ra trên nhiều Arduinos I2C cũng có hai chân analog mà bạn có thể không muốn hy sinh.

Tùy chọn thứ hai liên quan đến việc sử dụng bộ ghép kênh tương tự (ví dụ: 4051) để chuyển các nguồn khác nhau sang các đầu vào tương tự hiện có.

Tùy chọn thứ ba, mà bạn có thể chưa xem xét, là có nhiều arduinos (hoặc các bộ vi điều khiển rẻ tiền khác), mỗi bộ thực hiện một số tìm nạp và sau đó thực hiện một số phương thức giao tiếp giữa chúng (hoặc với một chủ duy nhất). Điều này có thêm lợi ích là có thể lấy mẫu nhiều kênh cùng một lúc (một kênh trên mỗi vi điều khiển), giúp tăng tốc phần nào công việc của bạn.

Mở rộng câu trả lời của Mazhenko, bạn có thể sử dụng bộ ghép kênh tương tự như 74HC4051 để biến một cổng tương tự thành 8.

Người anh em họ của nó, 74HC4067, sẽ kết hợp 16 cổng. Bây giờ với 6 đầu vào tương tự trên Arduino Uno, bạn có thể có 6 x 16 đầu vào = 96. Các tín hiệu điều khiển A / B / C có thể song song.

Điều này sẽ cho phép bạn xử lý 96 đầu vào với 6 chip bổ sung và mã khá đơn giản. Tôi có các ví dụ mã trên trang 74HC4051 mux / demux của mình.

Đối với mã 8 đầu vào:

// Ví dụ sử dụng bộ ghép kênh / phân kênh 74HC4051 // Tác giả: Nick Gammon // Ngày: 14 tháng 3 năm 2013 const byte sensor = A0; // nơi kết nối cổng vào / ra của bộ ghép kênh // địa chỉ bộ ghép kênh chọn các dòng (A / B / C) const byte addressA = 6; // bit bậc thấp const byte addressB = 5; const byte addressC = 4; // bit bậc cao void setup () (Serial.begin (115200); Serial.println ("Bắt đầu kiểm tra bộ ghép kênh ..."); pinMode (addressA, OUTPUT); pinMode (addressB, OUTPUT ); pinMode (addressC, OUTPUT);) // kết thúc thiết lập int readSensor (const byte which) (// chọn đúng kênh MUX digitalWrite (addressA, (which & 1)? HIGH: LOW); // bit bậc thấp digitalWrite (addressB, (which & 2)? HIGH: LOW); digitalWrite (addressC, (which & 4)? HIGH: LOW); // bit bậc cao // bây giờ đọc cảm biến trả về analogRead (sensor);) / / end of readSensor void loop () (// hiển thị tất cả 8 lần đọc cảm biến cho (byte i = 0; i< 7; i++) { Serial.print ("Sensor "); Serial.print (i); Serial.print (" reads: "); Serial.println (readSensor (i)); } delay (1000); } //end of loop

Tôi đã làm việc chính xác với cùng một vấn đề. Tôi cần một chương trình đọc 100 nhiệt điện trở ... Tại sao? tốt, nếu bạn cần nó.

Tôi đã hoàn thành nó.

Tôi đã thử bộ ghép kênh / phân kênh 74HC4051. Nhưng vì một số lý do mà tôi không nhận được kết quả như mong muốn.

Điều đầu tiên bạn sẽ tìm thấy ... POWER, bạn sẽ cần một nguồn điện bên ngoài, trong trường hợp của tôi, tôi chỉ tạo một bộ chia điện áp và kết nối nhiệt điện trở với nguồn điện đó và sau đó chỉ cần sử dụng cổng analog để đọc ...

Tôi đang sử dụng giao thức I2C, 8 nô lệ arduino Mega 7 và một chủ. và sau khi gửi send Integer, float và blah blah không hoạt động để tôi chỉ làm điều đó. Nó có thể gửi một tín hiệu tương tự đọc qua I2C và chủ thực hiện tất cả các chuyển đổi cần thiết.

Nếu bạn vẫn quan tâm, tôi có thể gửi cho bạn mã nguồn cho chủ và nô lệ. Với mẫu này, bạn có thể kết nối tối đa 50 arduino và bậc thầy sẽ tìm kiếm từng arduino được kết nối trên mạng và yêu cầu dữ liệu.