資料介紹
描述
我記得有幾次我問過以下問題:如何在不使用任何機械按鈕的情況下在 Arduino 上創(chuàng)建菜單?在我的大多數(shù)項目中,我需要使用帶有菜單的 LCD 來讓用戶配置系統(tǒng)。然而,必須使用按鈕,隨著時間的推移,它們會磨損,很快就會出現(xiàn)一些問題。
此外,我喜歡做不同的項目。我想創(chuàng)造一些比在我的項目中使用幾個按鈕更具技術(shù)性和趣味性的東西。
經(jīng)過這么長時間的思考,我找到了APDS 9960 手勢傳感器,它讓我可以做一些有趣的事情,我想在這個項目中向你展示。它很簡單,但對于許多應(yīng)用程序來說功能強大。
使用這個傳感器,我能夠創(chuàng)建一個完全受控的菜單,其中包含用于負載控制的手勢:JLCPCB Gesture Control。
此外,您將學習:
- 手勢傳感器的工作原理;
- 如何在 LCD 上創(chuàng)建菜單;
- 如何操作手勢傳感器的控制功能。
現(xiàn)在,讓我們開始構(gòu)建我們的項目。
JLCPCB手勢控制
幾次我在 Arduino 上開發(fā)了 MENU,電路和代碼變得非常復雜。這是由于大量的按鈕和代碼控制系統(tǒng)。
為了避免這個問題,我決定使用這個手勢傳感器。它允許我只使用 2 條數(shù)據(jù)線并創(chuàng)建一個具有多個控制動作的更簡單的系統(tǒng)。

另外,看看代碼有多簡單。
#include "SoftwareSerial.h"
#include
#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;
LiquidCrystal_I2C lcd(0x27,16,2);
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
byte count = 2;
void setup()
{
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
for(byte i = 2; i <=4; i++)
{
pinMode(i, OUTPUT);
}
if(!apds.begin())
{
Serial.println("Falha ao inicializar o dispositivo. Verifique as conex?es!");
}
else
Serial.println("Dispositivo inicializado!");
apds.enableProximity(true);
apds.enableGesture(true);
show_menu(count);
}
void loop()
{
uint8_t gesture = apds.readGesture();
if(gesture == APDS9960_UP)
{
count++;
if(count > 4)
{
count = 4;
}
show_menu(count);
}
if(gesture == APDS9960_LEFT)
{
if(count == 2)
{
digitalWrite(2, LOW);
}
if(count == 3)
{
digitalWrite(3, LOW);
}
if(count == 4)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}
}
if(gesture == APDS9960_RIGHT)
{
if(count == 2)
{
digitalWrite(2, HIGH);
}
if(count == 3)
{
digitalWrite(3, HIGH);
}
if(count == 4)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
}
if(gesture == APDS9960_DOWN)
{
count--;
if(count < 2)
{
count = 2;
}
show_menu(count);
}
}
void show_menu(byte option)
{
if(option == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-> LED1");
lcd.setCursor(0,1);
lcd.print(" LED2");
return;
}
if(option == 3)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" LED1");
lcd.setCursor(0,1);
lcd.print("-> LED2");
return;
}
if(option == 4)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-> LED1 and LED2");
return;
}
return;
}
首先,我們聲明每個組件的庫,創(chuàng)建它的對象,最后,我們聲明項目中使用的變量。代碼部分如下所示。
#include "SoftwareSerial.h"
#include <LiquidCrystal_I2C.h>
#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;
LiquidCrystal_I2C lcd(0x27,16,2);
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
byte count = 2;
之后,我創(chuàng)建了 void setup 函數(shù)。必須對項目中使用的設(shè)備進行初始配置。
見下文,我開始了串行通信、I2C 通信和 LCD 操作。
此外,我通過循環(huán)將 LED 引腳配置為輸出。
void setup()
{
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
for(byte i = 2; i <=4; i++)
{
pinMode(i, OUTPUT);
}
if(!apds.begin())
{
Serial.println("Falha ao inicializar o dispositivo. Verifique as conex?es!");
}
else
Serial.println("Dispositivo inicializado!");
apds.enableProximity(true);
apds.enableGesture(true);
show_menu(count);
}
最后,您需要做一些非常重要的事情:測試手勢傳感器的功能。檢查它是否已正確初始化。
如果正確啟動,請將傳感器配置為在檢測到附近有物體時啟用手勢檢測模式。APDS-9960 傳感器如下圖所示。

這將在您將手指靠近模塊并移開時完成。使用最后兩行代碼執(zhí)行此配置過程。
之后,系統(tǒng)向用戶顯示帶有選項菜單的屏幕,如圖 2 所示。

在此之后,它準備進入循環(huán)功能。
無效循環(huán)功能和 APDS-9960 手勢傳感器
一切都發(fā)生在 void 循環(huán)函數(shù)中。這是我們項目的核心。下面給出了代碼 void 循環(huán)函數(shù)。
void loop()
{
uint8_t gesture = apds.readGesture();
if(gesture == APDS9960_UP)
{
count++;
if(count > 4)
{
count = 4;
}
show_menu(count);
}
if(gesture == APDS9960_LEFT)
{
if(count == 2)
{
digitalWrite(2, LOW);
}
if(count == 3)
{
digitalWrite(3, LOW);
}
if(count == 4)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}
}
if(gesture == APDS9960_RIGHT)
{
if(count == 2)
{
digitalWrite(2, HIGH);
}
if(count == 3)
{
digitalWrite(3, HIGH);
}
if(count == 4)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
}
if(gesture == APDS9960_DOWN)
{
count--;
if(count < 2)
{
count = 2;
}
show_menu(count);
}
}
上面開發(fā)的邏輯非常簡單。首先,系統(tǒng)使用下面的讀取功能讀取用戶執(zhí)行的手勢。
uint8_t gesture = apds.readGesture();
系統(tǒng)檢查 4 種類型的手勢:左、右、上或下。上下手勢用于在選項菜單中選擇負載
左手勢用于禁用加載,右手勢用于觸發(fā)加載,如上面的代碼所示。
每次用戶做出向上或向下手勢時,計數(shù)變量都會增加或減少。此變量的值用于向屏幕顯示選項并允許用戶瀏覽菜單。
基本上,對于每個計數(shù)值 2、3 和 4,我們有 3 個屏幕。
計數(shù)從值 2 開始,因為它是 LED 引腳的編號。請參見下面的示例。
if(gesture == APDS9960_UP)
{
count++;
if(count > 4)
{
count = 4;
}
show_menu(count);
}
if(gesture == APDS9960_DOWN)
{
count--;
if(count < 2)
{
count = 2;
}
show_menu(count);
}
向上手勢增加,向下手勢減小計數(shù)變量的值。這允許用戶瀏覽菜單,如圖 3 所示。

選擇選項后,用戶必須激活或停用 LED。為此,他必須使用向左(禁用)或向右(激活)的手勢。
如前所述,系統(tǒng)將使用計數(shù)器變量值來顯示屏幕并激活/禁用 LED。
if(gesture == APDS9960_LEFT)
{
if(count == 2)
{
digitalWrite(2, LOW);
}
if(count == 3)
{
digitalWrite(3, LOW);
}
if(count == 4)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}
}
if(gesture == APDS9960_RIGHT)
{
if(count == 2)
{
digitalWrite(2, HIGH);
}
if(count == 3)
{
digitalWrite(3, HIGH);
}
if(count == 4)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
}
除了控制 LED 和通過菜單導航的過程之外,我們還保留了一個特定主題來討論將在菜單中呈現(xiàn)的屏幕的創(chuàng)建。
在 16x2 LCD 顯示器上創(chuàng)建屏幕
為了向用戶展示導航屏幕,我們創(chuàng)建了一個名為 show_menu() 的函數(shù)。
void show_menu(byte option)
{
if(option == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-> LED1");
lcd.setCursor(0,1);
lcd.print(" LED2");
return;
}
if(option == 3)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" LED1");
lcd.setCursor(0,1);
lcd.print("-> LED2");
return;
}
if(option == 4)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-> LED1 and LED2");
return;
}
return;
}
為了向用戶展示導航屏幕,我們創(chuàng)建了一個名為 show_menu () 的函數(shù)。
此函數(shù)必須接收計數(shù)變量的值作為參數(shù)。收到值后,系統(tǒng)將與值 2、3 和 4 進行比較。每個值代表一個不同的選項。
- 如果值為 2,系統(tǒng)將在第一行打印帶有箭頭的選項 LED 1,在第二行打印 LED 2。
- 如果值為 3,系統(tǒng)將在第一行打印選項 LED 1,在第二行打印帶有箭頭的 LED 2。
- 最后,如果該值等于 4,系統(tǒng)將打印選項 LED 1 和 LED 2。
開發(fā)的系統(tǒng)很簡單,可用于使用 APDS-9960 手勢傳感器開發(fā)多種類型的菜單。
但是在完成這個項目之前,我開發(fā)了一個板子,它允許您使用手勢傳感器和一個控制菜單作為用戶界面來控制任何項目。
JLCPCB手勢控制印刷電路板
下圖中的這個印刷電路板是使用JLCPCB 軟件 - EasyEDA在幾分鐘內(nèi)開發(fā)出來的,通過這個電路板,您可以連接您的 LCD Display 16x2 及其傳感器。

在這個項目中,我決定為您的 Arduino Nano 的每個引腳放置螺釘連接器。
通過這些連接器,您可以連接任何類型的負載并使您的項目更加靈活,以方便與其他幾個項目的組裝。

從布局來看,PCB 是由 JLCPCB 公司開發(fā)的,價格為 2 美元,包含 10 個 PCB,通過此鏈接,您可以訪問文件以供下載。
最后,我們有如下所示的印刷電路板。

通過這個項目,您可以將您的 PCB 與組件組裝在一起,并使用手勢傳感器和帶有 Arduino Nano 的 16x2 液晶顯示器創(chuàng)建多個項目。
結(jié)論
該項目展示了用完全由手勢控制的控制界面取代機械按鈕的巨大成果。
此外,通過單個連接的傳感器,可以降低電路連接和編程的復雜性。可以控制 4 個控制命令。
該項目還使使用 JLCPCB 開發(fā)的印刷電路板成為可能。該PCB是通用的,即它可以應(yīng)用于任何項目,您可以使用螺絲端子使其適應(yīng)任何項目。
因此,我們感謝您的閱讀,并留下文件的訪問鏈接,以便您在 JLCPCB 獲得 10 塊印刷電路板。
?
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
- 如何在Arduino中使用APDS9960手势传感器0次下载
- 使用APDS9960和NodeMCU通过手势控制Chromecast1次下载
- APDS9960数据手册3次下载
- 基于APDS-9960的运动控制换色器1次下载
- 基于APDS-9960的手势控制锁0次下载
- 带有arduino的火焰传感器1次下载
- 带有arduino uno的超声波传感器0次下载
- 带有Arduino的停车传感器0次下载
- 使用手势传感器APDS9960进行距离接近测量2次下载
- 带有用于AGV的磁带传感器的Arduino接口1次下载
- 使用Arduino Leonardo和红外传感器制作手势控制设备0次下载
- pi4j-device-APDS9960 Java版手势传感器数据获取0次下载
- 基于Kinect传感器的动态手势识别方法20次下载
- APDS-9960手势传感器模块的详细数据手册免费下载94次下载
- APDS-9960介绍83次下载
- 基于PIR传感器的电路图 带Arduino的PIR传感器设计4391次阅读
- 详解氧传感器坏了会怎么样,氧传感器故障表现1197次阅读
- 采用数字微波传感器和Arduino控制板实现人体探测系统2401次阅读
- 采用数字微波传感器、继电器和Arduino控制板的自动光控系统1101次阅读
- 如何使用Arduino和LDR传感器实现LCD液晶屏亮度的自动调节7895次阅读
- 如何使用Arduino Leonardo和MPU6050制作一个有线的手势控制器3454次阅读
- 基于钻井深度显示器和带有Arduino支持的7段显示器设计2910次阅读
- 基于创建带有空气质量传感器的室内气象站2553次阅读
- 数字传感器和模拟传感器的区别26022次阅读
- 如何通过PIR传感器和Arduino Nano等简单组件制作手势检测器5443次阅读
- 安华高科技正式推出了APDS-9007环境亮度传感器产品1514次阅读
- 浅谈接近与环境光强度数字传感器-APDS99306800次阅读
- Avago推出APDS-9004传感器,可帮助便携式显示设备延长LCD屏幕使用寿命1884次阅读
- 发动机传感器控制系统是整个汽车传感器的核心9633次阅读
- 带有遥控传感器的精密度温度转换器电路图2262次阅读
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論