Arduino. Chúng tôi kết nối màn hình LCD. LCD ký tự và Arduino

Mỗi đài phát thanh nghiệp dư, sau một số dự án tự chế đơn giản nhất định, đều đạt đến mục tiêu tạo ra một thứ gì đó hoành tráng bằng cách sử dụng các cảm biến và nút bấm. Rốt cuộc, việc hiển thị dữ liệu trên màn hình sẽ thú vị hơn nhiều so với trên màn hình cổng. Nhưng sau đó câu hỏi được đặt ra: nên chọn màn hình nào? Và nói chung là kết nối như thế nào, kết nối cần những gì? Câu trả lời cho những câu hỏi này sẽ được thảo luận trong bài viết này.

LCD 1602

Trong số rất nhiều tùy chọn hiển thị, tôi muốn đề cập cụ thể đến màn hình LCD1602 dựa trên bộ điều khiển HD4478. Màn hình này có hai màu: chữ trắng trên nền xanh, chữ đen trên nền vàng. Việc kết nối LCD 1602 với Arduino cũng sẽ không gây ra vấn đề gì vì đã có thư viện tích hợp sẵn và không cần phải tải thêm bất cứ thứ gì. Màn hình khác nhau không chỉ về giá cả mà còn về kích thước. Thông thường, những người nghiệp dư trên đài sử dụng 16 x 2, tức là 2 dòng 16 ký tự. Nhưng cũng có 20 x 4, trong đó có 4 dòng 20 ký tự. Kích thước và màu sắc không đóng vai trò gì trong việc kết nối màn hình LCD 1602 với Arduno; chúng được kết nối theo cùng một cách. Góc nhìn là 35 độ, thời gian phản hồi hiển thị là 250 ms. Nó có thể hoạt động ở nhiệt độ từ -20 đến 70 độ C. Trong quá trình hoạt động, nó sử dụng 4 mA cho màn hình và 120 mA cho đèn nền.

Nó được sử dụng ở đâu?

Màn hình này không chỉ phổ biến đối với những người nghiệp dư về đài mà còn cả các nhà sản xuất lớn. Ví dụ, máy in và máy pha cà phê cũng sử dụng LCD1602. Điều này là do giá thấp, màn hình này có giá 200-300 rúp trên các trang web của Trung Quốc. Rất đáng để mua ở đó vì tại các cửa hàng của chúng tôi, mức chiết khấu cho màn hình này rất cao.

Kết nối với Arduino

Việc kết nối LCD 1602 với Arduino Nano và Uno cũng không khác. Bạn có thể làm việc với màn hình ở hai chế độ: 4 bit và 8. Khi làm việc với 8 bit, cả bit cấp thấp và cấp cao đều được sử dụng và với 4 bit, chỉ các bit cấp thấp. Không có điểm đặc biệt nào khi làm việc với 8-bit, vì nó sẽ thêm 4 liên hệ nữa để kết nối, điều này là không nên vì tốc độ sẽ không cao hơn, giới hạn cập nhật màn hình là 10 lần mỗi giây. Nhìn chung, để kết nối màn hình LCD 1602 với Arduino, người ta sử dụng rất nhiều dây dẫn, điều này gây ra một số bất tiện, nhưng cũng có những tấm chắn đặc biệt, nhưng sau này sẽ nói nhiều hơn về điều đó. Bức ảnh cho thấy kết nối của màn hình với Arduino Uno:

Mã mẫu:

#bao gồm // Thêm thư viện LiquidCrystal cần thiết lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Đặt kích thước màn hình lcd.setCursor(0, 0); // Đặt con trỏ về đầu 1 dòng lcd.print("Xin chào thế giới!"); // In văn bản lcd.setCursor(0, 1); // Đặt con trỏ về đầu dòng 2 lcd.print("site") ; // In văn bản ) void loop ()( )

Mã này làm gì? Bước đầu tiên là kết nối thư viện để làm việc với màn hình. Như đã đề cập ở trên, thư viện này đã được tích hợp sẵn trong Arduino IDE và không cần phải tải xuống và cài đặt thêm. Tiếp theo, các tiếp điểm được kết nối với các chân được xác định lần lượt là: RS, E, DB4, DB5, DB6, DB7. Sau đó kích thước màn hình được thiết lập. Vì chúng tôi đang làm việc với một phiên bản có 16 ký tự và 2 dòng nên chúng tôi viết các giá trị sau. Chúng tôi đặt con trỏ ở đầu dòng đầu tiên và hiển thị văn bản đầu tiên Hello World. Tiếp theo, đặt con trỏ trên dòng thứ hai và hiển thị tên của trang web. Đó là tất cả! Việc kết nối LCD 1602 với Arduino Uno đã được xem xét.

I2C là gì và tại sao cần thiết?

Như đã nói ở trên, việc kết nối màn hình chiếm rất nhiều liên lạc. Ví dụ: khi làm việc với nhiều cảm biến và màn hình LCD, 1602 chân có thể không đủ. Thông thường, những người phát thanh nghiệp dư sử dụng phiên bản Uno hoặc Nano, không có nhiều liên hệ. Sau đó người ta nghĩ ra những tấm khiên đặc biệt. Ví dụ: I2C. Nó cho phép bạn kết nối một màn hình chỉ với 4 chân. Số tiền này gấp đôi. Mô-đun I2C được bán riêng, trong đó bạn cần tự hàn nó và đã được hàn vào màn hình LCD 1602.

Kết nối bằng mô-đun I2C

Kết nối LCD 1602 với Arduino Nano bằng I2C chiếm ít không gian, chỉ có 4 chân: nối đất, nguồn và 2 đầu ra dữ liệu. Chúng tôi kết nối nguồn và nối đất tương ứng với 5V và GND trên Arduino. Chúng tôi kết nối hai tiếp điểm còn lại: SCL và SDA với bất kỳ chân analog nào. Trong ảnh, bạn có thể thấy ví dụ về cách kết nối màn hình LCD 1602 với arduino bằng mô-đun I2C:

Mã chương trình

Nếu để làm việc với màn hình không có mô-đun thì chỉ cần sử dụng một thư viện, thì để làm việc với mô-đun, bạn cần có hai thư viện. Một trong số chúng đã được đưa vào Arduino IDE - Wire. Một thư viện khác, LiquidCrystal I2C, phải được tải xuống và cài đặt riêng. Để cài đặt thư viện trong Arduino, nội dung của kho lưu trữ đã tải xuống phải được tải vào thư mục Thư viện gốc. Mã chương trình ví dụ sử dụng I2C:

