diff --git a/AD8232/README.md b/AD8232/README.md index e14dd86d8f78e6be89398f86bd047995b9cdf05e..6a09a19143f227e17728971af3990108b4630c40 100644 --- a/AD8232/README.md +++ b/AD8232/README.md @@ -4,7 +4,7 @@   读取心电数据, 将其以心电图方式输出在屏幕上, 并计算心率 -![waflleandad8232](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/raw/master/AD8232/img/waflleandad8232.jpg) +![project](https://gitee.com/xinyuan-zhu/waffle-nano-v1-sensor-lib/raw/master/AD8232/img/project.jpg) ## 物理连接 @@ -12,7 +12,7 @@    传感器选择如下图所示的型号为AD8232的心电图监测传感器模块 -![ad8232](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/raw/master/raw/master/AD8232/img/ad8232.jpg) +![ad8232](https://gitee.com/xinyuan-zhu/waffle-nano-v1-sensor-lib/raw/master/AD8232/img/ad8232.jpg) ### 传感器接线 @@ -28,7 +28,7 @@ ## 传感器库使用 -  可以获取[ad8232.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/raw/master//AD8232/code/ad8232.py),将此库通过[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 的文件上传功能将此库上传到`Waffle Nano` +  可以获取[ad8232.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/blob/master/AD8232/code/ad8232.py),将此库通过[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 的文件上传功能将此库上传到`Waffle Nano`   我们在可以在主函数中使用以下代码导入此库 @@ -50,8 +50,8 @@ heartSensorValue = heartSensor.read() #从心电传感器中获取数据 ​ 关于此库相关细节说明详见代码注释 -## 案例代码复现 +## 测试代码 -  可以获取[main.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/raw/master/AD8232/code/main.py)函数,将其内容复制到[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 编辑器上传输给`Waffle Nano`,以复现此案例。 +  可以获取[main.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/blob/master/AD8232/code/main.py)函数,将其内容复制到[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 编辑器上传输给`Waffle Nano`, 即可使用该传感器。 -  案例相关细节说明详见代码注释 \ No newline at end of file +  相关细节说明详见代码注释 \ No newline at end of file diff --git a/AD8232/code/ad8232.py b/AD8232/code/ad8232.py index d8328519a6edb8dd80c39d3829c6900802fa9000..829168da8280334461599e0bcf264e289e52e457 100644 --- a/AD8232/code/ad8232.py +++ b/AD8232/code/ad8232.py @@ -11,6 +11,6 @@ class AD8232: elif LO == 2: return self.LO2Pin.value() def read(self): - data = self.adc.read() #读取心电数据 + data = self.adc.read() #读取心电s数据 return data \ No newline at end of file diff --git a/AD8232/code/main.py b/AD8232/code/main.py index 7f6f273af32180e9270e7c4df56b8c86aa35fcc1..144096d6274b8aadb56f6f354a4dc593436a4894 100644 --- a/AD8232/code/main.py +++ b/AD8232/code/main.py @@ -1,75 +1,12 @@ -from ad8232 import AD8232 #导入AD8232库 -from machine import Pin, SPI #导入通信以及引脚相关的库 -import st7789 #导入屏幕驱动库 +from ad8232 import AD8232 import utime -heartRate = 0 -heartRateStr = "0" -heartSensorValue = 0 -height_old = 0 -height_new = 0 -STHEIGHT = 240 -STWIDTH = 240 -x = 1 -y = 1 -cnt = 0 +heartSensor = AD8232(analogPin = 5, LO1Pin=2, LO2Pin=14) #构造ad8232对象 -heartSensor = AD8232(analogPin = 5, LO1Pin=2, LO2Pin=14) #构造心电传感器对象 - -spi = SPI(0, baudrate=40000000, polarity=1, phase=0, bits=8, endia=0, sck=Pin(6), mosi=Pin(8)) #构造spi对象 -display = st7789.ST7789(spi, 240, 240, reset=Pin(11,func=Pin.GPIO, dir=Pin.OUT), dc=Pin(7,func=Pin.GPIO, dir=Pin.OUT)) #构造屏幕控制对象 -display.init() #屏幕初始化 - -backgroud_clr = st7789.color565(255, 255, 255) #设置背景颜色为白色 -line_clr = st7789.color565(0, 0, 0) #心电图显示用颜色 -str_clr = st7789.color565(0,0,255) #心率显示用颜色 -grid_clr = st7789.color565(242, 167, 167) - -def draw_grid(): - grid_x = 0 - for i in range(12): - display.line(grid_x, 0, grid_x, 239, grid_clr) - display.line(0, grid_x, 239, grid_x, grid_clr) - grid_x += 20 - -if __name__ == "__main__": - display.fill(backgroud_clr) - draw_grid() - while True: - if heartSensor.value(LO = 1) == 1 or heartSensor.value(LO = 2) == 1: #判断电极片是否脱落 - print("!") - heartSensorValue = 1100 - line_clr = st7789.color565(255, 0, 0) #电极片脱落后曲线颜色变为红色,心率数字颜色变为红色作为脱落提示 - str_clr = st7789.color565(255, 0, 0) - else: - heartSensorValue = heartSensor.read() #读取心电传感器数据 - line_clr = st7789.color565(0, 0, 0) - str_clr = st7789.color565(0,0,255) - - # 将心电数据转化为坐标,两点连线输出到屏幕 - y = int(heartSensorValue / 1200 * 240) - 100 - height_new = 240 - y - display.line(x-1, height_old, x, height_new, line_clr) - - if height_old - height_new >= 12: #寻找心电图R波(变化极快的波形),并计算心率 - if cnt > 40: - heartRate = 60 / (cnt * 0.01) - cnt = 0 - if(heartRate<100): - heartRateStr = "0" + str(int(heartRate)) - else: - heartRateStr = str(int(heartRate)) - display.draw_string(170, 12, heartRateStr,size=4,color = str_clr) - print(heartRate) - - if x >= 240: - x = 1 - display.fill(st7789.color565(255, 255, 255)) - draw_grid() - display.draw_string(170, 12, heartRateStr,size=4,color = str_clr) - else: - x += 1 - - height_old = height_new - cnt += 1 - utime.sleep(0.01) +while True: + if heartSensor.value(LO = 1) == 1 or heartSensor.value(LO = 2) == 1: #导联脱落检测 + print("!") + else: + heartSensorData = heartSensor.read() #读取ADC值 + print(heartSensorData) + utime.sleep(0.1) \ No newline at end of file diff --git a/AD8232/img/project.jpg b/AD8232/img/project.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60220cfb900b1ba09b656f90f9e2c7b702216d5d Binary files /dev/null and b/AD8232/img/project.jpg differ diff --git a/AD8232/img/waflleandad8232.jpg b/AD8232/img/waflleandad8232.jpg deleted file mode 100644 index 8c3ddf19318503560adad96faffa05a1af17d6d4..0000000000000000000000000000000000000000 Binary files a/AD8232/img/waflleandad8232.jpg and /dev/null differ diff --git a/paj7620_D/README.md b/paj7620_D/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b9db914f8536f083255118fcfd97e62a9002ae13 --- /dev/null +++ b/paj7620_D/README.md @@ -0,0 +1,88 @@ +### PAJ7620U2手势传感器 + +## 物理连接 + +### 传感器选择 + +传感器选择如下图所示的型号为PAJ7620U2的手势识别传感器模组 + +![7620](https://gitee.com/xinyuan-zhu/waffle-nano-v1-sensor-lib/raw/master/paj7620_D/img/7620.jpg) + +### 传感器接线 + +传感器与waffle Nano之间的接线方式如下表所示,且未在下表中显示的引脚均处于悬空不连状态。 + +| Waffle Nano | 传感器 | +| ----------- | ------ | +| 3.3 | VIN | +| IO1 | SCL | +| IO0 | SDA | +| GND | GND | + +## 传感器库使用 + +可以获取[paj7620u2.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/raw/master/paj7620_D/code/paj7620.py),将此库通过[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 的文件上传功能将此库上传到`Waffle Nano`上。 + +我们在可以在主函数中使用以下代码导入此库。 + +``` +from paj7620 import PAJ7620 +``` + +在对象构造函数中,我们需要传入一个已经构造好的`IIC`对象 + +```python +from machine import I2C + +i2c = I2C(1, sda=Pin(0), scl=Pin(1), freq=400000) + +sensor7620=PAJ7620(i2c) +``` + +### 函数 + +​ 下面列举传感器库中所使用的函数 + +#### 寄存器初始化 + +``` +__init__(self, i2c, addr) +``` + +​ 函数说明:将寄存器初始化,传入i2c和需要通信的从机地址 + +#### 设置手势识别 + +``` +set_gesture(self, reg, data) +``` + +​ 函数说明:设置开启哪些手势可识别, reg为手势识别寄存器序号,data为需要发送的数据(十六进制数), 范围[0,2^8 - 1] + +#### 获取手势数据 + +``` +get_gesture(self,reg) +``` + +​ 函数说明:返回寄存器值,不同值对应不同手势,reg为手势识别寄存器序号 + +返回值: + + reg==1: + 向上->[1] + 向下->[2] + 向左->[4] + 向右->[8] + 向前->[16] + 向后->[32] + 顺时针->[64] + 逆时针->[128] + reg==2: + 挥动->[1] +## 案例代码复现 + +  可以获取[main.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/raw/master/paj7620_D/code/main.py)代码,将其内容复制到[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 编辑器上传输给`Waffle Nano`,以复现此案例,基础效果如下所示: + +案例相关细节说明详见代码注释 + diff --git a/paj7620_D/code/main.py b/paj7620_D/code/main.py new file mode 100644 index 0000000000000000000000000000000000000000..0179e84df254e4141a95e2e28536c7a39a2b1955 --- /dev/null +++ b/paj7620_D/code/main.py @@ -0,0 +1,13 @@ +from machine import Pin, I2C +from paj7620 import PAJ7620 +import utime + +i2c = I2C(1, scl=Pin(1), sda=Pin(0), freq=400000) +print(i2c.scan()) #115 +sensor7620 = PAJ7620(i2c,addr = 115) + +sensor7620.set_gesture(1,0x0C) + +while True: + print(sensor7620.get_gesture(1)) + utime.sleep(1) \ No newline at end of file diff --git a/paj7620_D/code/paj7620.py b/paj7620_D/code/paj7620.py new file mode 100644 index 0000000000000000000000000000000000000000..8554cbfe54382fee806e4e20fb0d7a0754d7de3a --- /dev/null +++ b/paj7620_D/code/paj7620.py @@ -0,0 +1,36 @@ +from machine import I2C +import utime + +class PAJ7620(): + def __init__(self, i2c, addr): + self.i2c = i2c + self.addr = addr #设置需要通信的从机地址 + self.i2c.write(addr, b'\xEF') #唤醒命令 + utime.sleep(0.01) + initial_value = self.i2c.readfrom_mem(addr, 0x00, 1) + if initial_value == [32]: + print("wake-up successful!") + i2c.write(addr, b'\xEF\x01') #进入BANK1 + i2c.write(addr, b'\x72\x01') #使能工作 + else: + print("wake-up failed!") + + def set_gesture(self, reg, data): + self.i2c.write(self.addr, b'\xEF\x00') #进入BANK0 + + if reg == 1: + self.i2c.write(self.addr, bytes([0x41,data])) + elif reg == 2: + self.i2c.write(self.addr, bytes([0x42,data])) + + print(self.i2c.readfrom_mem(self.addr, 0x41, 1)) #获取当前哪些手势可以被识别 + print(self.i2c.readfrom_mem(self.addr, 0x42, 1)) + + def get_gesture(self,reg): + self.i2c.write(self.addr, b'\xEF\x00') #进入BANK0 + if reg == 1: + ges1 = self.i2c.readfrom_mem(self.addr, 0x43, 1) + return ges1 + if reg == 2: + ges2 = self.i2c.readfrom_mem(self.addr, 0x44, 1) + return ges2 \ No newline at end of file diff --git a/paj7620_D/img/7620.jpg b/paj7620_D/img/7620.jpg new file mode 100644 index 0000000000000000000000000000000000000000..139e6c96a5bb5bca28d0bf51b43e79312c728a7d Binary files /dev/null and b/paj7620_D/img/7620.jpg differ