手势传感器PAJ7620U2

最近买了个手势传感器,可以直接通过GPIO口连接树莓派,测试了下用手势识别控制无人机。
视频见:https://www.bilibili.com/video/BV1hT4y1j7Wz

【无人机】手势传感器控制无人机飞行

识别手势:上、下、左、右、前、后、顺时针、逆时针、摇摆
识别距离:5-15cm
微雪资料

1.软件下载

程序

示例程序
BCM2835程序

文档

用户手册
原理图

调试程序

Arduino IDE
串口调试助手

2.准备工作

2.1 硬件

打开I2C接口
连线

2.2 软件库

sudo apt-get install python-pip
sudo pip install RPi.GPIO
sudo pip install spidev
sudo apt-get install python-pil
sudo apt-get install python-smbus
sudo apt-get install python-serial

3.Python例程

#!/usr/bin/python
# -*- coding:utf-8 -*-
import time
import smbus#i2c address
PAJ7620U2_I2C_ADDRESS   = 0x73
#Register Bank select
PAJ_BANK_SELECT         = 0xf0            #Bank0== 0x00,Bank1== 0x01
#Register Bank 0
PAJ_SUSPEND             = 0x03        #I2C suspend command (Write = 0x01 to enter suspend state). I2C wake-up command is slave ID wake-up. Refer to topic “I2C Bus Timing Characteristics and Protocol”
PAJ_INT_FLAG1_MASK      = 0x41        #Gesture detection interrupt flag mask
PAJ_INT_FLAG2_MASK      = 0x42        #Gesture/PS detection interrupt flag mask
PAJ_INT_FLAG1           = 0x43        #Gesture detection interrupt flag
PAJ_INT_FLAG2           = 0x44        #Gesture/PS detection interrupt flag
PAJ_STATE               = 0x45        #State indicator for gesture detection (Only functional at gesture detection mode)
PAJ_PS_HIGH_THRESHOLD   = 0x69        #PS hysteresis high threshold (Only functional at proximity detection mode)
PAJ_PS_LOW_THRESHOLD    = 0x6A        #PS hysteresis low threshold (Only functional at proximity detection mode)
PAJ_PS_APPROACH_STATE   = 0x6B        #PS approach state,  Approach = 1 , (8 bits PS data >= PS high threshold),  Not Approach = 0 , (8 bits PS data <= PS low threshold)(Only functional at proximity detection mode)
PAJ_PS_DATA             = 0x6C        #PS 8 bit data(Only functional at gesture detection mode)
PAJ_OBJ_BRIGHTNESS      = 0xB0        #Object Brightness (Max. 255)
PAJ_OBJ_SIZE_L          = 0xB1        #Object Size(Low 8 bit)
PAJ_OBJ_SIZE_H          = 0xB2        #Object Size(High 8 bit)
#Register Bank 1
PAJ_PS_GAIN             = 0x44        #PS gain setting (Only functional at proximity detection mode)
PAJ_IDLE_S1_STEP_L      = 0x67        #IDLE S1 Step, for setting the S1, Response Factor(Low 8 bit)
PAJ_IDLE_S1_STEP_H      = 0x68        #IDLE S1 Step, for setting the S1, Response Factor(High 8 bit)
PAJ_IDLE_S2_STEP_L      = 0x69        #IDLE S2 Step, for setting the S2, Response Factor(Low 8 bit)
PAJ_IDLE_S2_STEP_H      = 0x6A        #IDLE S2 Step, for setting the S2, Response Factor(High 8 bit)
PAJ_OPTOS1_TIME_L       = 0x6B        #OPtoS1 Step, for setting the OPtoS1 time of operation state to standby 1 state(Low 8 bit)
PAJ_OPTOS2_TIME_H       = 0x6C        #OPtoS1 Step, for setting the OPtoS1 time of operation state to standby 1 stateHigh 8 bit)
PAJ_S1TOS2_TIME_L       = 0x6D        #S1toS2 Step, for setting the S1toS2 time of standby 1 state to standby 2 state(Low 8 bit)
PAJ_S1TOS2_TIME_H       = 0x6E        #S1toS2 Step, for setting the S1toS2 time of standby 1 state to standby 2 stateHigh 8 bit)
PAJ_EN                  = 0x72        #Enable/Disable PAJ7620U2
#Gesture detection interrupt flag
PAJ_UP                  = 0x01
PAJ_DOWN                = 0x02
PAJ_LEFT                = 0x04
PAJ_RIGHT               = 0x08
PAJ_FORWARD             = 0x10
PAJ_BACKWARD            = 0x20
PAJ_CLOCKWISE           = 0x40
PAJ_COUNT_CLOCKWISE     = 0x80
PAJ_WAVE                = 0x100
#Power up initialize array
Init_Register_Array = ((0xEF,0x00),(0x37,0x07),(0x38,0x17),(0x39,0x06),(0x41,0x00),(0x42,0x00),(0x46,0x2D),(0x47,0x0F),(0x48,0x3C),(0x49,0x00),(0x4A,0x1E),(0x4C,0x20),(0x51,0x10),(0x5E,0x10),(0x60,0x27),(0x80,0x42),(0x81,0x44),(0x82,0x04),(0x8B,0x01),(0x90,0x06),(0x95,0x0A),(0x96,0x0C),(0x97,0x05),(0x9A,0x14),(0x9C,0x3F),(0xA5,0x19),(0xCC,0x19),(0xCD,0x0B),(0xCE,0x13),(0xCF,0x64),(0xD0,0x21),(0xEF,0x01),(0x02,0x0F),(0x03,0x10),(0x04,0x02),(0x25,0x01),(0x27,0x39),(0x28,0x7F),(0x29,0x08),(0x3E,0xFF),(0x5E,0x3D),(0x65,0x96),(0x67,0x97),(0x69,0xCD),(0x6A,0x01),(0x6D,0x2C),(0x6E,0x01),(0x72,0x01),(0x73,0x35),(0x74,0x00),(0x77,0x01),
)
#Approaches register initialization array
Init_PS_Array = ((0xEF,0x00),(0x41,0x00),(0x42,0x00),(0x48,0x3C),(0x49,0x00),(0x51,0x13),(0x83,0x20),(0x84,0x20),(0x85,0x00),(0x86,0x10),(0x87,0x00),(0x88,0x05),(0x89,0x18),(0x8A,0x10),(0x9f,0xf8),(0x69,0x96),(0x6A,0x02),(0xEF,0x01),(0x01,0x1E),(0x02,0x0F),(0x03,0x10),(0x04,0x02),(0x41,0x50),(0x43,0x34),(0x65,0xCE),(0x66,0x0B),(0x67,0xCE),(0x68,0x0B),(0x69,0xE9),(0x6A,0x05),(0x6B,0x50),(0x6C,0xC3),(0x6D,0x50),(0x6E,0xC3),(0x74,0x05),
)
#Gesture register initializes array
Init_Gesture_Array = ((0xEF,0x00),(0x41,0x00),(0x42,0x00),(0xEF,0x00),(0x48,0x3C),(0x49,0x00),(0x51,0x10),(0x83,0x20),(0x9F,0xF9),(0xEF,0x01),(0x01,0x1E),(0x02,0x0F),(0x03,0x10),(0x04,0x02),(0x41,0x40),(0x43,0x30),(0x65,0x96),(0x66,0x00),(0x67,0x97),(0x68,0x01),(0x69,0xCD),(0x6A,0x01),(0x6B,0xB0),(0x6C,0x04),(0x6D,0x2C),(0x6E,0x01),(0x74,0x00),(0xEF,0x00),(0x41,0xFF),(0x42,0x01),
)
class PAJ7620U2(object):def __init__(self,address=PAJ7620U2_I2C_ADDRESS):self._address = addressself._bus = smbus.SMBus(1)time.sleep(0.5)if self._read_byte(0x00) == 0x20:print("\nGesture Sensor OK\n")for num in range(len(Init_Register_Array)):self._write_byte(Init_Register_Array[num][0],Init_Register_Array[num][1])else:print("\nGesture Sensor Error\n")self._write_byte(PAJ_BANK_SELECT, 0)for num in range(len(Init_Gesture_Array)):self._write_byte(Init_Gesture_Array[num][0],Init_Gesture_Array[num][1])def _read_byte(self,cmd):return self._bus.read_byte_data(self._address,cmd)def _read_u16(self,cmd):LSB = self._bus.read_byte_data(self._address,cmd)MSB = self._bus.read_byte_data(self._address,cmd+1)return (MSB << 8) + LSBdef _write_byte(self,cmd,val):self._bus.write_byte_data(self._address,cmd,val)def check_gesture(self):Gesture_Data=self._read_u16(PAJ_INT_FLAG1)if Gesture_Data == PAJ_UP:print("Up\r\n")elif Gesture_Data == PAJ_DOWN:print("Down\r\n")elif Gesture_Data == PAJ_LEFT:print("Left\r\n")    elif Gesture_Data == PAJ_RIGHT:print("Right\r\n")  elif Gesture_Data == PAJ_FORWARD:print("Forward\r\n")  elif Gesture_Data == PAJ_BACKWARD:print("Backward\r\n")elif Gesture_Data == PAJ_CLOCKWISE:print("Clockwise\r\n")  elif Gesture_Data == PAJ_COUNT_CLOCKWISE:print("AntiClockwise\r\n")    elif Gesture_Data == PAJ_WAVE:print("Wave\r\n")    return Gesture_Dataif __name__ == '__main__':import timeprint("\nGesture Sensor Test Program ...\n")paj7620u2=PAJ7620U2()while True:time.sleep(0.05)paj7620u2.check_gesture()