#bao gồm #bao gồm LCD LiquidCrystal_I2C (0x27,16,2); // Thiết lập void setup() ( lcd.init(); lcd.backlight(); // Bật đèn nền màn hình lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Đặt con trỏ ở dòng thứ hai và ký tự 0. lcd.setCursor(0, 1); // Hiển thị số giây kể từ khi Arduino khởi động lcd.print(millis()/1000); )

Như bạn có thể thấy, mã gần như giống nhau.

Làm thế nào để thêm biểu tượng của riêng bạn?

Vấn đề với những màn hình này là không hỗ trợ bảng chữ cái và ký hiệu Cyrillic. Ví dụ: bạn cần tải một số ký hiệu vào màn hình để nó có thể phản ánh nó. Để làm điều này, màn hình cho phép bạn tạo tối đa 7 biểu tượng của riêng mình. Hãy tưởng tượng bảng:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Nếu 0 - không có gì ở đó, nếu 1 - đây là vùng được sơn. Trong ví dụ trên, bạn có thể thấy việc tạo ra biểu tượng "mặt cười". Sử dụng một chương trình ví dụ trong Arduino, nó sẽ trông như thế này:

#bao gồm #bao gồm // Thêm thư viện cần thiết // Mặt nạ bit của biểu tượng nụ cười byte Smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); Màn hình LCD LiquidCrystal(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Đặt kích thước màn hình lcd.createChar(1, Smile); // Tạo số ký tự 1 lcd.setCursor(0, 0); // Đặt con trỏ về đầu dòng 1 lcd.print("\1"); // In một mặt cười (ký tự số 1) - "\1" ) void loop( ) ( )

Như bạn có thể thấy, một bitmask được tạo giống như bảng. Sau khi được tạo, nó có thể được hiển thị dưới dạng một biến trên màn hình. Hãy nhớ rằng bạn chỉ có thể lưu trữ 7 ký tự trong bộ nhớ. Về nguyên tắc, điều này là đủ. Ví dụ: nếu bạn cần hiển thị biểu tượng độ.

Các vấn đề trong đó màn hình có thể không hoạt động

Có những lúc màn hình không hoạt động. Ví dụ: nó bật nhưng không hiển thị ký tự. Hoặc nó không bật chút nào. Đầu tiên, hãy kiểm tra xem bạn đã kết nối các chân đúng chưa. Nếu bạn sử dụng kết nối LCD 1202 với Arduino mà không có I2C thì rất dễ bị vướng dây dẫn đến màn hình không hoạt động chính xác. Bạn cũng nên đảm bảo rằng độ tương phản của màn hình được tăng lên, vì với độ tương phản tối thiểu, bạn thậm chí không thể nhìn thấy LCD 1602 có được bật hay không. Nếu điều này không giúp ích được gì thì có lẽ vấn đề có thể nằm ở việc hàn các điểm tiếp xúc, đây là khi sử dụng mô-đun I2C. Một lý do phổ biến khác khiến màn hình có thể không hoạt động là do cài đặt địa chỉ I2C không chính xác. Thực tế là có nhiều nhà sản xuất và họ có thể đặt địa chỉ khác, bạn cần sửa lại ở đây:

LCD LiquidCrystal_I2C (0x27,16,2);

Trong ngoặc đơn, bạn có thể thấy hai giá trị, 0x27 và 16.2 (16.2 là kích thước hiển thị và 0x27 là địa chỉ I2C). Thay vì những giá trị này, bạn có thể thử đặt 0x37 hoặc 0x3F. Chà, một lý do khác chỉ đơn giản là LCD 1602 bị lỗi. Xét rằng hầu hết mọi thứ dành cho Arduino đều được sản xuất tại Trung Quốc, bạn không thể chắc chắn 100% rằng sản phẩm đã mua không bị lỗi.

Ưu và nhược điểm của LCD 1602

Hãy cùng điểm qua những ưu và nhược điểm của màn hình LCD 1602.

  • Giá. Mô-đun này có thể được mua với giá rất phải chăng ở các cửa hàng Trung Quốc. Giá là 200-300 rúp. Đôi khi nó thậm chí còn được bán cùng với mô-đun I2C.
  • Dễ dàng kết nối. Có lẽ ngày nay không ai kết nối LCD 1602 mà không có I2C. Và với mô-đun này, việc kết nối chỉ cần 4 địa chỉ liên lạc, sẽ không có “mạng” dây nào cả.
  • Lập trình. Nhờ các thư viện được tạo sẵn nên làm việc với mô-đun này thật dễ dàng; tất cả các chức năng đều đã được viết sẵn. Và nếu bạn cần thêm biểu tượng của riêng mình, chỉ mất vài phút.
  • Trong quá trình sử dụng bởi hàng nghìn đài nghiệp dư, không có nhược điểm lớn nào được xác định, chỉ có trường hợp mua hàng bị lỗi vì phiên bản màn hình Trung Quốc chủ yếu được sử dụng.

Bài viết này xem xét việc kết nối 1602 với Arduino và cũng cung cấp các ví dụ về các chương trình để làm việc với màn hình này. Nó thực sự là một trong những sản phẩm hay nhất trong danh mục của nó; không phải vô cớ mà hàng nghìn đài phát thanh nghiệp dư chọn nó cho các dự án của họ!

Trong bài học này, chúng ta sẽ nói về các chỉ báo tinh thể lỏng tổng hợp ký tự, kết nối chúng với bo mạch Arduino và điều khiển các chỉ báo bằng thư viện LiquidCrystal và LiquidCrystalRus.

Mặc dù đèn LED bảy ​​đoạn là lựa chọn chỉ báo rẻ nhất cho các thiết bị điện tử nhưng việc sử dụng chúng bị hạn chế bởi hai nhược điểm đáng kể.

  • Thực tế rất khó để kết nối hơn 8 chữ số của đèn LED với bộ vi điều khiển. Cần có số lượng lớn chân, dòng chỉ báo đáng kể, công tắc phức tạp, tần số tái tạo thấp, v.v.
  • Không thể hiển thị thông tin tượng trưng trên các chỉ báo bảy đoạn.

Để hiển thị thông tin văn bản hoặc số lớn hơn 4 chữ số, việc sử dụng các chỉ báo tổng hợp ký tự tinh thể lỏng (màn hình) sẽ thực tế hơn nhiều. Ưu điểm của họ bao gồm:

  • giao diện thuận tiện để kết nối với vi điều khiển;
  • sự tiêu thụ ít điện năng;
  • điện áp cung cấp thấp;
  • Độ bền.

Có một số lượng lớn các chỉ báo màn hình tinh thể lỏng (LCD) khác nhau từ các nhà sản xuất khác nhau trên thị trường. Hầu như tất cả chúng đều giống nhau về thông số, tín hiệu giao diện và lệnh điều khiển. Hiện nay, màn hình LCD thông dụng nhất trên thị trường Nga là thiết bị do Winstar, Đài Loan sản xuất. Tôi sẽ tham khảo các chỉ số của công ty này. Nhưng thông tin này cũng khá áp dụng cho màn hình LCD ký tự của các nhà sản xuất khác.

