// Include the required libraries.
#include <SPI.h>
#include <Seeed_FS.h>
#include "TFT_eSPI.h"
#include "SD/Seeed_SD.h"
#include "RawImage.h"
// Define the TFT screen:
TFT_eSPI tft;
// Define the sprite settings:
TFT_eSprite spr = TFT_eSprite(&tft);
// Define the sensor voltage (signal) pins:
#define GSR A0
#define EMG A2
int gsr_value , emg_value ;
// Define the data holders.
uint32_t background_color = tft.color565(0, 0, 0);
uint32_t text_color = tft.color565(174, 255, 205);
void setup() {
Serial.begin(115200);
// Check the connection status between Wio Terminal and the SD card.
if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) while (1);
// Initiate the TFT screen:
tft.begin();
tft.setRotation(3);
tft.fillScreen(background_color);
tft.setTextColor(text_color);
tft.setTextSize(2);
// Create the sprite.
spr.createSprite(TFT_HEIGHT / 2, TFT_WIDTH);
spr.setTextSize(3);
drawImage<uint16_t>("cave.bmp", TFT_HEIGHT / 2, TFT_WIDTH - 200);
}
void loop() {
// Obtain current measurements generated by the GSR sensor and the EMG sensor.
get_GSR_data(3);
get_EMG_data();
// Initialize the sprite.
spr.drawString("gsr:= ", 10, 10);
spr.drawString("(finger) ", 10, 40);
spr.drawString(String(gsr_value), 10, 70);
spr.drawString("emg:= ", 10, 100);
spr.drawString("(arm)", 10, 130);
spr.drawString(String(emg_value), 10, 160);
spr.pushSprite(0, 0);
delay(50);
spr.fillSprite(background_color);
}
void get_GSR_data(int calibration) {
long sum = 0;
// Calculate the average of the last ten GSR sensor measurements to remove the glitch.
for (int i = 0; i < 10; i++) {
sum += analogRead(GSR);
delay(5);
}
gsr_value = (sum / 10) - calibration;
Serial.print("GSR Value => "); Serial.println(gsr_value);
}
void get_EMG_data() {
long sum = 0;
// Evaluate the summation of the last 32 EMG sensor measurements.
for (int i = 0; i < 32; i++) {
sum += analogRead(EMG);
}
// Shift the summation by five with the right shift operator (>>) to obtain the EMG value.
emg_value = sum >> 5;
Serial.print("EMG Value => ");
Serial.println(emg_value);
Serial.println();
delay(10);
}
最近筆者拿到VIA Pixetto視覺感測器(以下通稱Pixetto),這個功能完整、1080P FULL HD 的AI鏡頭,除了本身可以辨識顏色、人臉、形狀及手寫辨識…..等等的視覺辨識,還可以搭配 Tensorflow Lite 框架來做更進一步的應用,如果透過 Grove 接頭或正確接線的話,當然也可以和Arduino 這種開發板來溝通。不管是第一次踏入機器學習的初學者,或想要做進階的視覺辨識專案的創作者,我認為Pixetto都顧及到了,可謂是面面俱到!
Google Teachable Machine 的專案檔,副檔名是 tm。當讀者四種類別收集完資料後,若日後想再新增類別,可不必從頭再做一次,只需要按下Download project as file,即可將目前收集資料的進度保存至電腦;日後使用相同帳號,點選Open project from file 就能從上次進度繼續。
由此可知,不論是使用 Pixetto 的積木介面或是 HanGeekduino 的 Arduino IDE ,兩種介面皆可達成本文的效果,,就看使用者對哪種介面比較習慣。若讀者是剛接觸 VIA Pixetto 就直接作這個專題的話,還是有一些地方要注意才能順利完成。接下來就來跟各位分享需要注意的事項,分成 VIA Pixetto韌體更新、訓練人臉模板、下載威盛Pixetto的積木介面和撰寫Pixetto積木程式 等四個段落。
VIA Pixetto韌體更新
步驟1. 到VIA Pixetto 開發者網站下載 Pixetto Utility v1.6.2
請由 VIA Pixetto 開發者網站 下載 Pixetto Utility 軟體或點我直接下載。
步驟2. 解壓縮開啟執行檔
步驟3. 更新VIA Pixetto韌體
一切順利的話,請用 usb 傳輸線將 VIA Pixetto 連接到電腦,Pixetto Utility 就會顯示攝影機畫面,並會跳出新版本可用的提示視窗,點選確認。更新成功之前請勿拔除 usb 傳輸線。
若想透過HanGeekduino的Arduno IDE來燒錄程式到Arduino的話,就會有匯入Pixetto函式庫版本的問題,必須搭配VIA Pixetto的韌體版本1.6.2版,因此在進行本篇實作之前,建議先看過『VIA Pixetto X Arduino首次接觸就上手人臉辨識實作』技術文章,其中已經說明如何更新 VIA Pixetto 的韌體版本,本文就不再重複,以下就從匯入Pixetto 函式庫和 VIA Pixetto 顏色辨識來說明。
因著人工智慧物聯網(The Artificial Intelligence of Things ,AIOT)與工業物聯網(Industrial Internet of Things,IIOT)的應用快速發展,為了考量到物聯網的各個應用場景,和整體系統成本和效能,一直都是需考慮的重點,所以才有了各種嵌入式系統與微控器(MicroController Unit)之整合應用。本文將說明 ASUS Tinker 單板電腦與物聯網開發板的多種藍牙互動方式 (使用我們最熟悉的 LinkIt 7697)