Mục lục:

STONE LCD với Nhà thông minh: 5 bước
STONE LCD với Nhà thông minh: 5 bước

Video: STONE LCD với Nhà thông minh: 5 bước

Video: STONE LCD với Nhà thông minh: 5 bước
Video: Dành cả thanh xuân cho một video mài đá bóng loáng với bộ Rock Tumbler NAT GEO ToyStation 612 2024, Tháng mười một
Anonim
STONE LCD với Nhà thông minh
STONE LCD với Nhà thông minh

Hôm nay, tôi nhận được màn hình ổ đĩa cổng nối tiếp của STONE, có thể giao tiếp thông qua cổng nối tiếp của MCU và thiết kế logic giao diện người dùng của màn hình này có thể được thiết kế trực tiếp bằng cách sử dụng phần mềm VGUS được cung cấp trên trang web chính thức của STONE, điều này rất thuận tiện cho chúng tôi. Vì vậy, tôi dự định sử dụng nó để làm một bộ điều khiển thiết bị đơn giản, bao gồm điều khiển các đèn khác nhau (phòng khách, nhà bếp, phòng trẻ em, phòng tắm). Đồng thời, có thể thu thập nhiệt độ, độ ẩm, chất lượng không khí trong nhà và ngoài trời. Đây chỉ là một bản demo đơn giản và bạn có thể tiến hành phát triển thứ cấp thông qua mã mà tôi đã cung cấp. Một số hướng dẫn cơ bản về màn hình ĐÁ có thể vào trang web:

Trang web có nhiều thông tin về mô hình, người dùng và tài liệu thiết kế, cũng như các video hướng dẫn. Tôi sẽ không đi vào quá nhiều chi tiết ở đây.

Bước 1: Thiết kế giao diện người dùng

Thiết kế giao diện người dùng
Thiết kế giao diện người dùng
Thiết kế giao diện người dùng
Thiết kế giao diện người dùng
Thiết kế giao diện người dùng
Thiết kế giao diện người dùng
Thiết kế giao diện người dùng
Thiết kế giao diện người dùng

Photoshop

Tôi đã thiết kế hai trang giao diện người dùng sau bằng photoshop:

Dự án này có tổng cộng hai trang trên. "Light" và "Sensor" ở góc trên bên phải là nút chuyển đổi của hai trang này.

Trong trang "Ánh sáng", bạn có thể điều khiển tất cả các loại đèn trong nhà của mình. Trong trang "Cảm biến", bạn có thể kiểm tra các giá trị được phát hiện bởi các cảm biến khác nhau.

Sau khi thiết kế xong 2 trang trên, chúng ta có thể tiến hành thiết kế logic nút thông qua phần mềm STONE TOOL được cung cấp trên trang web chính thức của STONE.

Điều đáng chú ý là nguồn xung nhịp được sử dụng để hiển thị thời gian ở đây là nguồn xung nhịp của màn hình hiển thị, không phải nguồn xung nhịp MCU.

Hiệu ứng chuyển đổi trang TAB

Không tìm thấy thành phần chuyển trang TAB nào trong phần mềm STONE TOOL, vì vậy tôi đã nghĩ ra một phương pháp khác để đạt được hiệu ứng chuyển trang TAB.

Qua quan sát tôi cung cấp hai hình ảnh UI có thể thấy rằng hai hình ảnh trên là chữ "Ánh sáng" và "Cảm biến", điểm khác biệt là kích thước điểm ảnh của chúng khác nhau, nên chúng ta chỉ cần đặt vị trí hai điểm ảnh là được cùng một văn bản, và sau đó thông qua góc trên bên trái của ngày và giờ để tham khảo, bạn có thể đạt được TAB để chuyển đổi hiệu ứng.

Logic nút

Lấy nút "Phòng khách" làm ví dụ. Khi người dùng nhấn nút này, màn hình hiển thị cổng nối tiếp STONE sẽ gửi các hướng dẫn giao thức tương ứng thông qua cổng nối tiếp. Sau khi nhận được chỉ dẫn này, MCU của người dùng sẽ phân tích cú pháp giao thức để điều khiển trạng thái chuyển mạch của đèn được kết nối với MCU.

Thu nhận cảm biến

Lấy ví dụ "chất lượng không khí": nếu bạn muốn có được chất lượng không khí trong nhà, chúng ta phải có MCU để thu thập chất lượng không khí, cảm biến chất lượng không khí khi số MCU được thu thập thông qua thuật toán so sánh ưu và nhược điểm của chất lượng không khí và sau đó MCU được gửi qua một cổng nối tiếp để hiển thị vùng lưu trữ "Tốt" hoặc "Xấu", để thay đổi nội dung hiển thị "Biến văn bản0" và sau đó người dùng có thể nhìn thấy trực quan giá trị của việc kiểm soát chất lượng. Những điều này được giải thích sau trong mã MCU.