Thông tin chung.

Các chỉ báo tổng hợp ký tự hoặc biểu tượng hiển thị thông tin dưới dạng ký tự có dung lượng nhất định. Một sự quen thuộc hiển thị một nhân vật. Số lượng địa điểm quen thuộc quyết định khả năng chữ số của chỉ báo. Thông tin về các chỉ báo có thể được hiển thị trên một số dòng, vì vậy đối với các chỉ báo loại này, số ký tự trên mỗi dòng và số dòng luôn được chỉ định.

Thông tin được hiển thị trên ma trận tinh thể lỏng có đèn nền LED. Đèn nền có nhiều màu sắc khác nhau, giúp thông tin văn bản đơn sắc trở nên sống động hơn rất nhiều.

Để điều khiển ma trận tinh thể lỏng và tổ chức giao diện chỉ báo, bộ điều khiển HD44780 tích hợp hoặc các bộ tương tự đầy đủ của nó được sử dụng. Bộ điều khiển này xác định các tín hiệu giao diện chỉ báo và các lệnh điều khiển.

HD44780 đã trở thành tiêu chuẩn thực tế cho màn hình tinh thể lỏng (LCD). Bạn có thể xem tài liệu kỹ thuật về bộ điều khiển HD44780 ở định dạng PDF tại liên kết này -. Có thể ai đó sẽ thích tài liệu về một trong những sản phẩm tương tự của bộ điều khiển này - SPLC780D. Liên kết ở định dạng PDF - .

Chỉ báo LCD ký tự từ Winstar.

Tôi biết các tùy chọn sau cho chỉ báo LCD của công ty này.

Loại chỉ báo Định dạng hiển thị, ký tự x dòng Kích thước, mm Kích thước của vùng nhìn thấy, mm Liên kết tới tài liệu, định dạng PDF
WH0802A1 8x2 58 x 32 38 x 16
WH1202A 12x2 55,7 x 32 46 x 14,5
WH1601A 16x1 80 x 36 66 x 16
WH1601B 16x1 85 x 28 66 x 16
WH1601L 16x1 122 x 33 99x13
WH1602A 16x2 84 x 44 66 x 16
WH1602B 16x2 80 x 36 66 x 16
WH1602C 16x2 80 x 36 66 x 16
WH1602D 16x2 85 x 30 66 x 16
WH1602J 16x2 80 x 36 66 x 16
WH1602L1 16x2 122 x 44 99 x 24
WH1602M 16x2 85 x 32,6 66 x 16
WH1602O 16x2 85 x 25,2 66 x 16
WH1602P 16x2 85 x 25,2 66 x 16
WH1602S 16x2 59 x 29,3 52 x 15
WH1602T 16x2 65,4 x 28,2 54,8 x 19
WH1602W 16x2 80 x 36 66 x 16
WH1602V2 16x2 66,7 x 23,3 61 x 15,9
WH1604A 16x4 87 x 60 62 x 26
WH1604B 16x4 70,6 x 60 60 x 32,6
WH2002A 20x2 116 x 37 85 x 18,6
WH2002D 20x2 89 x 21,5 75 x 15
WH2002L 20x2 180 x 40 149 x 23
WH2002M 20x2 146 x 43 123 x 23
WH2004A 20x4 98 x 60 77 x 25,2
WH2004B 20x4 98 x 60 77 x 25,2
WH2004D 20x4 77 x 47 60 x 22
WH2004G 20x4 87 x 58 74,4 x 24,8
WH2004H 20x4 87 x 58 74,4 x 24,8
WH2004L 20x4 146 x 62,5 123,5 x 43
WH2402A 24x2 118 x 36 94,5 x 16
WH4002A 40x2 182 x 33,5 154,4 x 16,5
WH4004A 40x4 190 x 54 147 x 29,5

Kết nối chỉ báo LCD với vi điều khiển.

Sơ đồ kết nối, sơ đồ thời gian, thông số tín hiệu, lệnh điều khiển và mã ký hiệu được mô tả chi tiết trong tài liệu dành cho bộ điều khiển HD44780. Tôi sẽ chỉ cung cấp những dữ liệu cần thiết nhất về việc kết nối các chỉ báo với bộ vi điều khiển.

Thông thường, đèn chỉ báo LCD có 16 chân.

Số PIN Tín hiệu I - đầu vào O - đầu ra Mục đích tín hiệu
1 Vss - Mặt đất (phổ biến)
2 Vdd - Nguồn điện +5V
3 - Hiển thị điều khiển độ tương phản. Đầu vào để kết nối đầu ra giữa của bộ chia điện áp + 5 V. Bạn có thể sử dụng điện trở cắt có điện trở 10-20 kOhm.
4 R.S. TÔI Lựa chọn thanh ghi: 0 – thanh ghi lệnh; 1 – thanh ghi dữ liệu Mức tín hiệu thấp có nghĩa là lệnh đã được tạo trên bus dữ liệu, mức tín hiệu cao có nghĩa là lệnh đã được tạo trên bus dữ liệu.
5 R/W TÔI Hướng truyền dữ liệu:

0 – ghi lại;

1 – đọc.

Trong nhiều ứng dụng, chức năng đọc không được sử dụng nên tín hiệu thường được nối đất.

6 E TÔI Nhấp nháy hoạt động của xe buýt (ở cạnh âm).
7 DB0 Vào/ra Các bit thứ tự thấp của chế độ 8 bit. Không được sử dụng với giao diện bốn bit.
8 DB1 Vào/ra
9 DB2 Vào/ra
10 DB3 Vào/ra
11 DB4 Vào/ra Các bit quan trọng nhất của chế độ 8 bit hoặc các bit dữ liệu của giao diện 4 bit.
12 DB5 Vào/ra
13 DB6 Vào/ra
14 DB7 Vào/ra
15 MỘT - Cực dương nguồn đèn nền (+).
16 K - Cực âm nguồn đèn nền (-). Dòng điện phải được giới hạn.

Số pin (cột đầu tiên) là tùy chọn phổ biến nhất. Tốt hơn hết bạn nên kiểm tra bằng cách tải xuống tài liệu về loại chỉ báo của bạn từ bảng ở phần trước.

Màn hình LCD ký tự hỗ trợ hai tùy chọn kết nối với vi điều khiển:

  • Sử dụng bus dữ liệu 8 bit. Tất cả các tín hiệu bus DB0-DB7 đều được kết nối. Trong một chu kỳ trao đổi, một byte thông tin được truyền đi.
  • Sử dụng bus dữ liệu 4 bit. Chỉ có 4 bit quan trọng nhất DB4-DB7 được kết nối. Thông tin được truyền bốn bit trên mỗi chu kỳ đồng hồ bus.

