1601|6

501

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

【得捷电子Follow me第1期】+5.扩展项目:基于PicoW的入侵检测报警器 [复制链接]

  本帖最后由 qinyunti 于 2023-4-10 16:08 编辑

78afb5e5d54b7e4804f394c1dc8f64a1

 

前言

   前面各篇我们通过各模块玩转了PicoW,进行了LED,蜂鸣器,OLED,网络等相关的测试,

其中也有一些比较有意思的玩法,比如使用蜂鸣器演奏”两只老虎”等。

这一篇我们基于以上外设再实现一个综合的Demo:基于PicoW的入侵检测监视器。

概要设计

总体框图如下

 

通过TOF模块检测到人员接近,

然后将GPS的位置时间和人员接近信息通过WIFI上报给服务端,

同时通过声光的OLED,BEEP,LED等进行告警指示。

 

实现

TOF人员接近检测

用的TOF模块型号为HLK-LD116S-24G

 

检测到人员移动时会输出高,否则输出低。

 

使用GPIO18作为IO输入,检测TOF的输出

 

测试代码如下

from machine import Pin

import time

led = Pin("LED",Pin.OUT)

tof = Pin(18,Pin.IN)



led.value(0)

while True:

    time.sleep(0.1)

    print(tof.value())

 

 测试如下

 

 

LED指示

当检测到人员接近时,LED点亮用于告警指示,否则熄灭。

测试代码如下

from machine import Pin

import time

led = Pin("LED",Pin.OUT)

tof = Pin(18,Pin.IN)



led.value(0)

while True:

    time.sleep(0.1)

    print(tof.value())

    

    if(tof.value()):

        led.value(1)

    else:

        led.value(0)

 

测试用手接近时,LED点亮,移开时熄灭。

 

 

 

蜂鸣器告警

当检测到人员接近时,蜂鸣器鸣叫告警,否则不鸣叫。

测试代码如下

from machine import Pin

import time

from machine import PWM



led = Pin("LED",Pin.OUT)

tof = Pin(18,Pin.IN)

pwm = PWM(Pin(16))

pwm.freq(1000)



led.value(0)

while True:

    time.sleep(0.1)

    print(tof.value())

    

    if(tof.value()):

        led.value(1)

        pwm.duty_u16(1000)

    else:

        led.value(0)

        pwm.duty_u16(0)

  

 

 

 

OLED显示

当检测到人员接近时,OLED显示告警信息。

 

测试代码如下

from machine import Pin

import time

from machine import PWM

from machine import I2C

from ssd1306 import SSD1306_I2C

WIDTH  = 128                            

HEIGHT = 64

i2c = I2C(0)

oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)



led = Pin("LED",Pin.OUT)

tof = Pin(18,Pin.IN)

pwm = PWM(Pin(16))

pwm.freq(1000)



led.value(0)

pwm.duty_u16(0)



while True:

    time.sleep(0.1)

    print(tof.value())

    

    if(tof.value()):

        led.value(1)

        pwm.duty_u16(1000)

        oled.fill(0)

        oled.text("Warning!Intruder!",5,20)

        oled.show()

    else:

        led.value(0)

        pwm.duty_u16(0)

        oled.fill(0)

        oled.text("Safety!",5,20)

        oled.show()

  

检测到尤文接近时显示arning!Intruder!,否则显示Safety!

网络上报

当检测到人员接近时,OLED将检测到的状态,GPS位置,当前时间等信息上报服务端。

 

测试

完整代码如下

 

from machine import Pin
import time
from machine import PWM
from machine import I2C
from ssd1306 import SSD1306_I2C
from micropyGPS import MicropyGPS
from machine import UART
import network
import socket
ssid = 'qiqiqiqi'
password = 'cqmygysdss'
host='192.168.31.236'  #服务器IP地址
port = 10000 #服务器端口

my_gps = MicropyGPS()

WIDTH  = 128                            
HEIGHT = 64
i2c = I2C(0)
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)
uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))

led = Pin("LED",Pin.OUT)
tof = Pin(18,Pin.IN)
pwm = PWM(Pin(16))
pwm.freq(1000)

led.value(0)
pwm.duty_u16(0)

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