Bước 2: Giao tiếp MCU

Truyền thông MCU
Truyền thông MCU
Truyền thông MCU
Truyền thông MCU
MCU thông tin liên lạc
MCU thông tin liên lạc
MCU thông tin liên lạc
MCU thông tin liên lạc

STM32 là MCU mà mọi người đều quen thuộc, và nó là một mô hình MCU phổ biến ở quốc tế. Do đó, mô hình cụ thể của MCU STM32 mà tôi sử dụng trong dự án này là STM32F103RCT6.

Có nhiều dòng STM32, có thể đáp ứng nhiều nhu cầu khác nhau của thị trường. Nhân có thể được chia thành cortex-m0, M3, M4 và M7, và mỗi nhân có thể được chia thành các loại chính, hiệu suất cao và tiêu thụ điện năng thấp.

Hoàn toàn từ góc độ học tập, bạn có thể chọn F1 và F4, F1 đại diện cho loại cơ bản, dựa trên nhân cortex-m3, tần số chính là 72MHZ, F4 đại diện cho hiệu suất cao, dựa trên nhân cortex-m4, chính tần số là 180M.

Còn đối với F1, F4 (429 series trở lên), ngoài kernel khác và cải tiến tần số chính, đặc điểm nổi bật của bản nâng cấp là bộ điều khiển LCD và giao diện camera, hỗ trợ SDRAM, sự khác biệt này sẽ được ưu tiên trong việc lựa chọn dự án. Tuy nhiên, ở góc độ giảng dạy đại học và bước đầu tìm hiểu của người dùng, dòng F1 vẫn là lựa chọn hàng đầu. Hiện tại, STM32 thuộc dòng F1 có số lượng nguyên liệu và sản phẩm lớn nhất trên thị trường.

Về phương pháp cài đặt và tải xuống chương trình trong môi trường phát triển STM32 SCM, tôi sẽ không giới thiệu.

Khởi tạo GPIO

Trong dự án này, chúng tôi đã sử dụng tổng cộng 4 GPIO, một trong số đó là chân đầu ra PWM. Đầu tiên chúng ta hãy xem xét việc khởi tạo ba cổng GPIO thông thường:

Chức năng này khởi tạo PB0 / PB1 / PB2 của STM32F103C8 làm chân đầu ra và gọi nó từ chức năng chính. Sau khi khởi tạo, chúng ta cần có một logic để điều khiển trạng thái đầu ra, mức cao và thấp của GPIO này, vì vậy tôi đã viết hàm như dưới đây:

Đây là một hàm mà bạn có thể hiểu trực quan bằng tên của biến.

Khởi tạo cổng nối tiếp

Phần khởi tạo của cổng nối tiếp nằm trong uart.c:

Sau đó gọi uart_init trong hàm main để khởi tạo tốc độ truyền của cổng nối tiếp là 115200. Các chân sử dụng PA9 / PA10

Khởi tạo PWM

Các bước cụ thể:

1. Đặt đồng hồ RCC;

2. Đặt đồng hồ GPIO; Chế độ GPIO phải được đặt thành GPIO_Model_AF_PP hoặc thành hàm GPIO_PinRemapConfig () nếu cần thiết lập lại pin.

3. Đặt các thanh ghi có liên quan của bộ định thời TIMx;

4. Đặt thanh ghi liên quan đến PWM của bộ định thời TIMx;

A. Đặt chế độ PWM

B. Đặt chu kỳ nhiệm vụ (tính toán theo công thức)

C. Đặt cực tính so sánh đầu ra (đã giới thiệu trước đây)

D. Quan trọng nhất, kích hoạt trạng thái đầu ra của TIMx và kích hoạt đầu ra PWM của TIMx; Sau khi hoàn tất các Cài đặt liên quan, bộ hẹn giờ TIMx được bật bởi TIMx_Cmd () để thu được đầu ra PWM. Gọi TIM3_PWM_Init này từ hàm chính.

Bước 3: Viết mã logic

Viết mã logic
Viết mã logic
Viết mã logic
Viết mã logic
Viết mã logic
Viết mã logic

Hiển thị định nghĩa địa chỉ thành phần

