865|3

64

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第1期】第五贴: 扩展任务——GPS智能手杖定位器 [复制链接]

 

【得捷电子Follow me第1期】第五贴: 扩展任务——GPS智能手杖定位器

扩展任务就是利用PICO相应模块,实现带有网络、显示、声音功能的创意制作,可以增加其它传感器、外设。

那么本次就做一个GPS只能手杖定位器,简单来说就是智杖!

 

GPS智能手杖定位器一般具有以下功能:

  1. 实时定位:可以通过 GPS 技术获取当前位置

  2. 安全围栏:可以设置安全围栏,一旦设备离开围栏区域,会自动向用户发送警报信息。

  3. 电子时钟:显示屏实时显示当前时间。

  4. 温度预警:超出温度蜂鸣器将会报警。

  5. 进阶选项:开发者可自行添加:

    1. 历史轨迹:可以查看设备过去一段时间内的运动轨迹,便于用户了解设备的活动范围和行踪。

    2. SOS 求救:可以通过设备上的 SOS 按钮向用户发送求救信息,并提供当前位置信息,便于用户快速找到设备。

    3. 低功耗模式:可以通过低功耗模式延长设备的使用时间,节约能源。

    4. 实时定位:将位置信息上传到云端服务器,用户可以在手机或电脑上查看设备所在位置

 

首先,研发思路还是把这些模块一一实现,联网、屏幕、温度传感器、蜂鸣器、GPS。

其次,通过网络获取时间,ADC获取温度,配置PWM控制蜂鸣器,UART获取GPS信息,全都打印到屏幕上,并在一个while循环里判断是否超出温度、GPS设定的阈值,超出则报警,实现安全围栏和温度预警等功能。

以下为代码具体实现:

 

  • import time
  • import ntptime
  • import network
  • import hashlib
  • import framebuf
  • from micropyGPS import MicropyGPS
  • from machine import RTC, Pin, I2C, PWM, UART
  • from ssd1306 import SSD1306_I2C
  • #配置联网
  • ssid = '汤圆和奶茶'
  • password = 'tangyuan888'
  • wlan = network.WLAN(network.STA_IF)
  • wlan.active(True)
  • wlan.connect(ssid,password)
  • #尝试联网
  • max_wait = 10
  • while max_wait > 0:
  •   if wlan.status() < 0 or wlan.status() >= 3:
  •       break
  •   max_wait -= 1
  •   print("等待连接")
  •   time.sleep(1)
  • #判断联网状态
  • if wlan.status() != 3:
  •   raise RuntimeError("联网失败")
  • else:
  •   print("网络已连接")
  •   status = wlan.ifconfig()
  •   print("ip = " + status[0])
  • #配置OLED屏幕
  • #Grove Shield For Pi Pico I2C1
  • i2c = I2C(1,sda=Pin(6),scl=Pin(7),freq=400000)
  • oled = SSD1306_I2C(128, 64, i2c)
  • #配置温度传感器
  • sensor_temp = machine.ADC(4)
  • conversion_factor = 3.3/(65535)
  • #配置蜂鸣器
  • # Construct PWM object, with BEEP on Pin(16).
  • pwm = PWM(Pin(16))
  • # Set the PWM frequency.
  • pwm.freq(1000)
  • #配置GPS
  • #Grove Shield For Pi Pico UART0
  • uart0 = UART(0, baudrate=9600, tx = Pin(0), rx = Pin(1))
  • #print(gps_module)
  • time.sleep(0.1)
  • rxData = bytes()
  • my_gps = MicropyGPS()
  • while True:
  •   #显示实时温度
  •   read = sensor_temp.read_u16() * conversion_factor
  •   temp = 27 - (read - 0.706) / 0.001721
  •   print("温度:{:.1f}".format(temp))
  •   oled.fill(0)
  •   oled.text(f'temp is {temp:.1f}', 0, 12, 1)
  •   #oled.show()
  •    
  •   #显示实时时间
  •   timezone=8
  •   rtc = RTC()
  •   now = time.time()
  •   now += timezone * 3600
  •   t = time.localtime(now)
  •   year, month, day, hour, minute, second, *_ = t
  •   time_str = f"{year}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}"
  •   print("时间:", time_str)
  •   oled.text(time_str, 0, 0, 1)
  •   #oled.show()
  •    
  •   #温度超出30度报警
  •   if temp>38:
  •       pwm.duty_u16(1000)
  •       time.sleep(1)
  •       pwm.duty_u16(0)
  •   if uart0.any():
  •       stat = my_gps.update(uart0.read(1).decode('ascii')) # Note the conversion to to chr, UART outputs ints normally
  •       if stat:
  •           #显示GPS信息
  •           stat = my_gps.update(uart0.read(1).decode("ascii"))  
  •           # Note the conversion to to chr, UART outputs ints normally
  •           print("纬度:", my_gps.latitude_string())
  •           print("经度:", my_gps.longitude_string())
  •           print(
  •               "Speed:",
  •               my_gps.speed_string("kph"),
  •               "or",
  •               my_gps.speed_string("mph"),
  •               "or",
  •               my_gps.speed_string("knot"),
  •           )
  •           lat_disp = my_gps.latitude_string()
  •           oled.text(lat_disp,0,24,1)
  •           lon_disp = my_gps.longitude_string()
  •           oled.text(lon_disp,0,36,1)
  •           lon_disp = my_gps.speed_string()
  •           oled.text(lon_disp,0,48,1)
  •           oled.show()
  •            
  •           #安全围栏
  •           if my_gps.latitude_string()>'30' and my_gps.longitude_string()>'123':
  •               pwm.duty_u16(1000)
  •               time.sleep(1)
  •               pwm.duty_u16(0)

 

以下为用充电宝实现的智杖!当然,目前还没有制作外壳哈哈哈,有兴趣想做完成品的可以加上外壳~

 

最新回复

大功告成,恭喜恭喜   详情 回复 发表于 2023-6-6 08:40
点赞(1) 关注
 
 

回复
举报

6977

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

过网络获取时间ADC获取温度,再去配置PWM控制蜂鸣器,UART获取GPS信息,最后结果都打印到屏幕上,完全做出来,实用场景很大

 
 
 

回复

178

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

不错不错

 
 
 

回复

282

帖子

7

TA的资源

一粒金砂(高级)

4
 

大功告成,恭喜恭喜

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

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

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