Tùy chọn đầu tiên cung cấp khả năng truyền dữ liệu tới màn hình ở tốc độ cao hơn. Cái thứ hai cần ít hơn 4 chân để kết nối chỉ báo. Không còn nghi ngờ gì nữa, việc giảm số lượng chân kết nối quan trọng hơn là tăng tốc độ trao đổi. Hơn nữa, đèn chỉ báo LCD là thiết bị khá chậm với thời gian chu kỳ tái tạo là 10-20 ms.

Kết nối màn hình LCD ký tự với bảng Arduino.

Tôi sẽ kết nối chỉ báo WH2004A (4 dòng, mỗi dòng 20 ký tự) ở chế độ trao đổi bốn bit với bo mạch Arduino UNO R3. Bạn có thể xem tài liệu về màn hình LCD WH2004 tại liên kết này.

Sơ đồ trông như thế này.

Điện trở R2 và R3 xác định độ tương phản của chỉ báo. Bạn có thể kết nối một điện trở cắt và đặt độ rõ hình ảnh cần thiết. Tôi thường sử dụng các chỉ báo WH2004 và trong mạch của mình, tôi chọn các giá trị điện trở này.

Tôi kết nối đèn LED của đèn nền với nguồn điện 5 V thông qua điện trở R1 (30 Ohm). Với điều này, tôi đặt dòng điện ở mức khoảng 25 mA. Mờ mờ nhưng rực rỡ. Bạn có thể nhìn rõ trong bóng tối. Mặc dù chỉ báo WH2004 cho phép dòng đèn nền lên tới 580 mA.

Thư viện điều khiển các chỉ báo LCD trong hệ thống Arduino LiquidCrystal.

Có một thư viện tiêu chuẩn để điều khiển các chỉ báo LCD dựa trên bộ điều khiển HD44780. Tôi sẽ mô tả chi tiết phương pháp của cô ấy.

Tinh thể lỏng(…)

Trình xây dựng lớp. Có thể có số lượng đối số khác nhau.

  • LiquidCristal(rs, en, d4, d5, d6, d7) – giao diện bốn bit, tín hiệu RW không được sử dụng (kết nối với mặt đất).
  • LiquidCristal(rs,rw, en, d4, d5, d6, d7) – giao diện bốn bit, tín hiệu RW được sử dụng.
  • LiquidCristal(rs, en, d0, d1, d2, d3, d4, d5, d6, d7) – giao diện 8 bit, tín hiệu RW không được sử dụng (kết nối với mặt đất).
  • LiquidCristal(rs, rw, en, d0, d1, d2, d3, d4, d5, d6, d7) – giao diện tám bit, tín hiệu RW được sử dụng.

Tranh luận:

  • rs – số chân tín hiệu RS;
  • rw - số đầu ra tín hiệu RW;
  • en – số đầu ra tín hiệu E;
  • d0, d1, d2, d3, d4, d5, d6, d7 – số chân bus dữ liệu.

Màn hình LiquidCrystal(6, 7, 2, 3, 4, 5);

khoảng trống bắt đầu(cols, hàng)

Khởi tạo giao diện chỉ báo. Đặt kích thước chỉ báo. Phương thức này phải được gọi trước khi sử dụng các hàm lớp khác.

Tranh luận:

  • cols – số ký tự trong dòng;
  • hàng - số lượng hàng.

disp.begin(20, 4); // chúng tôi sử dụng màn hình - 4 dòng 20 ký tự

khoảng trống rõ ràng()

Xóa màn hình, đặt con trỏ ở góc trên bên trái.

disp.clear(); // đặt lại hiển thị

bỏ nhà đi()

Đặt con trỏ ở góc trên bên trái.

disp.home(); // về đầu màn hình

void setCthon(col, row)

Đặt con trỏ ở vị trí được chỉ định.

  • col – Tọa độ X, đánh số từ 0;
  • row – Tọa độ Y, đánh số từ 0.

setCursor(0,1); // con trỏ đến đầu dòng thứ hai

ghi byte (dữ liệu)

Hiển thị một biểu tượng trên màn hình. Trả về số byte được truyền.

Bản phác thảo sau đây hiển thị dữ liệu từ cổng nối tiếp. Dữ liệu có thể được truyền qua màn hình cổng Arduino IDE.

// Đầu ra dữ liệu cổng nối tiếp trên chỉ báo LCD
#bao gồm


dữ liệu char;

thiết lập trống()
{
Serial.begin(9600); // khởi tạo cổng nối tiếp
disp.begin(20, 4); //
}

vòng lặp trống()
{
if (Serial.available()) ( // nếu có dữ liệu
data= Serial.read(); // đọc ký hiệu
if((data != 0xd) && (data != 0xa)) ( // nguồn cấp dữ liệu
disp.write(dữ liệu); // hiển thị ký hiệu trên màn hình
}
}
}

Tôi có một chỉ báo lớn - 4 dòng 20 ký tự. Nó chứa hai bộ điều khiển HD44780. Do đó, các ký tự được truyền tuần tự sẽ điền vào dòng đầu tiên trước tiên, sau đó là dòng thứ ba, rồi đến dòng thứ hai và thứ tư. Những thứ kia. qua đường dây. Thuộc tính này phải được tính đến đối với một số loại chỉ báo nhất định. Tài liệu cho mỗi chỉ báo LCD cho biết trình tự địa chỉ ký tự.

in byte (dữ liệu)

Hiển thị văn bản trên màn hình. Trả về số byte được truyền.

Tranh luận:

dữ liệu - dữ liệu sẽ được hiển thị trên màn hình. Có thể có các kiểu char, byte, int, long, string.

Có thể có đối số thứ hai, tùy chọn.

in byte (dữ liệu, BASE)

  • CƠ SỞ – chỉ định hệ thống số:
  • BIN - nhị phân;
  • DEC – số thập phân;
  • Tháng 10 – bát phân:
  • HEX - thập lục phân.

Một ví dụ về chương trình in chuỗi văn bản lên màn hình.

// hiển thị dòng văn bản trên chỉ báo LCD
#bao gồm

Màn hình LiquidCrystal(6, 7, 2, 3, 4, 5); // tạo một đối tượng

thiết lập trống()
{
disp.begin(20, 4); // khởi tạo hiển thị 4 dòng 20 ký tự
disp.print("Chuỗi thử nghiệm");
}

vòng lặp trống()
{ }

con trỏ trống()