# 网络连接
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('waiting for connection...')
    time.sleep(1)
# Handle connection error
if wlan.status() != 3:
    raise RuntimeError('network connection failed')
else:
    print('connected')
    status = wlan.ifconfig()
    print( 'ip = ' + status[0] )
    
#建立Socket连接
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#Socket属性
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

while True:
    time.sleep(0.1)
    #print(tof.value())
    if uart0.any():
        stat = my_gps.update(uart0.read(1).decode('utf-8')) # Note the conversion to to chr, UART outputs ints normally
        if stat:
            print('Latitude:', my_gps.latitude_string())
            print('Longitude:', my_gps.longitude_string())
            print('Speed:', my_gps.speed_string('kph'), 'or', my_gps.speed_string('mph'), 'or', my_gps.speed_string('knot'))
            print('Date (Long Format):', my_gps.date_string('long'))
            print('Date (Short D/M/Y Format):', my_gps.date_string('s_dmy'))
            print('timestamp (Short [H,M,S] Format):', my_gps.timestamp)
            
            sstr = 'Warning!Intruder!' + my_gps.latitude_string() + my_gps.longitude_string() + my_gps.date_string('s_dmy') + '\r\n'
            s.sendto(sstr,(host,port))
            stat = None  
    if(tof.value()):
        led.value(1)
        pwm.duty_u16(1000)
        oled.fill(0)
        oled.text("Warning!Intruder!",5,20)
        oled.show()
    else:
        led.value(0)
        pwm.duty_u16(0)
        oled.fill(0)
        oled.text("Safety!",5,20)
        oled.show()
  

 

 

总结

   以上我们先进行了概要设计,然后根据模块划分对各模块进行测试,最后综合实现设计目标。

从整个过程来看,由于之前对每个模块都进行过了充分的测试,所以本篇实际就是’组装’的过程,

有了设计框图,按照概要设计进行实现,比较顺利。

     本次活动非常有意义,熟悉了PicoW的相应的开发,进行了各个模块的驱动,

并实现了一些有意思的测试最终实现了一个综合的Demo,收获满满。

最后有一点小小的建议,可以再丰富一点免费的外设模块,这样可以发挥更多的创意。

 

最新回复

这样搞完,就可以报帐了吗?大佬?  详情 回复 发表于 2023-4-14 19:58
点赞 关注(1)
 
 

回复
举报

6069

帖子

4

TA的资源

版主

沙发
 

感谢分享 这活动办得好!

 
 
 

回复

6060

帖子

6

TA的资源

版主

板凳
 

TOF模块可以实现几个点的检测?   

点评

在检测范围内只要有移动物体就可以, 测试看角度范围还挺大的,坐在侧面,稍微点一点头都能检测到,不过可能是在房子里有反射,所以检测角度范围变大了。 [attachimg]689340[/attachimg]    详情 回复 发表于 2023-4-10 11:42
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

501

帖子

4

TA的资源

纯净的硅(高级)

4
 
秦天qintian0303 发表于 2023-4-10 11:16 TOF模块可以实现几个点的检测?   

在检测范围内只要有移动物体就可以,

测试看角度范围还挺大的,坐在侧面,稍微点一点头都能检测到,不过可能是在房子里有反射,所以检测角度范围变大了。

 

 
 
 

回复

6841

帖子

11

TA的资源

版主

5
 

本次活动非常有意义,熟悉了PicoW的相应的开发,进行了各个模块的驱动,

并实现了一些有意思的测试最终实现了一个综合的Demo,收获满满。

最后有一点小小的建议,可以再丰富一点免费的外设模块,这样可以发挥更多的创意。

这样的活动收费很大呀。

点评

收什么费啊  详情 回复 发表于 2023-4-13 17:30
 
 
 

回复

164

帖子

2

TA的资源

一粒金砂(高级)

6
 
lugl4313820 发表于 2023-4-13 15:10 本次活动非常有意义,熟悉了PicoW的相应的开发,进行了各个模块的驱动, 并实现了一些有意思的测试最终实 ...

收什么费啊

 
 
 

回复

6841

帖子

11

TA的资源

版主

7
 
这样搞完,就可以报帐了吗?大佬?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表