这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【DigiKey手势翻页笔活动】+过程贴+驱动手势传感器

共12条 1/2 1 2 跳转至

【DigiKey手势翻页笔活动】+过程贴+驱动手势传感器

专家
2024-04-07 00:20:03     打赏

本来按照计划,在完成开发环境的搭建后,是要开发板能挂上显示屏的。有了显示屏,可以很方便地吧中间调试过程显示出来,作为参考,方便调试程序。可是看着那个手势传感器,总感觉不测试下心里不踏实。于是乎,最开始也没用NUCLEO-H503RB开发板来测试,而是选在最快捷的方式,使用Arduino来测试。因为用Arduino是最快捷的方式。如果能找到对应的支持库。就能找到现成的例子,来测试传感器模块是否可用。

在安装支持库之前,首先得确认传感器所用到的芯片的型号才行。在经过各种查找、对比之后,终于确认本次《DigiKey手势翻页笔活动》中所使用的手势传感器,用的是PAJ7620。于是打开Arduino IDE,查找并安装支持库,找到了几个,但经过编译测试,发现RevEng PAJ7620 by Aaron S.Crandall的好用。


测试的时候,只需要按照以下方式做好连接就可以。

 ESP8266           PAJ7620

 ============================

 D1                SCL

 D2                SDA

 ============================

实际上传感器也就提供了4跳线,另外两个是VCC和GND。测试程序使用“paj7620_9_gestures.ino”就可以。代码如下:

/*
  Example Script: paj7620_9_gestures.ino
  Package: RevEng_PAJ7620

  Copyright (c) 2020 Aaron S. Crandall
  Author        : Aaron S. Crandall <crandall@gonzaga.edu>
  Modified Time : December 2020

  Description: This demo can recognize 9 gestures and output the result,
    including move up, move down, move left, move right, move forward,
    move backward, circle-clockwise, circle-counter clockwise, and wave.

  License: Same as package under MIT License (MIT)
*/

/*
 接线方式
 -------------------------------------
 ESP8266           PAJ7620
 ============================
 D1                SCL
 D2                SDA
 ============================
 支持库位置:
 C:\Users\HP\Documents\Arduino\libraries\Gesture_PAJ7620
 paj7620.cpp
 paj7620.h

 /*
enum {
	// REGISTER 0
	GES_RIGHT_FLAG			 = BIT(0),
	GES_LEFT_FLAG			 = BIT(1),
	GES_UP_FLAG				 = BIT(2),
	GES_DOWN_FLAG			 = BIT(3),
	GES_FORWARD_FLAG		 = BIT(4),
	GES_BACKWARD_FLAG		 = BIT(5),
	GES_CLOCKWISE_FLAG		 = BIT(6),
	GES_COUNT_CLOCKWISE_FLAG = BIT(7),
	//REGISTER 1
	GES_WAVE_FLAG		= BIT(0),	
};
*/
*/

// Includes enum definition of GES_* return values from readGesture()
#include "RevEng_PAJ7620.h"

// Create gesture sensor driver object
RevEng_PAJ7620 sensor = RevEng_PAJ7620();


// *********************************************************************
void setup() {
  Serial.begin(115200);

  Serial.println("PAJ7620 sensor demo: Recognizing all 9 gestures.");

  // return value of 0 == success
  if( !sensor.begin() )   {
    Serial.print("PAJ7620 I2C error - halting");
    while(true) { }
  }

  Serial.println("PAJ7620 init: OK");
  Serial.println("Please input your gestures:");
}


// *********************************************************************
void loop() {
  Gesture gesture;                  // Gesture is an enum type from RevEng_PAJ7620.h
  gesture = sensor.readGesture();   // Read back current gesture (if any) of type Gesture

  switch (gesture)   {
    case GES_FORWARD:
        Serial.print("GES_FORWARD");
        break;

    case GES_BACKWARD:
        Serial.print("GES_BACKWARD");
        break;

    case GES_LEFT:
        Serial.print("GES_LEFT");
        break;

    case GES_RIGHT:
        Serial.print("GES_RIGHT");
        break;

    case GES_UP:
        Serial.print("GES_UP");
        break;

    case GES_DOWN:
        Serial.print("GES_DOWN");
        break;

    case GES_CLOCKWISE:
        Serial.print("GES_CLOCKWISE");
        break;

    case GES_ANTICLOCKWISE:
        Serial.print("GES_ANTICLOCKWISE");
        break;

    case GES_WAVE:
        Serial.print("GES_WAVE");
        break;

    case GES_NONE:
        break;
  }

  if( gesture != GES_NONE )  {
    Serial.print(", Code: ");
    Serial.println(gesture);
  }

  delay(100);
}

到这里已经确认传感器是可以安心使用的了。paj7620的中文资料我还没有找到,自己英文又不好,大抵上也就是为照猫画虎地拷贝、粘贴、修改,借鉴别人的程序,做出自己想要的。

实际上,把程序移植到STM32 的开发板上,这个过程也不是很容易,查资料、读代码,理解处理过程等,折腾了一两天,才基本上搞通。

传感器使用I2C方式通讯,前面我处理程序时已经预留了两个GPIO口,专门用于手势传感器通讯的,这次刚好用上。使用的是模拟I2C通讯的方式。其实STM32H503本身是提供了I2C通讯接口的。但我以前使用I2C外设通讯时,感觉处理过程很麻烦,不如模拟方式起来的一步到位,不需要考虑通讯过程到了哪一步、通讯状态是什么样子等。另外因为I2C子设备地址的不同,也是可以使用OLED使用同一组总线的。但为了调试方便,最终还是分开来做的。最终通过PC2和PC3模拟I2C实现了对传感器的驱动。

1.png

上电测试后的结果看,效果还不错。

2.png

传感器反应还挺灵敏,尤其是对上、下、左、右、靠近、远离这几个动作。目前处理结果和调试信息还是通过串口打印出来的。后面还是要用OLED或者TFT显示屏来显示。





关键词: DigiKey     手势翻页笔活动     驱动传感器    

高工
2024-04-07 08:10:33     打赏
2楼

谢谢分享


专家
2024-04-07 08:15:36     打赏
3楼

不错啊,看看


高工
2024-04-07 09:36:37     打赏
4楼

谢谢分享


院士
2024-04-07 10:45:20     打赏
5楼

还能这样操作啊~~


高工
2024-04-07 13:26:21     打赏
6楼

谢谢分享


高工
2024-04-08 11:14:00     打赏
7楼

再次仔细看你的过程,收益颇深


工程师
2024-04-09 05:16:07     打赏
8楼

谢谢分享


专家
2024-04-09 08:53:45     打赏
9楼

板子上有预留的ARDUINO的I2C接口,加上旁边的GND,AVDD,刚好可以用来接OLED,只是需要把SCL和SDA的功能互换,用模拟方式驱动,也很方便。


高工
2024-04-09 18:29:19     打赏
10楼

今天看邮箱,发现digikey把订单取消了


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]