Bật chế độ hiển thị con trỏ. Vị trí mà ký tự tiếp theo sẽ được xuất ra sẽ được gạch chân.

disp.cursor(); // cho phép hiển thị con trỏ

void noCursor()

Vô hiệu hóa hiển thị con trỏ.

disp.noCursor(); // tắt hiển thị con trỏ

khoảng trống nhấp nháy()

Bật chế độ con trỏ nhấp nháy. Được sử dụng cùng với hàm con trỏ(). Kết quả phụ thuộc vào mô hình chỉ báo cụ thể.

disp.blink(); // cho phép con trỏ nhấp nháy

void noBlink()

Tắt chế độ con trỏ nhấp nháy.

disp.noBlink(); // tắt con trỏ nhấp nháy

hiển thị khoảng trống ()

Bật màn hình sau khi nó bị tắt bởi noDisplay(). Màn hình sẽ hiển thị thông tin đã có trước khi tắt máy.

display.display(); // bật màn hình

vô hiệu hóa không hiển thị()

Tắt màn hình. Thông tin được lưu trữ trong bộ nhớ và hiển thị khi màn hình được bật.

disp.noDisplay(); // tắt màn hình

khoảng trống cuộnDisplayLeft()

Cuộn nội dung hiển thị sang trái một ký tự.

hiển thị. cuộnDisplayLeft(); // di chuyển mọi thứ sang trái

void cuộnDisplayRight()

Cuộn nội dung hiển thị sang phải một ký tự.

hiển thị. cuộnDisplayRight(); // di chuyển mọi thứ sang bên phải

vô hiệu hóa tự động cuộn ()

Bật chế độ cuộn văn bản tự động. Khi mỗi ký tự được hiển thị, tất cả văn bản trên màn hình sẽ dịch chuyển theo một ký tự. Các hàm leftToRight() và rightToLeft() xác định hướng thông tin được dịch chuyển.