【8-13】手势传感器PAJ7620U2测试 实现手势控制无人机相关推荐

  1. 树莓派python手势识别控制_Raspberry Pi和手势传感器控制LED

    背景知识视频教程 Raspberry Pi Essentials:在更少的时间内了解更多​viadean.com完整的2019 Raspberry Pi训练营​viadean.comRaspberry ...

  2. Arduino测试PAJ7620U2手势传感器

    目录 1.安装库 2.接线 3.下载代码测试 在淘宝买了一块PAJ7620手势传感器模块,现在就来用arduino测试一下玩玩看. 图片如下: 1.安装库 2.接线 一共四根线 VCC GND SCL ...

  3. 4.0 树莓派做下位机播放视频、控制电机舵机、超声波检测、paj7620手势传感器控制,树莓派串口通信等程序分析

    文章目录 一.前言 二.Python实现封装打包自己写的代码 参考链接 我的参考 _init_.py setup.py 三. 树莓派的硬件解码播放器--Omxplayer 四.树莓派控制舵机,驱动L2 ...

  4. 【MM32F5270开发板试用】手势传感PAJ7620U2的智能家居应用

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:风云再起 一.序 很高兴能参加极术社区联合灵动微电子组织的[灵动MM32F5270开发板试 ...

  5. ROC-RK3308-CC开发实例总结--PAJ7620手势传感器模块调试

    传感器介绍 PAJ7620传感器是原相科技(Pixart)的一款内部集成光学阵列式传感器,以使复杂的手势和光标模式输出,内部集成了九种手势的识别:上.下.左.右.向前.向后.顺时针.逆时针以及挥动的手 ...

  6. 如何基于Arduino开发板使用APDS9960 RGB和手势传感器

    今天大多数手机都带有手势控制功能,可以打开或关闭任何应用程序.启动音乐.拨打电话等.这是一个非常方便的功能,可以节省时间,并且看起来很酷,可以用手势控制任何设备.我们以前使用加速度计来构建手势控制的机 ...

  7. [单片机][IIC/I2C][APDS9960] 手势传感器 4种手势

    /* -----------------------------------------头文件-----------------------------------------*/ #include ...

  8. PAJ7620手势传感器快速应用- -基于涂鸦CBU模组开发板

    PAJ7620手势传感器快速驱动- -基于涂鸦CBU模组开发板 正在,或是想要开发物联网小产品的你是否会觉得一些常用的控制需要繁琐地掏出手机会让你的产品体验不佳?添加实体按键又显得太 low ?不妨来 ...

  9. 红外手势传感器手势识别

    红外手势传感器已经被广泛使用在各个领域,只要挥挥手,设备就能识别你的手势,按指令工作.看起来是不是很神奇?在选用红外手势传感器做设计的时候,很多工程师都有疑惑,不需要接触,怎么实现手势判断,它的实现原 ...

最新文章

  1. px,em,rem,vh,vw,vmin,vmax的区别
  2. 八款开源 Android 游戏引擎 (巨好的资源)
  3. 【转载】spring framework体系结构详解
  4. Java虚拟机是如何执行线程同步的
  5. PHP获取IP地址的方法,防止伪造IP地址注入攻击
  6. textarea如何在文字后面_FLASH如何制作风吹文字的效果
  7. qt及qt quick开发实战精解_Qt5实战001:Qt 5.15下载安装详解
  8. android800版本怎么隐藏软件,小妖精美化app下载
  9. 图解设计模式 - Adapter 模式
  10. Logistic映射在图像加密中的应用
  11. [转]如何在NIOS II中读写EPCS剩余空间
  12. coreldraw的线条怎么变成圆头_CDR将照片变线条的三种方法
  13. [算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
  14. Premiere导入视频之后音频轨没有内容
  15. 生来只为丈量天空,开普勒的传奇一生
  16. String字符串中 intern()方法的理解(重难点)
  17. win10显示器亮度无法调节
  18. 2020写真消费人群需求报告
  19. 洛谷——P1348 Couple number(java实现)
  20. 树莓派连接隐藏wifi(2020最新系统实测可用!)

热门文章

  1. 推荐系统的性能评估(RMSE、MAE、F1 core、A/B testing、CTR和CR、ROI和QA)
  2. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)
  3. java static 线程安全_java静态方法的线程安全问题
  4. 如何设计一个通用的权限管理系统?说的太详细了
  5. Android父布局上方上边框阴影实现。
  6. 2019-11-29-程序猿修养-日志应该如何写
  7. 在github上有哪些开源的直播换脸软件
  8. 1、go的GOPATH、GOROOT、第三方库学习
  9. 黑苹果键盘键盘驱动_苹果糟糕的键盘以及为何可维修性如此重要
  10. 计算机对环境设计的作用,【环境设计论文】表现技法在环境设计专业的重要性(共2876字)...