Mục lục:
- Bước 1: Giới thiệu
- Bước 2: Thu thập các bộ phận và công cụ
- Bước 3: Cài đặt Arduino IDE
- Bước 4: Mã
- Bước 5: Sơ đồ mạch
- Bước 6: Kết hợp tất cả lại với nhau
- Bước 7: Kết luận
Video: Bộ thể hiện cảm xúc thực vật nhân tạo (A.P.E.X.): 7 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
Nhưng xin chờ chút nữa!
Bước 1: Giới thiệu
APEX là gì?
APEX là một thiết bị giám sát thực vật thông minh (chưa kể dễ thương). Chỉ cần cắm vào bất kỳ loại cây nào là nó sẽ hiển thị mức độ "hạnh phúc" của cây đó! Đây là một lời nhắc nhở tuyệt vời để tưới cây nếu bạn có thói quen xấu là quên tưới nước.
Làm thế nào nó hoạt động?
Ảo thuật. Đùa thôi! APEX sử dụng Arduino gắn với cảm biến độ ẩm, được đưa vào đất của cây. Cảm biến này sẽ đọc độ ẩm của đất và sau đó Arduino tính toán mặt nào sẽ hiển thị.
Nhưng tại sao?
Tại sao không?
Bước 2: Thu thập các bộ phận và công cụ
Hãy vào đó! Đối với phần có thể hướng dẫn này, bạn sẽ cần khá nhiều bộ phận và công cụ. May mắn cho bạn, tất cả chúng đều được liệt kê dưới đây:
Theo tinh thần của Cuộc thi Vi điều khiển, dự án này hoàn toàn được thực hiện bởi các bộ phận được mua trên Amazon! (không được tài trợ)
Danh sách các bộ phận:
- Arduino Uno
- Màn hình LED 8x8
- Cảm biến cảm ứng điện dung
- Cảm biến độ ẩm
- Đầu nối pin 9V
- Pin 9V
Danh sách công cụ:
- 22 dây đo
- Băng điện
- Dụng cụ cắt dây
- Sắt hàn
- Bơm hút
Khi bạn đã thu thập tất cả các thiết bị cần thiết, đã đến lúc thiết lập phần mềm Arduino!
Bước 3: Cài đặt Arduino IDE
Để dự án này hoạt động, chúng ta cần có khả năng lập trình Arduino. Điều này yêu cầu tải xuống và cài đặt Môi trường phát triển tích hợp Arduino (IDE) vào máy tính của bạn. Đó là một lời giải thích khá đơn giản, nhưng tôi sẽ hướng dẫn bạn qua quá trình:
1. Truy cập trang web Arduino
2. Điều hướng đến Trang tải xuống (Phần mềm> Tải xuống)
3. Nhấp vào Liên kết tải xuống cho Hệ điều hành của bạn
Lưu ý bên cạnh: Chương trình sẽ hoạt động trên Windows, Mac và Linux.
4. Cài đặt trên Windows
- Nhấp đúp vào tệp đã tải xuống để chạy nó
- Nhấp vào "Đồng ý" để đồng ý với Giấy phép
- Làm theo phần còn lại của lời nhắc
- Chương trình bây giờ sẽ được cài đặt!
(Nhớ xem ảnh chụp màn hình nếu bạn bị lạc)
5. Cài đặt trên Mac
- Nhấp vào tệp đã tải xuống
- Chọn "Mở"
- Chương trình sẽ tự động cài đặt và chạy!
(Hãy nhớ xem ảnh chụp màn hình nếu bạn thấy nhầm lẫn)
6. Đó là Nó
Và bạn đã hoàn thành! Bây giờ bạn đã tải xuống Arduino IDE vào hệ thống của mình!
Bước 4: Mã
Bước này là tất cả về mã. Đây là một chương trình khá ngắn, vì vậy tôi sẽ cùng bạn xem qua nó và giải thích cách hoạt động của nó. Đầu tiên, tổng quan ngắn gọn, sau đó là giải thích chuyên sâu và cuối cùng là cách đẩy nó lên Arduino!
Tổng quan ngắn gọn
Đối với những người bạn không quan tâm đến giải thích chi tiết về mã, tôi đang cung cấp phân đoạn TL; DR! Đây là lời giải thích cơ bản. Arduino lấy các giá trị từ cảm biến độ ẩm vài giây một lần. Thông tin này sau đó được sử dụng để tính toán và hiển thị một khuôn mặt nhất định! Ngoài ra còn có một đoạn mã ở cuối cho phép nút cảm ứng điện dung bật và tắt màn hình. Khá đơn giản phải không?
Nitty Gritty
Phần này của hướng dẫn dành cho những người rất quan tâm đến cách toàn bộ chương trình hoạt động, từng dòng một. Tôi sẽ cung cấp ảnh chụp màn hình ở trên để giúp bạn hiểu những gì tôi đang nói, cũng như bao gồm một số dòng mã trong mô tả này.
Chương trình này được chia thành năm phần:
- Bao gồm Thư viện và Tạo các biến
- Chức năng thiết lập
- Chức năng cho các biểu hiện trên khuôn mặt
- Viết Arduino trên chức năng ma trận
- Chức năng vòng lặp
Bao gồm Thư viện và Tạo các Biến:
Phần đầu tiên của đoạn mã này là tất cả về các biến và thư viện mà chúng ta sẽ sử dụng.
#include "LedControlMS.h"
#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool started = false; bool on = true; boolean được ép = LOW;
Dòng đầu tiên bao gồm một thư viện có tên là LedControlMS. Thư viện này được yêu cầu để có thể gửi các giá trị đến màn hình LED. Dòng tiếp theo là câu lệnh xác định đặt chân cho cảm biến cảm ứng thành 7. Sau đó, chúng ta có ba biến khác xác định chân cho màn hình LED, cảm biến độ ẩm và giá trị của nó. Ba dòng cuối cùng đều là boolean điều chỉnh trạng thái của nút cảm ứng và màn hình. Sau đó, chúng tôi có các giá trị byte của chúng tôi:
byte smile [4] = {B00000100, B00110010, B01100100, B01100000}; byte bất ngờ [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte sad [4] = {B00000010, B01100100, B00110010, B00110000}; byte chết [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; lỗi byte [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // byte esmile của Mặt ác [4] = {B00000010, B00101010, B01000100, B01000000}; byte elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; byte eplain [4] = {B00000010, B00101010, B00100100, B00100000}; byte eyell [4] = {B00000001, B01101001, B01100010, B01100000}; byte etalk [4] = {B00000001, B00101001, B01100010, B01100000};
Các giá trị này đại diện cho tất cả các mặt của APEX. Mỗi byte là một mảng chứa nhiều bit chỉ định trạng thái của mỗi pixel trong một hàng nhất định. "1" và "0" đại diện cho Bật / Tắt tương ứng.
Chức năng thiết lập:
Chuyển sang phần tiếp theo, chúng ta có chức năng thiết lập.
void setup () {// MS Serial Output Serial.begin (9600);
pinMode (TouchSensor, INPUT);
// Thiết lập ma trận LED lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }
Tên giải thích nó rất tốt. Đây là nơi chúng tôi "thiết lập" cảm biến và màn hình cảm ứng của mình. Hai dòng đầu tiên bắt đầu đầu ra nối tiếp của chúng tôi (được sử dụng để gỡ lỗi). Dòng thứ ba đặt chân cảm biến chạm vào một đầu vào và bốn dòng cuối cùng sẽ khởi động màn hình.
Chức năng cho các biểu hiện trên khuôn mặt:
Đây có lẽ là phần dài nhất so với tất cả, nhưng tất cả đều rất đơn giản và lặp đi lặp lại.
void break () {lc.setRow (0, 0, error [0]); lc.setRow (0, 1, error [1]); lc.setRow (0, 2, error [2]); lc.setRow (0, 3, lỗi [3]); lc.setRow (0, 4, error [4]); lc.setRow (0, 5, lỗi [5]); lc.setRow (0, 6, lỗi [6]); lc.setRow (0, 7, lỗi [7]); }
void happy () {
lc.setRow (0, 0, smile [0]); lc.setRow (0, 1, smile [1]); lc.setRow (0, 2, smile [2]); lc.setRow (0, 3, smile [3]); lc.setRow (0, 4, smile [3]); lc.setRow (0, 5, smile [2]); lc.setRow (0, 6, smile [1]); lc.setRow (0, 7, smile [0]); }
void trơn () {
lc.setRow (0, 0, meh [0]); lc.setRow (0, 1, meh [1]); lc.setRow (0, 2, meh [2]); lc.setRow (0, 3, meh [3]); lc.setRow (0, 4, meh [3]); lc.setRow (0, 5, meh [2]); lc.setRow (0, 6, meh [1]); lc.setRow (0, 7, meh [0]); }
void ngạc nhiên () {
lc.setRow (0, 0, bất ngờ [0]); lc.setRow (0, 1, bất ngờ [1]); lc.setRow (0, 2, bất ngờ [2]); lc.setRow (0, 3, bất ngờ [3]); lc.setRow (0, 4, bất ngờ [3]); lc.setRow (0, 5, ngạc nhiên [2]); lc.setRow (0, 6, bất ngờ [1]); lc.setRow (0, 7, bất ngờ [0]); }
vô hiệu chết () {
lc.setRow (0, 0, dead [0]); lc.setRow (0, 1, dead [1]); lc.setRow (0, 2, dead [2]); lc.setRow (0, 3, dead [3]); lc.setRow (0, 4, dead [4]); lc.setRow (0, 5, dead [5]); lc.setRow (0, 6, dead [1]); lc.setRow (0, 7, dead [0]); }
vô hiệu khóc () {
lc.setRow (0, 0, sad [0]); lc.setRow (0, 1, sad [1]); lc.setRow (0, 2, sad [2]); lc.setRow (0, 3, sad [3]); lc.setRow (0, 4, sad [3]); lc.setRow (0, 5, sad [2]); lc.setRow (0, 6, sad [1]); lc.setRow (0, 7, sad [0]); }
void evilmile () {
lc.setRow (0, 0, esmile [0]); lc.setRow (0, 1, esmile [1]); lc.setRow (0, 2, esmile [2]); lc.setRow (0, 3, esmile [3]); lc.setRow (0, 4, esmile [3]); lc.setRow (0, 5, esmile [2]); lc.setRow (0, 6, esmile [1]); lc.setRow (0, 7, esmile [0]); }
void evillaugh () {
lc.setRow (0, 0, elaugh [0]); lc.setRow (0, 1, elaugh [1]); lc.setRow (0, 2, elaugh [2]); lc.setRow (0, 3, elaugh [3]); lc.setRow (0, 4, elaugh [3]); lc.setRow (0, 5, elaugh [2]); lc.setRow (0, 6, elaugh [1]); lc.setRow (0, 7, elaugh [0]); }
void evilplain () {
lc.setRow (0, 0, eplain [0]); lc.setRow (0, 1, eplain [1]); lc.setRow (0, 2, eplain [2]); lc.setRow (0, 3, eplain [3]); lc.setRow (0, 4, eplain [3]); lc.setRow (0, 5, eplain [2]); lc.setRow (0, 6, eplain [1]); lc.setRow (0, 7, eplain [0]); }
void evilyell () {
lc.setRow (0, 0, eyell [0]); lc.setRow (0, 1, eyell [1]); lc.setRow (0, 2, eyell [2]); lc.setRow (0, 3, mắt kính [3]); lc.setRow (0, 4, eyell [3]); lc.setRow (0, 5, eyell [2]); lc.setRow (0, 6, eyell [1]); lc.setRow (0, 7, eyell [0]); }
void eviltalk () {
lc.setRow (0, 0, etalk [0]); lc.setRow (0, 1, etalk [1]); lc.setRow (0, 2, etalk [2]); lc.setRow (0, 3, etalk [3]); lc.setRow (0, 4, etalk [3]); lc.setRow (0, 5, etalk [2]); lc.setRow (0, 6, etalk [1]); lc.setRow (0, 7, etalk [0]); }
Các hàm này được sử dụng để xác định từng biểu hiện trên khuôn mặt bằng cách sử dụng các giá trị byte của chúng tôi từ phần đầu tiên. Mỗi dòng xác định một vị trí x và các giá trị byte, sau đó áp dụng các giá trị cho cột đó. Một số hàm yêu cầu nhiều dòng hơn vì có nhiều hàng hơn được sử dụng để hiển thị các giá trị của mặt đó. Mỗi khuôn mặt đều đối xứng, đó là lý do tại sao chúng ta lặp lại các đường nét.
Hàm WriteArduinoOnMatrix:
Phần thứ tư được sử dụng để tính toán và viết các mặt thích hợp trên màn hình LED. Nó bao gồm một loạt các câu lệnh else if để kiểm tra các giá trị nước và sau đó thiết lập hiển thị bằng cách gọi các chức năng khác nhau từ phần trước.
void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {ngạc nhiên (); } else {bị hỏng (); }}
Bạn có thể nhận thấy rằng chúng tôi đã thêm các mặt "bị hỏng" chỉ trong trường hợp cảm biến đi ra ngoài phạm vi hoạt động. Điều này ngăn chặn một số lỗi null kỳ lạ xảy ra và cho chúng ta hiểu rõ hơn về những gì đang diễn ra trong mã.
Chức năng vòng lặp:
Cuối cùng nhưng không kém phần quan trọng là hàm lặp. Mã này thực hiện chính xác những gì tên của nó nói, nó lặp lại! Mặc dù có khá nhiều dòng trong hàm này, nhưng nó thực sự khá đơn giản. Đầu tiên, mã đọc trạng thái nút và xem màn hình có "Bật" hay không. Nếu nó thấy điều này là đúng, nó sẽ gọi hàm WriteArduinoOnMatrix, sau đó sẽ vẽ một khuôn mặt trên APEX. Bởi vì chức năng này lặp lại, nó sẽ cập nhật hiển thị thường xuyên như chúng ta muốn. Độ trễ này được quy định bởi biến thời gian trễ.
void loop () {if (started == true) {delaytime = 3000; } // Đã nhấn nút Đọc = digitalRead (TouchSensor);
if (nhấn) {
if (on == true) {lc.clearDisplay (0); on = false; sự chậm trễ (delaytime); } else {on = true; sự chậm trễ (delaytime); }} sensorValue = analogRead (sensorPin); sự chậm trễ (delaytime); if (on == true) {// Vẽ Mặt writeArduinoOnMatrix (); }
bắt đầu = true;
}
Đó là tất cả những gì liên quan đến mã. Hy vọng rằng bây giờ bạn đã hiểu rõ hơn về cách tất cả hoạt động và có thể sử dụng kiến thức này để bắt đầu tùy chỉnh nó cho dự án của bạn!
Đẩy mã vào Arduino
Bây giờ chúng ta đã bao gồm tất cả các mã, đã đến lúc chuyển nó sang Arduino! May mắn thay, IDE làm cho điều này rất đơn giản. Tất cả những gì bạn phải làm là cắm Arduino vào máy tính bằng cáp USB, sau đó chỉ cần nhấp vào mũi tên phải ở trên cùng bên trái của IDE. Hãy để mã đẩy và bạn sẽ thấy thông báo thành công ở cuối chương trình nếu bạn làm đúng!
Bước 5: Sơ đồ mạch
Tương tự như mã, sơ đồ mạch không quá phức tạp. Nó chỉ bao gồm ba cảm biến và Arduino, vì vậy tôi sẽ cho bạn biết sơ đồ chân của từng cảm biến và nếu bạn cần bất kỳ trợ giúp nào khác, chỉ cần tham khảo sơ đồ ở trên.
Màn hình LED:
- VCC -> 5V
- GRD -> GRD
- DIN -> Pin 12
- CS -> Pin 10
- CLK -> Pin 11
Cảm biến độ ẩm:
- Tích cực -> 5V
- Phủ định -> GRD
- Tín hiệu -> A5
Cảm biến cảm ứng điện dung:
- VCC -> 5V
- GRD -> GRD
- SIG -> 7
Không quá khó đúng không? Nếu bạn gặp bất kỳ sự cố nào với chốt ra này, hãy tham khảo video bên dưới, nơi tôi hướng dẫn bạn cách nối dây.
Bước 6: Kết hợp tất cả lại với nhau
Thật khó để giải thích bằng văn bản làm thế nào nó phù hợp với nhau, vì vậy tôi chắc chắn khuyên bạn nên xem video cho phần này. Tôi thực sự sẽ không giải thích chính xác cách tôi đặt chúng lại với nhau, nó quá khó. Nhưng để giải thích mọi thứ một cách mơ hồ, tôi hàn các kết nối dây và quấn chúng quanh mặt sau của bảng. Sau đó, tôi định vị các cảm biến và sử dụng băng dính điện để giữ tất cả lại với nhau. Cuối cùng, tôi đã thử nghiệm nó với pin 9V, và sau đó khi tôi biết nó hoạt động, hãy đặt pin ở mặt sau và dán vào luôn. Như tôi đã nói trước đây, HÃY KIỂM TRA VIDEO Ở BƯỚC NÀY, nó có một đoạn hàn nhỏ rất đẹp được tăng tốc và sẽ giúp bạn quấn dây một cách chính xác. Vui lòng tạm dừng hoặc phát ở tốc độ một nửa nếu bạn bị lạc.
Xin chúc mừng! Nếu tất cả đều thành công, bây giờ bạn sẽ có một đơn vị APEX đầy đủ chức năng!
Để kiểm tra thiết bị của bạn, hãy tìm một cây được tưới nước và cắm nó vào! Bạn sẽ thấy rằng nó hạnh phúc hoặc ngạc nhiên và điều này có nghĩa là nó sẽ hoạt động !!! Công việc tuyệt vời cho việc hoàn thành dự án!
Bước 7: Kết luận
Và đó là toàn bộ có thể hướng dẫn! Cảm ơn bạn đã kiểm tra dự án! Hãy để lại bất kỳ câu hỏi và nhận xét nào ở bên dưới và nhớ theo dõi Urban Farming Guys để biết thêm các hướng dẫn thú vị như thế này! Chúng tôi rất muốn nghe về cách xây dựng APEX của bạn và hình ảnh được đánh giá cao! Cảm ơn một lần nữa vì đã ghé qua, chúc một ngày tốt lành!
(Có thể giảng dạy này được lấy cảm hứng từ một dự án cũ hơn, Plant Emoji!)
P. S. Có thể hướng dẫn này được tham gia cuộc thi Vi điều khiển, vì vậy đừng quên bình chọn cho chúng tôi! Chúng tôi đánh giá rất cao nó:)
P. P. S. Hãy tải APEX trong Make Magazine! Bỏ phiếu ở đây ! Cảm ơn:)
Đề xuất:
Trí tuệ nhân tạo và nhận dạng hình ảnh bằng HuskyLens: 6 bước (có hình ảnh)
Trí tuệ nhân tạo và nhận dạng hình ảnh sử dụng HuskyLens: Này, có chuyện gì vậy, các bạn! Akarsh ở đây từ CETech.Trong dự án này, chúng ta sẽ xem xét các HuskyLens từ DFRobot. Đây là một mô-đun máy ảnh được hỗ trợ bởi AI có khả năng thực hiện một số hoạt động Trí tuệ nhân tạo như Face Recognitio
Xúc xắc điện tử - Arduino Die / xúc xắc 1 đến 6 Xúc xắc + D4, D5, D8, D10, D12, D20, D24 và D30: 6 bước (có Hình ảnh)
Xúc xắc điện tử - Arduino Die / xúc xắc 1 đến 6 Xúc xắc + D4, D5, D8, D10, D12, D20, D24 và D30: Đây là một dự án arduino đơn giản để tạo ra một con xúc xắc điện tử. Có thể chọn cho 1 đến 6 viên xúc xắc hoặc 1 trong 8 viên xúc xắc đặc biệt. Lựa chọn được thực hiện đơn giản bằng cách xoay một bộ mã hóa quay. Đây là các tính năng: 1 xúc xắc: hiển thị các chấm lớn 2-6 xúc xắc: hiển thị các chấm
Cách tạo nhân vật 2d với bộ điều khiển nhân vật trong Unreal Engine 4 bằng Visual Script cho PC: 11 bước
Cách tạo nhân vật 2d với bộ điều khiển ký tự trong Unreal Engine 4 Sử dụng Visual Script cho PC: Cách tạo nhân vật 2d với bộ điều khiển nhân vật trong Unreal engine 4 sử dụng tập lệnh trực quan cho PC Xin chào, tôi là Jordan Steltz. Tôi đã phát triển trò chơi điện tử từ năm 15 tuổi. Hướng dẫn này sẽ dạy bạn cách tạo một nhân vật cơ bản với
Làm thế nào để thực hiện một công tắc cảm ứng bằng cách sử dụng một Mosfet: 4 bước (có hình ảnh)
Cách tạo công tắc cảm ứng bằng cách sử dụng một Mosfet: CÁCH tạo công tắc cảm ứng bằng cách sử dụng chỉ một công tắc cảm ứng. chuyển đổi bình thường với h
Làm thế nào để tải nhạc từ trang web ALMOST BẤT KỲ (Haha) (Miễn là bạn có thể nghe được thì bạn có thể nhận được nó Được thôi nếu nó được nhúng vào Flash mà bạn có thể không có khả năng) EDITED !!!!! Thông tin thêm: 4 bước
Làm thế nào để tải nhạc từ trang web ALMOST BẤT KỲ (Haha) (Miễn là bạn có thể nghe nó thì bạn có thể nhận được nó … Được thôi nếu nó được nhúng vào Flash mà bạn có thể không có khả năng) EDITED !!!!! Thông tin bổ sung: nếu bạn đã từng truy cập vào một trang web và nó phát một bài hát mà bạn thích và muốn nó thì đây là hướng dẫn cho bạn, không phải lỗi của tôi nếu bạn làm hỏng thứ gì đó (chỉ có cách là nếu bạn bắt đầu xóa nội dung mà không có lý do ) tôi đã có thể tải nhạc cho