第1步:簡(jiǎn)介
什么是APEX?
APEX是一款智能(更不用說(shuō)可愛(ài))工廠監(jiān)控設(shè)備。只需將其插入任何工廠即可顯示工廠的“幸福”級(jí)別!如果您有一種忘記給它們澆水的壞習(xí)慣,這是一個(gè)很好的提醒。
它是如何運(yùn)作的?
魔術(shù)。開(kāi)玩笑! APEX使用連接到濕度傳感器的Arduino,將其插入植物的土壤中。該傳感器將讀取土壤的水分含量,然后Arduino計(jì)算要顯示的面部。
但為什么?
為什么不呢?
第2步:收集零件和工具
讓我們進(jìn)入吧!對(duì)于這個(gè)Instructable,您將需要相當(dāng)多的零件和工具。幸運(yùn)的是,它們都列在下面:
根據(jù)微控制器競(jìng)賽的精神,這個(gè)項(xiàng)目完全由在亞馬遜上購(gòu)買的部件制成! (未贊助)
零件清單:
Arduino Uno
8x8 LED顯示屏
電容式觸摸傳感器
濕度傳感器
9V電池連接器
9V電池
工具列表:
22 Gauge Wire
電工膠帶
剝線鉗
焊接熨斗
拆焊泵
收集完所有必要的設(shè)備后,是時(shí)候設(shè)置了Arduino軟件!
第3步:安裝Arduino IDE
為了使這個(gè)項(xiàng)目起作用,我們需要能夠?qū)rduino進(jìn)行編程。這需要將Arduino集成開(kāi)發(fā)環(huán)境(IDE)下載并安裝到您的計(jì)算機(jī)上。這是一個(gè)相當(dāng)簡(jiǎn)單的解釋,但我將引導(dǎo)您完成整個(gè)過(guò)程:
1。訪問(wèn)Arduino網(wǎng)站
2。導(dǎo)航到下載頁(yè)面(軟件》下載)
第3。單擊操作系統(tǒng)的下載鏈接
側(cè)注意:該程序適用于Windows,Mac和Linux。
的 4。在Windows上安裝
雙擊下載的文件進(jìn)行運(yùn)行
點(diǎn)擊“同意“同意許可
按照提示的其余部分
現(xiàn)在應(yīng)該安裝該程序!
(如果迷路,請(qǐng)務(wù)必查看截圖)
5。在Mac上安裝
單擊下載的文件
選擇“打開(kāi)”
程序?qū)⒆詣?dòng)安裝并運(yùn)行!
(如果您感到困惑,請(qǐng)務(wù)必查看截圖)
6。就是這樣!
你已經(jīng)完成了!您現(xiàn)在已將Arduino IDE下載到您的系統(tǒng)中!
第4步:代碼
此步驟完全是關(guān)于代碼。這是一個(gè)相當(dāng)短的程序,所以我將與你一起討論并解釋它是如何工作的。首先,簡(jiǎn)要概述,然后是深入解釋,最后是如何將其推送到Arduino!
簡(jiǎn)要概述
對(duì)于那些你對(duì)代碼的詳細(xì)解釋不感興趣,我提供TL; DR段!這是基本的解釋。 Arduino每隔幾秒就從濕度傳感器中獲取值。然后,此信息用于計(jì)算和顯示某個(gè)面部!最后還有一些代碼,讓電容式觸摸按鈕打開(kāi)和關(guān)閉顯示屏。非常簡(jiǎn)單吧?
The Nitty Gritty
這部分教程適合那些對(duì)整個(gè)程序如何工作非常感興趣的人,一行一行。我將提供上面的截圖,以幫助您理解我正在談?wù)摰膬?nèi)容,并在此說(shuō)明中包含一些代碼行。
此程序分為五個(gè)部分:
包括庫(kù)和創(chuàng)建變量
設(shè)置功能
面部表情的功能
在矩陣函數(shù)上寫(xiě)Arduino
循環(huán)函數(shù)
包括庫(kù)和創(chuàng)建變量:
此代碼的第一部分是關(guān)于我們將使用的變量和庫(kù)。
#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 pressed = LOW;
第一行包含一個(gè)名為L(zhǎng)edControlMS的庫(kù)。該庫(kù)需要能夠向LED顯示器發(fā)送值。下一行是一個(gè)define語(yǔ)句,用于將觸摸傳感器的引腳設(shè)置為7.之后,我們還有三個(gè)變量,用于定義LED顯示屏的引腳,濕度傳感器及其值。最后三行是所有布爾值,用于調(diào)節(jié)觸摸按鈕和顯示屏的狀態(tài)。在此之后,我們有字節(jié)值:
byte smile[4]={B00000100,B00110010,B01100100,B01100000};
byte surprise[4]={B00001110,B00001010,B01101110,B10010000};
byte meh[4]={B00000100,B00100100,B00100100,B00100000};
byte sad[4]={B00000010,B01100100,B00110010,B00110000};
byte dead[6]={B00001010,B00100100,B00101010,B00100000,B01100000,B01101010};
byte error[8]={B00111100,B01000010,B10100001,B10010001,B10001001,B10000101,B01000010,B00111100};
//Evil Faces
byte esmile[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};
這些值代表APEX的所有面。每個(gè)字節(jié)是一個(gè)數(shù)組,其中包含多個(gè)位,用于指示給定行中每個(gè)像素的狀態(tài)。 “1”和“0”分別表示開(kāi)/關(guān)。
設(shè)置功能:
轉(zhuǎn)到下一部分,我們有設(shè)置功能。
void setup() {
//MS Serial Output
Serial.begin(9600);
pinMode(TouchSensor, INPUT);
//LED Matrix Setup
lc.shutdown(0,false);
lc.setIntensity(0,4);
lc.clearDisplay(0);
}
這個(gè)名字很好地解釋了它。這是我們“設(shè)置”我們的觸摸傳感器和顯示器的地方。前兩行開(kāi)始我們的串行輸出(用于調(diào)試)。第三行將觸摸傳感器引腳設(shè)置為輸入,最后四行啟動(dòng)顯示。
面部表情的功能:
這可能是最長(zhǎng)的部分,但它都非常簡(jiǎn)單和重復(fù)。
void broken() {
lc.setRow(0,0,error[0]);
lc.setRow(0,1,error[1]);
lc.setRow(0,2,error[2]);
lc.setRow(0,3,error[3]);
lc.setRow(0,4,error[4]);
lc.setRow(0,5,error[5]);
lc.setRow(0,6,error[6]);
lc.setRow(0,7,error[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 plain() {
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 surprised(){
lc.setRow(0,0,surprise[0]);
lc.setRow(0,1,surprise[1]);
lc.setRow(0,2,surprise[2]);
lc.setRow(0,3,surprise[3]);
lc.setRow(0,4,surprise[3]);
lc.setRow(0,5,surprise[2]);
lc.setRow(0,6,surprise[1]);
lc.setRow(0,7,surprise[0]);
}
void dying() {
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]);
}
void crying() {
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 evilsmile() {
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,eyell[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]);
}
這些函數(shù)用于使用第一部分中的字節(jié)值定義每個(gè)面部表情。每行定義 x 位置和字節(jié)值,然后將值應(yīng)用于該列。某些函數(shù)需要更多行,因?yàn)橛懈嘈杏糜陲@示該面的值。每個(gè)面都是對(duì)稱的,這就是我們重復(fù)這些線條的原因。
WriteArduinoOnMatrix功能:
第四部分用于計(jì)算和寫(xiě)入LED顯示屏上的正確面。它由一系列if語(yǔ)句組成,用于檢查水值,然后通過(guò)調(diào)用上一節(jié)中的不同函數(shù)來(lái)設(shè)置顯示。
void writeArduinoOnMatrix() {
if(sensorValue 》 0 && sensorValue 《= 30) {
broken();
} else if(sensorValue 》 30 && sensorValue 《= 100){
dying();
} else if (sensorValue 》 100 && sensorValue 《= 200) {
crying();
} else if (sensorValue 》 200 && sensorValue 《= 400) {
plain();
} else if (sensorValue 》 400 && sensorValue 《= 650) {
happy();
} else if (sensorValue 》 650 && sensorValue 《= 800) {
surprised();
} else {
broken();
}
}
您可能會(huì)注意到,為了防止傳感器超出工作范圍,我們添加了“破損”面。這可以防止發(fā)生一些奇怪的空錯(cuò)誤,并讓我們更好地直觀地了解代碼中發(fā)生的事情。
循環(huán)函數(shù):
最后但并非最不重要的是循環(huán)函數(shù)。這段代碼正是它的名字所說(shuō)的,它循環(huán)!雖然這個(gè)函數(shù)有很多行,但它實(shí)際上相當(dāng)簡(jiǎn)單。代碼首先讀取按鈕狀態(tài)并查看顯示是否為“On”。如果它發(fā)現(xiàn)這是真的,它將調(diào)用 WriteArduinoOnMatrix 函數(shù),然后在APEX上繪制一個(gè)面。由于此函數(shù)循環(huán),它將根據(jù)需要隨時(shí)更新顯示。此延遲由 delaytime 變量決定。
void loop() {
if (started == true){
delaytime = 3000;
}
//Read Button
pressed = digitalRead(TouchSensor);
if (pressed) {
if (on == true) {
lc.clearDisplay(0);
on = false;
delay(delaytime);
} else {
on = true;
delay(delaytime);
}
}
sensorValue = analogRead(sensorPin);
delay(delaytime);
if (on == true) {
//Draw Faces
writeArduinoOnMatrix();
}
started = true;
}
這就是代碼的全部?jī)?nèi)容。希望現(xiàn)在你能更好地理解它是如何工作的,并且可以利用這些知識(shí)開(kāi)始為你的項(xiàng)目定制它!
將代碼推送到Arduino
現(xiàn)在我們已經(jīng)涵蓋了所有代碼,是時(shí)候把它推到Arduino了!幸運(yùn)的是,IDE使這非常簡(jiǎn)單。您只需使用USB線將Arduino插入計(jì)算機(jī),然后只需單擊IDE左上角的右箭頭即可。讓代碼推送,如果你做得對(duì),你應(yīng)該在程序底部看到成功消息!
步驟5:電路圖
與代碼類似,電路圖并不太復(fù)雜。它只包含三個(gè)傳感器和Arduino,所以我會(huì)告訴你每個(gè)傳感器的引腳,如果你需要任何其他幫助,請(qǐng)參考上圖。
LED顯示屏:
VCC - 》 5V
GRD - 》 GRD
DIN - 》 Pin 12
CS - 》引腳10
CLK - 》引腳11
濕度傳感器:
正面 - 》 5V
負(fù)面 - 》 GRD
信號(hào) - 》 A5
電容觸摸傳感器:
VCC - 》 5V
GRD - 》 GRD
SIG - 》 7
不太難,對(duì)吧?如果你對(duì)這個(gè)引腳有任何問(wèn)題,請(qǐng)務(wù)必參考下面的視頻,我將指導(dǎo)你如何連線。
第6步:全部放在一起
這是很難解釋文本如何適合所有,所以我肯定建議查看這部分的視頻。我實(shí)際上并沒(méi)有準(zhǔn)確地解釋我是如何把我放在一起的,這太難了。但為了模糊地解釋事情,我在電線連接上焊接并將它們包裹在電路板背面。然后我放置傳感器并使用電工膠帶將它們固定在一起。最后,我用9V電池對(duì)它進(jìn)行了測(cè)試,然后一旦我知道它有效,就將電池放在背面并將其粘貼在上面。就像我之前說(shuō)過(guò)的那樣,檢查這個(gè)步驟的視頻,它有一個(gè)很好的小焊接部分,它可以幫助你正確地包裹電線。如果迷路,請(qǐng)隨意暫停或以半速播放。
恭喜! 如果一切順利,您現(xiàn)在應(yīng)該擁有一個(gè)功能齊全的APEX單元!
測(cè)試您的設(shè)備,找到澆灌的植物并插上它!您應(yīng)該發(fā)現(xiàn)它既快樂(lè)又感到驚訝,這意味著它應(yīng)該正常工作!完成項(xiàng)目的好工作!
-
傳感器
+關(guān)注
關(guān)注
2563文章
52575瀏覽量
763733 -
Arduino
+關(guān)注
關(guān)注
188文章
6492瀏覽量
190103
發(fā)布評(píng)論請(qǐng)先 登錄
如何實(shí)現(xiàn)光伏數(shù)字孿生可視化?

VirtualLab Fusion應(yīng)用:3D系統(tǒng)可視化
可視化組態(tài)物聯(lián)網(wǎng)平臺(tái)是什么
VirtualLab Fusion中的可視化設(shè)置
VirtualLab Fusion應(yīng)用:光波導(dǎo)k域布局可視化(“神奇的圓環(huán)”)
七款經(jīng)久不衰的數(shù)據(jù)可視化工具!
光學(xué)系統(tǒng)的3D可視化
什么是大屏數(shù)據(jù)可視化?特點(diǎn)有哪些?
智慧能源可視化監(jiān)管平臺(tái)——助力可視化能源數(shù)據(jù)管理

智慧樓宇可視化的優(yōu)點(diǎn)
智慧地鐵站可視化建設(shè)的意義
大屏數(shù)據(jù)可視化 開(kāi)源

如何實(shí)現(xiàn)園區(qū)大屏可視化?

三維可視化系統(tǒng)平臺(tái)介紹及優(yōu)勢(shì)

評(píng)論