hiển thị. autoscroll())(; // kích hoạt tính năng tự động cuộn

void noAutoscroll()

Tắt tính năng cuộn văn bản tự động.

hiển thị. noAutoscroll())(; // vô hiệu hóa tính năng tự động cuộn

khoảng trống tráiToRight()

Đặt chế độ đầu ra kiểm tra từ trái sang phải. Các biểu tượng mới sẽ xuất hiện ở bên phải của những biểu tượng trước đó.

leftToRight(); // chế độ từ trái sang phải

void rightToLeft()

Đặt chế độ đầu ra kiểm tra từ phải sang trái. Các biểu tượng mới sẽ xuất hiện ở bên trái của những biểu tượng trước đó.

phải sang trái(); // chế độ từ phải sang trái

void createChar(num, data)

Phương pháp tạo biểu tượng tùy chỉnh. Bộ điều khiển cho phép tạo tối đa 8 ký tự (0...7) 5x8 pixel. Hình ảnh ký hiệu được chỉ định bởi một mảng 8 byte. 5 bit có ý nghĩa nhỏ nhất của mỗi byte xác định trạng thái của các pixel trong hàng.

Để xuất ký tự tùy chỉnh, bạn có thể sử dụng hàm write() với số ký tự.

// tạo biểu tượng tùy chỉnh
#bao gồm

Màn hình LiquidCrystal(6, 7, 2, 3, 4, 5); // tạo một đối tượng

nụ cười byte = (
B00000000,
B00010001,
B00000000,
B00000000,
B00010001,
B00001110,
B00000000,
B00000000
};

thiết lập trống()
{
disp.createChar(0, Smile); // tạo một biểu tượng
disp.begin(20, 4); // khởi tạo hiển thị 4 dòng 20 ký tự
disp.print("Cười ");
disp.write(byte(0)); // hiển thị ký hiệu
}

vòng lặp trống()
{ }

Đây là một ví dụ về chương trình hiển thị bảng chữ cái tiếng Nga.

// Đầu ra bảng chữ cái tiếng Nga
#bao gồm

LiquidCrystalRus disp(6, 7, 2, 3, 4, 5); // tạo một đối tượng

thiết lập trống()
{
disp.begin(20, 4); // khởi tạo hiển thị 4 dòng 20 ký tự
disp.print("abvgdeezhziyklmnoprst");
disp.print("ABVGDEYOZHIYKLMNOPRST");
disp.print("ufhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh,");

Loại: . Bạn có thể đánh dấu nó.
  • Mô-đun FC-113 dựa trên chip PCF8574T, là một thanh ghi dịch chuyển 8 bit - một “bộ mở rộng” đầu vào-đầu ra cho bus nối tiếp I2C. Trong hình, vi mạch được ký hiệu là DD1.
  • R1 là điện trở điều chỉnh độ tương phản của màn hình LCD.
  • Jumper J1 dùng để bật đèn nền màn hình.
  • Các chân 1…16 được sử dụng để kết nối mô-đun với các chân của màn hình LCD.
  • Cần có miếng tiếp xúc A1...A3 để thay đổi địa chỉ I2C của thiết bị. Bằng cách hàn các jumper thích hợp, bạn có thể thay đổi địa chỉ thiết bị. Bảng hiển thị sự tương ứng của các địa chỉ và jumper: “0” tương ứng với mạch hở, “1” tương ứng với jumper đã được cài đặt. Theo mặc định, cả 3 jumper đều mở và địa chỉ thiết bị 0x27.

2 Sơ đồ kết nối màn hình LCD với Arduino thông qua giao thức I2C

Mô-đun được kết nối với Arduino theo chuẩn bus I2C: chân SDA của mô-đun được kết nối với cổng analog A4, chân SCL được kết nối với cổng analog A5 của Arduino. Mô-đun này được cấp nguồn +5 V từ Arduino. Bản thân mô-đun được kết nối bằng các chân 1…16 với các chân tương ứng 1…16 trên màn hình LCD.


3 Thư viện cho công việc thông qua giao thức I2C

Bây giờ chúng ta cần một thư viện để làm việc với LCD thông qua giao diện I2C. Bạn có thể sử dụng cái này chẳng hạn (liên kết trong dòng "Tải xuống mã và thư viện mẫu").

Kho lưu trữ đã tải xuống LiquidCrystal_I2Cv1-1.rar giải nén vào một thư mục \thư viện\, nằm trong thư mục Arduino IDE.

Thư viện hỗ trợ một bộ chức năng tiêu chuẩn cho màn hình LCD:

Chức năngMục đích
Tinh thể lỏng() tạo biến loại LiquidCrystal và chấp nhận các tham số kết nối hiển thị (số pin);
bắt đầu() khởi tạo màn hình LCD, cài đặt các thông số (số dòng và ký tự);
thông thoáng() xóa màn hình và đưa con trỏ về vị trí bắt đầu;
trang chủ() đưa con trỏ về vị trí bắt đầu;
setCthon() đặt con trỏ đến một vị trí nhất định;
viết() hiển thị biểu tượng trên màn hình LCD;
in() hiển thị văn bản trên màn hình LCD;
con trỏ() hiển thị con trỏ, tức là gạch chân dưới vị trí của ký tự tiếp theo;
không có con trỏ() ẩn con trỏ;
chớp mắt() con trỏ nhấp nháy;
khôngBlink() Hủy nhấp nháy;
không hiển thị() tắt màn hình đồng thời lưu tất cả thông tin hiển thị;
trưng bày() bật màn hình đồng thời lưu tất cả thông tin hiển thị;
cuộnDisplayLeft() cuộn nội dung hiển thị sang trái 1 vị trí;
cuộnDisplayRight() cuộn nội dung hiển thị sang phải 1 vị trí;
tự động cuộn() kích hoạt tính năng tự động cuộn;
không có Autoscroll() vô hiệu hóa tính năng tự động cuộn;
leftToRight() đặt hướng văn bản từ trái sang phải;
phải sang trái() hướng văn bản từ phải sang trái;
tạoChar() tạo một ký tự tùy chỉnh cho màn hình LCD.

4 Phác thảo cho đầu ra văn bản tới màn hình LCD thông qua bus I2C

Hãy mở mẫu: Tệp mẫu LiquidCrystal_I2C CustomChars và chúng ta sẽ làm lại nó một chút. Chúng tôi sẽ hiển thị một thông báo ở cuối sẽ có biểu tượng nhấp nháy. Các nhận xét cho mã nhận xét về tất cả các sắc thái của bản phác thảo.

#bao gồm // bao gồm thư viện Wire #include // kết nối thư viện LCD #define printByte(args) write(args); // uint8_t tim = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // mặt nạ bit của biểu tượng “trái tim” LiquidCrystal_I2C lcd(0x27, 16, 2); // Đặt địa chỉ 0x27 cho màn hình LCD 16x2 thiết lập void() ( lcd.init(); // khởi tạo màn hình LCD lcd.backlight(); // bật đèn nền màn hình lcd.createChar(3, heart); // tạo biểu tượng “trái tim” trong ô nhớ 3 lcd.home(); // đặt con trỏ ở góc trên bên trái, tại vị trí (0,0) lcd.!"); // in một dòng văn bản lcd.setCursor(0, 1); // di chuyển con trỏ đến dòng 2, ký tự 1 lcd.print( " i "); // in thông báo trên dòng 2 lcd.printByte(3); // in biểu tượng “trái tim” nằm ở ô thứ 3 lcd.print(" Arduino "); } vòng lặp trống() (// nhấp nháy ký tự cuối cùng lcd.setCursor(13, 1); // di chuyển con trỏ đến dòng 2, ký tự 1 lcd.print("\t"); độ trễ (500); lcd.setCursor(13, 1); // di chuyển con trỏ đến dòng 2, ký tự 1 lcd.print(" "); độ trễ (500); }

Nhân tiện, các ký tự được viết bởi lệnh lcd.createChar();, vẫn còn trong bộ nhớ hiển thị ngay cả sau khi tắt nguồn, bởi vì được viết để hiển thị ROM 1602.

5 Tạo biểu tượng của riêng bạn cho màn hình LCD

Chúng ta hãy xem xét kỹ hơn vấn đề tạo biểu tượng của riêng bạn cho màn hình LCD. Mỗi ký tự trên màn hình bao gồm 35 chấm: 5 rộng và 7 cao (+1 dòng dự trữ để gạch chân). Trong dòng 6 của bản phác thảo trên, chúng ta xác định một mảng gồm 7 số: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Chuyển đổi số thập lục phân sang nhị phân: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Những con số này không gì khác hơn là mặt nạ bit cho mỗi dòng trong số 7 dòng của biểu tượng, trong đó "0" biểu thị điểm sáng và "1" biểu thị điểm tối. Ví dụ: biểu tượng trái tim được chỉ định là mặt nạ bit sẽ xuất hiện trên màn hình như trong hình.

6 Điều khiển màn hình LCD thông qua xe buýt I2C

Hãy tải bản phác thảo lên Arduino. Dòng chữ chúng tôi đã chỉ định bằng con trỏ nhấp nháy ở cuối sẽ xuất hiện trên màn hình.


7 Có gì đằng sau Xe buýt I2C

Ngoài ra, chúng ta hãy xem sơ đồ thời gian hiển thị các ký tự Latinh "A", "B" và "C" trên màn hình LCD. Các ký tự này được lưu trữ trong ROM hiển thị và được hiển thị trên màn hình chỉ bằng cách truyền địa chỉ của chúng tới màn hình. Sơ đồ được lấy từ các chân RS, RW, E, D4, D5, D6 và D7 của màn hình, tức là. đã có sau bộ chuyển đổi FC-113 “bus song song I2C”. Có thể nói rằng chúng tôi đang đi sâu hơn một chút vào phần cứng.


Sơ đồ thời gian xuất ra các ký tự Latin “A”, “B” và “C” trên màn hình LCD 1602

Sơ đồ cho thấy các ký tự trong ROM hiển thị (xem trang 11 của biểu dữ liệu, liên kết bên dưới) được truyền thành hai phần, phần đầu tiên xác định số cột của bảng và phần thứ hai - số hàng. Trong trường hợp này, dữ liệu được “chốt” ở rìa tín hiệu trên đường truyền E(Bật) và dòng R.S.(Chọn đăng ký) ở trạng thái logic, nghĩa là dữ liệu đang được truyền. Trạng thái ở mức thấp trên đường RS có nghĩa là các hướng dẫn đang được gửi đi, đó là những gì chúng ta thấy trước khi mỗi ký tự được truyền đi. Trong trường hợp này, mã hướng dẫn quay về vị trí (0, 0) của màn hình LCD được truyền đi, mã này cũng có thể được tìm ra bằng cách nghiên cứu mô tả kỹ thuật của màn hình.

Và một ví dụ nữa. Sơ đồ thời gian này hiển thị đầu ra của biểu tượng Trái tim trên màn hình LCD.


Một lần nữa, hai xung lực đầu tiên Cho phép tuân thủ hướng dẫn Trang chủ()(0000 0010 2) - đưa cỗ xe về vị trí (0; 0) và hai thứ hai - xuất ra màn hình LCD được lưu trong ô nhớ 3 10 (0000 0011 2) biểu tượng “Trái tim” (hướng dẫn lcd.createChar(3, heart); phác thảo).

Làm cách nào để kết nối bảng Arduino với màn hình ký tự? Khá đơn giản! Mọi thứ đều ở bên dưới theo thứ tự và chi tiết.

Nếu bạn muốn nhận thông tin từ Arduino mà không cần kết nối với máy tính và xuất ra cổng nối tiếp, bạn có thể sử dụng màn hình ký tự. Nó không khó để làm điều đó. Sự thuận tiện thu được từ giao tiếp là vô giá.
Để làm việc, tôi sử dụng màn hình LCD ký tự J204A dựa trên chip HD44780, thường được tìm thấy trên eBay với tên LCD2004. 4 dòng 20 ký tự, đảo ngược. Mua với nhiều người khác trên eBay, chỉ với một xu, từ 60 đến 100 rúp mỗi chiếc. Ngôn ngữ tiếng Nga không được hỗ trợ theo mặc định, nhưng đây là một vấn đề có thể giải quyết được, lần sau sẽ giải quyết thêm. Và các đầu nối trong sơ đồ không được hàn, bạn sẽ phải làm việc với mỏ hàn.
Thư viện được sử dụng để làm việc với màn hình LiquidCrystal.hđược bao gồm trong Arduino IDE mặc định.

Nhưng tôi không tìm thấy bảng dữ liệu cho màn hình LCD2004, nhưng Internet có đầy đủ các bảng hiển thị. Nhưng thực tế chúng không khác nhau chút nào. Các điều khiển và kết nối hoàn toàn giống nhau. Sự khác biệt duy nhất là số dòng/ký tự trên màn hình. Nhưng điều này sẽ hoàn toàn không có tác dụng nếu bạn có 1602.

Tất cả các liên hệ được xác định trong bảng. Nếu bạn cầm màn hình và xoay về phía mình, các số liên lạc sẽ lần lượt được sắp xếp từ trái sang phải trong bảng, chúng được liệt kê theo thứ tự số tăng dần. Trong cột danh bạ, ký hiệu trong biểu dữ liệu được biểu thị trong ngoặc đơn.

# Liên lạc Cái này được dùng để làm gì? Ghi chú
1 VSS (VSS) GND. Trái đất. Nguồn cấp cho vi điều khiển hiển thị. 0V
2 VDD(VCC) Điện áp cung cấp cho vi điều khiển hiển thị. +5V
3 V0(VEE) Độ tương phản của các ký tự trên màn hình. Tốt hơn là kết nối thông qua một chiết áp. từ 0v đến +5V
4 RS (RS) Đăng ký lựa chọn.
5 RW (R/W) Chuyển đổi chế độ đọc/ghi. Hãy kéo nó xuống đất, chúng ta chỉ cần truyền thông tin đến màn hình. 0-ghi + 5V-đọc
6 E Bấm giờ
7 D0 (DB0) Dữ liệu
8 D1 (DB1) Truyền dữ liệu. (Chúng tôi sẽ không sử dụng nó) Dữ liệu
9 D2 (DB2) Truyền dữ liệu. (Chúng tôi sẽ không sử dụng nó) Dữ liệu
10 D3 (DB3) Truyền dữ liệu. (Chúng tôi sẽ không sử dụng nó) Dữ liệu
11 D4 (DB4) Dữ liệu
12 D5 (DB5) Truyền dữ liệu. (Đã kích hoạt) Dữ liệu
13 D6 (DB6) Truyền dữ liệu. (Đã kích hoạt) Dữ liệu
14 D7 (DB7) Truyền dữ liệu. (Đã kích hoạt) Dữ liệu
15 MỘT (LED+) Điện áp +5V, đèn nền màn hình, độ sáng màn hình có thể điều chỉnh thông qua chiết áp. +5V
16 K(LED-) GND Ground, đèn nền hiển thị 0V

v

Có thể truyền dữ liệu tới màn hình theo hai tùy chọn: 8 và 4 bit mỗi đồng hồ. Bởi vì Arduino có ít địa chỉ liên hệ, chúng tôi sẽ sử dụng 4 - điều này là quá đủ để cập nhật thông tin trên màn hình với tốc độ khiến nhận thức bị cấm.

Đây là cách toàn bộ sự việc được kết nối với tôi. Có vẻ như hỗn loạn nhưng ở đây có một hệ thống. Bạn có thể phân biệt dây màu đỏ, xanh lá cây, vàng và cam. Các dây màu đỏ luôn ở mức +5V, các dây màu xanh lá cây là GND, còn các dây màu vàng và cam là dây để kết nối với Arduino, nơi mang dữ liệu.

Phần quan trọng nhất là kết nối vật lý của màn hình. Bằng cách nhấp vào, nó sẽ mở ra ở độ phân giải cao, nơi mọi thứ đều được hiển thị rõ ràng.
Điện trở R1 - 200OM. Điện trở hạn chế dòng điện đi qua đèn nền màn hình.
R2 - Chiết áp có điện trở lên tới 10kOM. Chúng tôi xoay bút và chọn độ tương phản của các ký hiệu.


Và một bản phác thảo cực kỳ đơn giản để hiển thị một vài dòng trên màn hình.

H> // Chúng ta kết nối thư viện để làm việc với màn hình. /* Lệnh LiquidCrystal lcd(rs, Enable, d4, d5, d6, d7); Chúng tôi tạo một biến loại LiquidCrystal và xác định thông qua các điểm tiếp xúc mà Arduino hoạt động với màn hình. biết thêm chi tiết về lệnh này tại đây http://arduino.cc/en/Reference/LiquidCrystalConstructor */ LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup() ( lcd.begin(20, 4); // xác định đặc điểm của màn hình (20 ký tự trên mỗi dòng, 4 dòng) // Đối với màn hình 1602, bạn phải chỉ định lcd.begin(16, 2); lcd .setCursor(1, 1); // Chỉ định vị trí bắt đầu hiển thị văn bản. Các dòng và ký tự bắt đầu từ 0!!! // 1 sẽ di chuyển dòng một phân chia từ đầu màn hình và di chuyển văn bản một phần. dòng bên dưới lcd.print("compblog.vlukyanov" ); // in văn bản bắt đầu từ vị trí được chỉ định. lcd.setCursor(7, 2); // in từ ký tự thứ 8 trên màn hình lcd.print(".com "); // văn bản cần in. loop() ( // chúng ta không làm gì khác trong vòng lặp; mọi thứ đã được thực hiện trong quá trình khởi tạo bảng. )

Kết quả. Nếu bạn biết cách kết nối tất cả và cách viết mã thì thời gian cho tất cả công việc là 5 phút.

Màn hình cũng có thể thực hiện một số chức năng một cách độc lập và cũng có thể đặt một số thông số.

Ví dụ:

  • Cuộn văn bản;
  • Vị trí con trỏ flash;
  • Bật/tắt.

Và bây giờ là phần thưởng!
Đèn nền màn hình gây lãng phí năng lượng, chẳng hạn như khi chạy bằng pin, người ta muốn tiết kiệm năng lượng. Tôi đã tự mình thực hiện tùy chọn này - khi bạn nhấn nút, đèn nền màn hình sẽ bật trong 5 giây.

H> // Chúng ta kết nối thư viện để làm việc với màn hình. nút intInt = 0; // Số ngắt sẽ được gọi. int screenLed = 4; // Số chân mà màn hình được kết nối. +5V biến động dài x = 5000; // biến lưu trữ thời gian LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup attachment() (Interrupt(buttonInt, screenon, FALLING); // tham số ngắt lcd.begin(20, 4); pinMode(screenLed, OUTPUT); digitalWrite(screenLed,HIGH); // bật màn hình LCD. setCursor(0 , 0); lcd.print("Bắt đầu kiểm tra màn hình!"); void screenon() ( x = millis()+5000; // Ghi nhớ thời điểm bạn cần tắt đèn nền. Thời gian hoạt động hiện tại là +5 giây. digitalWrite(screenLed,HIGH); // Cấp điện áp cho đèn nền màn hình. ) void loop() ( lcd.setCursor(0, 2); // đi đến dòng thứ ba lcd.print(x); // và hiển thị thời gian màn hình tắt lcd.setCursor(0, 3); / / tới dòng thứ 4 lcd.print( millis()); // in thời gian hoạt động hiện tại if (x< millis()) // если время работы выключения наступило >( digitalWrite(screenLed,LOW); // sau đó tắt màn hình) )

Và kết quả:

Hướng dẫn

Hoạt động của máy đo khoảng cách siêu âm HC-SR04 dựa trên nguyên lý định vị bằng tiếng vang. Nó phát ra các xung âm thanh vào không gian và nhận tín hiệu phản xạ từ chướng ngại vật. Căn cứ vào thời gian truyền sóng âm tới vật cản và ngược lại mà xác định được khoảng cách tới vật thể.
Sóng âm thanh được kích hoạt bằng cách áp một xung dương kéo dài ít nhất 10 micro giây vào chân TRIG của máy đo khoảng cách. Ngay khi xung kết thúc, máy đo khoảng cách sẽ phát ra một gói xung âm thanh có tần số 40 kHz vào không gian phía trước nó. Đồng thời, thuật toán xác định thời gian trễ của tín hiệu phản xạ được đưa ra và một đơn vị logic xuất hiện trên chân máy đo khoảng cách ECHO. Ngay khi cảm biến phát hiện tín hiệu phản xạ, số 0 logic sẽ xuất hiện ở chân ECHO. Khoảng thời gian của tín hiệu này (“Độ trễ tiếng vang” trong hình) xác định khoảng cách đến vật thể.
Phạm vi đo khoảng cách của máy đo khoảng cách HC-SR04 lên tới 4 mét với độ phân giải 0,3 cm. Góc nhìn là 30 độ, góc hiệu dụng là 15 độ. Mức tiêu thụ hiện tại ở chế độ chờ là 2 mA, trong khi hoạt động - 15 mA.

Máy đo khoảng cách siêu âm được cấp nguồn bằng điện áp +5 V. Hai chân còn lại được kết nối với bất kỳ cổng kỹ thuật số Arduino nào mà chúng ta sẽ kết nối với 11 và 12.

Bây giờ hãy viết một bản phác thảo xác định khoảng cách đến chướng ngại vật và xuất nó ra cổng nối tiếp. Đầu tiên, chúng ta đặt số lượng chân TRIG và ECHO - đây là các chân 12 và 11. Sau đó, chúng ta khai báo trigger là đầu ra và echo là đầu vào. Khởi tạo cổng nối tiếp ở tốc độ 9600 baud. Trong mỗi lần lặp lại chu kỳ vòng() Chúng tôi đọc khoảng cách và xuất nó ra cổng.
Chức năng getEchoTiming() tạo ra xung kích hoạt. Nó chỉ tạo ra dòng điện 10 micro giây, một xung, là yếu tố kích hoạt máy đo khoảng cách bắt đầu phát ra gói âm thanh vào không gian. Tiếp theo, nó ghi nhớ thời gian từ khi bắt đầu truyền sóng âm cho đến khi có tiếng vang.
Chức năng getDistance() tính khoảng cách tới vật. Chúng ta nhớ trong môn vật lý ở trường rằng khoảng cách bằng tốc độ nhân với thời gian: S = V*t. Tốc độ truyền âm trong không khí là 340 m/giây, chúng ta biết thời gian tính bằng micro giây, đây là “duratuion”. Để có được thời gian tính bằng giây, hãy chia cho 1.000.000. Vì âm thanh truyền đi quãng đường gấp đôi - đến vật thể và quay lại - bạn cần chia khoảng cách làm đôi. Vì vậy, hóa ra khoảng cách đến vật thể là S = 34000 cm/giây * thời lượng / 1.000.000 giây / 2 = 1,7 cm/giây / 100, đó là những gì chúng ta đã viết trong bản phác thảo. Bộ vi điều khiển thực hiện phép nhân nhanh hơn phép chia, vì vậy tôi đã thay thế “/ 100” bằng “* 0,01” tương đương.

Ngoài ra, nhiều thư viện đã được viết để hoạt động với máy đo khoảng cách siêu âm. Ví dụ: cái này: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip. Việc cài đặt thư viện diễn ra theo tiêu chuẩn: tải xuống, giải nén vào một thư mục thư viện, nằm trong thư mục Arduino IDE. Sau này, thư viện có thể được sử dụng.
Sau khi cài đặt thư viện, hãy viết một bản phác thảo mới. Kết quả hoạt động của nó là như nhau - màn hình cổng nối tiếp hiển thị khoảng cách đến đối tượng tính bằng cm. Nếu bạn viết trong một bản phác thảo float dist_cm = siêu âm.Ranging(INC);, khoảng cách sẽ được hiển thị bằng inch.

Vì vậy, chúng tôi đã kết nối máy đo khoảng cách siêu âm HC-SR04 với Arduino và nhận dữ liệu từ nó theo hai cách khác nhau: sử dụng thư viện đặc biệt và không có.
Ưu điểm của việc sử dụng thư viện là số lượng mã giảm đáng kể và khả năng đọc chương trình được cải thiện; bạn không cần phải đi sâu vào sự phức tạp của thiết bị và có thể sử dụng nó ngay lập tức. Nhưng trong đó có một nhược điểm: bạn hiểu kém hơn về cách hoạt động của thiết bị và những quá trình diễn ra trong đó. Trong mọi trường hợp, sử dụng phương pháp nào là tùy thuộc vào bạn.