Các thành phần của màn hình có các địa chỉ riêng biệt và ở đây tôi đã viết tất cả chúng dưới dạng định nghĩa macro:

Nhìn vào thông tin về màn hình STONE, bạn có thể thấy rằng khi nhấn nút, cổng nối tiếp trên màn hình sẽ gửi các giao thức ở định dạng thích hợp mà MCU người dùng có thể nhận và phân tích cú pháp. Khi nhấn nút, cổng nối tiếp trên màn hình sẽ gửi chín byte dữ liệu, bao gồm cả dữ liệu người dùng. Nhận dữ liệu nối tiếp được ghi trong Trình xử lý: Dữ liệu nhận được được lưu trữ trong mảng "USART_RX_BUF". Trong dự án này, độ dài nhận được là cố định. Khi độ dài nhận lớn hơn 9 byte, kết thúc nhận được đánh giá.

Kiểm soát trạng thái chuyển đổi của đèn

Trong chức năng chính, tôi đã viết một số mã logic để điều khiển trạng thái chuyển đổi của đèn: Như chúng ta thấy, mã đầu tiên xác định xem dữ liệu cổng nối tiếp có được nhận hay không và khi nhận dữ liệu cổng nối tiếp, xác định nút nào người dùng. nhấn trên màn hình hiển thị. Các nút khác nhau trên màn hình có địa chỉ khác nhau, có thể thấy trong phần mềm CÔNG CỤ ĐÁ: Khi người dùng nhấn nút "Phòng khách", bit thứ tư và thứ năm của dữ liệu được gửi ra bởi cổng nối tiếp của màn hình hiển thị là địa chỉ của nút. Vì bit thứ tư của tất cả các nút được đặt ở đây là 0x00, chúng tôi có thể đánh giá người dùng nhấn nút nào bằng cách đánh giá trực tiếp dữ liệu của bit thứ năm. Sau khi nhận được nút do người dùng nhấn, chúng ta cần đánh giá dữ liệu người dùng nhận được khi nhấn nút, đó là chữ số thứ tám của dữ liệu được gửi từ màn hình hiển thị. Do đó, ta thực hiện điều khiển như sau: ghi thông số địa chỉ nút và dữ liệu người dùng vào hàm "Light_Contral" để điều khiển trạng thái bật-tắt của đèn. Thực thể chức năng Light_Contral như sau: Như bạn có thể thấy, nếu địa chỉ nút là "Phòng khách" và dữ liệu người dùng là "LightOn", thì chân PB0 của MCU được đặt thành đầu ra mức cao và đèn sáng. Ba nút còn lại cũng tương tự, nhưng tôi sẽ không tiếp tục ở đây.

Đầu ra PWM

Trong giao diện người dùng do tôi thiết kế, có một bộ điều chỉnh trượt, được sử dụng để kiểm soát độ sáng của ánh sáng của "Phòng trẻ em". MCU được thực hiện bởi PWM. PWM chân đầu ra là PB5. Mã như sau: Bộ điều chỉnh trượt được đặt thành giá trị nhỏ nhất là 0x00 và giá trị lớn nhất là 0x64. Khi trượt, cổng nối tiếp của màn hình hiển thị cũng sẽ gửi các địa chỉ và dữ liệu liên quan, sau đó đặt tỷ lệ nhiệm vụ của đầu ra PWM bằng cách gọi hàm sau:

Bước 4: Mua lại cảm biến

Thu nhận cảm biến
Thu nhận cảm biến
Thu nhận cảm biến
Thu nhận cảm biến
Thu nhận cảm biến
Thu nhận cảm biến

Trong trang "Cảm biến" của màn hình hiển thị, có bốn dữ liệu về Cảm biến.

Dữ liệu cũng có địa chỉ lưu trữ trong màn hình và chúng ta có thể thay đổi nội dung thực bằng cách ghi dữ liệu vào các địa chỉ này thông qua cổng nối tiếp của MCU.

Ở đây tôi đã thực hiện một mã đơn giản:

Dữ liệu hiển thị được cập nhật sau mỗi 5 giây và tôi chỉ viết một bản demo đơn giản về chức năng thu thập cảm biến có liên quan, vì tôi không có những cảm biến này trong tay.

Trong quá trình phát triển dự án thực, những cảm biến này có thể là dữ liệu được ADC thu thập hoặc dữ liệu được thu thập bởi các giao diện truyền thông IIC, UART và SPI. Tất cả những gì bạn cần làm là ghi những dữ liệu này vào hàm tương ứng làm giá trị trả về.

Bước 5: Hiệu quả hoạt động thực tế

Đề xuất: