最近手势控制的笔记本电脑或计算机变得非常有名。这种技术称为leap运动,它使我们能够通过简单地在计算机/笔记本电脑前挥手来控制计算机/笔记本电脑上的某些功能。这样做非常酷和有趣,但这些笔记本电脑的价格确实很高。因此,在这个项目中,让我们尝试通过结合arduino和python的强大功能来构建我们自己的手势控制笔记本电脑/计算机。
我们将使用两个超声波传感器来确定我们手的位置并根据位置控制媒体播放器 (vlc)。我已经使用它进行演示,但是一旦您了解了该项目,您只需更改几行代码并以您喜欢的方式控制您最喜欢的应用程序,您就可以做任何事情。
项目背后的概念:
该项目背后的概念非常简单。我们将在显示器顶部放置两个超声波(us)传感器,并使用arduino读取显示器和手之间的距离,根据此距离值,我们将执行某些操作。为了在我们的计算机上执行操作,我们使用pythonpyautogui库。来自arduino的命令通过串行端口(usb)发送到计算机。然后,该数据将由计算机上运行的python读取,并根据读取的数据执行操作。
电路图:
要使用手势控制pc,只需将两个超声波传感器与arduino连接即可。我们知道美国传感器使用 5v 工作,因此它们由 arduino 的板载稳压器供电。arduino可以连接到pc /笔记本电脑,为模块供电,也可以进行串行通信。连接完成后,将它们放在显示器上,如下所示。我用双面胶带把它贴在我的显示器上,但你可以发挥自己的创造力。将其固定在一个地方后,我们可以继续进行编程。
对 arduino 进行编程:
arduino应该被编程为读取手与美国传感器的距离。本页末尾给出了完整的程序;就在下面,我已经给出了该程序的解释。如果您不熟悉超声波传感器,只需通过arduino和超声波传感器基于距离测量。
通过读取距离的值,我们可以到达某些要用手势控制的动作,例如,在这个程序中,我已经编程了5 个动作作为演示。
操作 1:当两只手都放在传感器前的特定远距离时,vlc播放器中的视频应播放/暂停。
行动2:当右手放在传感器前的特定远距离时,视频应快进一步。
行动3:当左手放在传感器前的特定远距离时,视频应倒带一步。
行动4:当右手放在传感器前的特定近距离,然后如果向传感器移动,视频应快进,如果移开,视频应倒带。
行动5:当左手以特定的近距离放在传感器之前,然后如果朝向传感器移动,视频的音量应该增加,如果移开,音量应该减小。
让我们看看如何编写程序来执行上述操作。因此,像所有程序一样,我们从定义i / o引脚开始,如下所示。两个美国传感器连接到数字引脚2、3、4和5,由+5v引脚供电。触发引脚是输出引脚,回显引脚是输入引脚。
arduino和python之间的串行通信以9600的波特率进行。
const int trigger1 = 2; //trigger pin of 1st sesnor
const int echo1 = 3; //echo pin of 1st sesnor
const int trigger2 = 4; //trigger pin of 2nd sesnor
const int echo2 = 5;//echo pin of 2nd sesnor
void setup() {
serial.begin(9600);
pinmode(trigger1, output);
pinmode(echo1, input);
pinmode(trigger2, output);
pinmode(echo2, input);
}
在结束任何动作之前,我们需要每次计算传感器和手之间的距离。所以我们必须做很多次,这意味着这段代码应该作为一个函数使用。我们编写了一个名为 calculate_distance() 的函数,它将返回传感器和手之间的距离。
/*###function to calculate distance###*/
void calculate_distance(int trigger, int echo)
{
digitalwrite(trigger, low);
delaymicroseconds(2);
digitalwrite(trigger, high);
delaymicroseconds(10);
digitalwrite(trigger, low);
time_taken = pulsein(echo, high);
dist= time_taken*0.034/2;
if (dist>50)
dist = 50;
}
在我们的主循环中,我们检查距离的值并执行上述操作。在此之前,我们使用两个变量 distl 和 distr,它们使用当前距离值进行更新。
calculate_distance(trigger1,echo1);
distl =dist; //get distance of left sensor
calculate_distance(trigger2,echo2);
distr =dist; //get distance of right sensor
由于我们知道两个传感器之间的距离,因此我们现在可以将其与预定义的值进行比较并得出某些操作。例如,如果两只手都放在 40 mc 的距离,那么我们播放/暂停视频。这里“播放/暂停”一词将通过串口发送出去
if ((distl >40 && distr>40) && (distl <50 && distr40 && distl40 && distr=13 && distl=13 && distl<=17)
{
serial.println(left locked);
while(distl50)
dist = 50;
}
void loop() { //infinite loopy
calculate_distance(trigger1,echo1);
distl =dist; //get distance of left sensor
calculate_distance(trigger2,echo2);
distr =dist; //get distance of right sensor
//uncomment for debudding
/*serial.print(l=);
serial.println(distl);
serial.print(r=);
serial.println(distr);
*/
//pause modes -hold
if ((distl >40 && distr>40) && (distl <50 && distr=13 && distl=13 && distl<=17)
{
serial.println(left locked);
while(distl=13 && distr=13 && distr<=17)
{
serial.println(right locked);
while(distr<=40)
{
calculate_distance(trigger2,echo2);
distr =dist;
if (distr20) //right hand pulled out
{serial.println (forward); delay (300);}
}
}
}
delay(200);
}
python code:
import serial #serial imported for serial communication
import time #required to use delay functions
import pyautogui
arduinoserial = serial.serial('com18',9600) #create serial port object called arduinoserialdata
time.sleep(2) #wait for 2 seconds for the communication to get established
while 1:
incoming = str (arduinoserial.readline()) #read the serial data and print it as line
print incoming
if 'play/pause' in incoming:
pyautogui.typewrite(['space'], 0.2)
if 'rewind' in incoming:
pyautogui.hotkey('ctrl', 'left')
if 'forward' in incoming:
pyautogui.hotkey('ctrl', 'right')
if 'vup' in incoming:
pyautogui.hotkey('ctrl', 'down')
if 'vdown' in incoming:
pyautogui.hotkey('ctrl', 'up')
incoming = ;
如何看待SSD的高温问题,多角度解答M.2固态硬盘高温问题
Light Reading专访华为沈城营:携手迈向NFV下一个黄金十年
聚焦TCL春季发布会:引发行业地震的X11G电视背后蕴藏着重磅科技!
c语言编写的源程序可以直接运行吗
4 个基本技巧帮助您避免传导 EMI 问题
如何使用Arduino通过手势控制计算机
曙光助力北京冬奥会实现100%绿色电能供应
一文知道EMC设计的四个阶段
直线位移传感器的常见故障处理方法解析
百度发明的基于区块链的充电网络控制方法解密
关于中繼補償傳輸通道耗損 Retimer確保訊號完整性的介绍和回顾
使用SaberRD对汽车转向指示灯电路进行自动潜通路分析
TXGA研发生产的耳机插座是专业的音频输出解决方案
罗姆半导体:SiC器件应用走热 撬动新能源及汽车电子市场
双电源自动切换开关的常见故障有哪些,该如何解决
新能源汽车的正确充电方式有哪些
物奇微电子国内首家选用Cadence Tensilica HIFI 5打造TWS芯片平台
Aptina凭借13MP智能手机图像传感器实现重大飞跃
法拉电容在汽车上的作用是什么?
云存储怎么选择