1390|6

12

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第1期】二狗子GNNS定位器 [复制链接]

  本帖最后由 doudoubaba 于 2023-6-30 18:57 编辑

一、 3-5分钟短视频

 
 
播放器加载失败: 未检测到Flash Player,请到安装
6月30日

 
 
 
二、项目总结报告
 
(一)项目描述

1、引言

现在,二狗子已经成为我生活中不可或缺的一部分。然而,它经常乱跑。当它走失时,我通常会感到十分焦虑和担忧。为了解决这个问题,我决定利用手里的单片机和模块设计一个二狗子GNNS定位器。该项目旨在设计和开发一种能够追踪二狗子位置的系统,以帮助我快速找到丢失的二狗子。

2、目标

本项目的目标是实现一个具有以下功能的二狗子GNNS定位器:

  • 实时追踪宠物的位置:通过使用GNNS技术,能够准确地追踪二狗子的位置。
  • 安全围栏报警:通过设定安全区域边界,当二狗子跑到越过边界,蜂鸣器发报警声提醒二狗子。

3、技术实现

(1)硬件介绍

为了实现二狗子定位器,本项目主要选用了以下硬件:

① Raspberry Pi Pico W

 

Raspberry Pi Pico W是一款树莓派官方设计低成本但灵活的RP2040开发平台,其是Raspberry Pi Pico的无线升级版,具有Pico所有特性外还具有2.4GHz无线接口。

产品特性:

  • 采用了 Raspberry Pi 官方自主设计的 RP2040 微控制器芯片
  • 搭载了双核 ARM Cortex M0 + 处理器,运行频率高达 133MHz 灵活时钟
  • 内置了 264KB 的 SRAM 和 2MB 的片上 Flash
  • 板载2.4GHz无线接口芯片(802.11n或Wifi4)。
  • 邮票孔设计,可直接焊接集成到用户自主设计的底板上
  • USB1.1 主机和设备支持
  • 支持低功耗睡眠和休眠模式
  • 可通过 USB 识别为大容量存储器进行拖放式下载程序
  • 多达 26 个多功能的 GPIO 引脚
  • 2 个 SPI,2 个 I2C,2 个 UART,3 个 12 位 ADC,16 个可控 PWM 通道
  • 精确的片上时钟和定时器
  • 温度传感器
  • 片上加速浮点库
  • 8 个可编程 I/O (PIO) 状态机,用于自定义外设支持

引脚分布:

 

② GNNS(全球导航卫星系统)模块Grove - GPS (Air530)

 

GNNS模块采用的是矽递科技的Grove - GPS (Air530)。Air530模块是一款高性能、高集成度的多模卫星定位导航模块,同时支持北斗、GPS、格洛纳斯等卫星导航系统。

技术参数:

Parameter Value
Supply voltage 3.3V/5V
Working current up to 60mA
Time of warm start 4s
Time of cold boot 30s

 

Wiki文档:

https://wiki.seeedstudio.com/Grove-GPS-Air530/

 

 

③ 无源蜂鸣器模块Grove - Buzzer

 

无源蜂鸣器模块采用的是矽递科技的Grove - Buzzer模块。

 

技术参数:

Items Specification
Operating Voltage 3.3V/5V
Sound Output ≥85dB
Resonant Frequency 2300±300Hz

 

Wiki文档:

https://wiki.seeedstudio.com/Grove-Buzzer/

 

④ 显示模块Grove OLED Display 0.96" (SSD1315)

 

 

OLED模块采用的是矽递科技的Grove 0.96英寸OLED模块,采用SSD1315驱动芯片,128x64分辨率,I2C接口。

 

技术参数:

Parameter Value
Input voltage 3.3V / 5V
Output voltage 0 ~ 2.3V
Pixels 128 x 64
Temperature Range -40℃ ~ +85 ℃

 

wiki文档:

https://wiki.seeedstudio.com/Grove-OLED-Display-0.96-SSD1315/

 

(2)设计思路

① 主控:Raspberry Pi Pico W,负责从GNNS模块获取定位信息数据,并控制OLED模块显示,控制蜂鸣器模块发出报警声。

② 传感器:GNNS模块Grove - GPS (Air530),负责与北斗导航卫星、GPS卫星通信,获取位置信息,并将其转化为经度和纬度坐标。

③ 输出模块:无源蜂鸣器模块Grove - Buzzer,负责发出报警声。

④ 显示模块:Grove OLED Display 0.96" (SSD1315),负责显定位的经纬度值、卫星数、时间。

当系统上电后,Raspberry Pi Pico W对GNNS模块、蜂鸣器模块、OLED模块进行初始化。

初始化完成后,GNNS模块与导航卫星进行通信,获取经纬度值、卫星数量、时间数据,并发给Raspberry Pi Pico W。

Raspberry Pi Pico W将收到的这些信息,输出到OLED模块上显示。

 
(二)各功能对应的主要代码片段及说明
 
 
  • #blink
  • #导入库
  • import machine
  • import time
  • #初始化引脚
  • LED = 25
  • led = machine.Pin(LED, machine.Pin.OUT)
  • while(True):
  • #点亮LED
  • led.on()
  • #延时1秒
  • time.sleep(1)
  • #熄灭LED
  • led.off()
  • #延时1秒
  • time.sleep(1)

 

 
 
(1)驱动OLED
 
  • #【得捷电子Follow me第1期】任务2:驱动外设(1)OLED
  • #导入库
  • from machine import Pin, I2C
  • from ssd1306 import SSD1306_I2C
  • import time
  • #初始化I2C
  • i2c = I2C(0,sda=Pin(8), scl=Pin(9))
  • #实例化SSD1306_I2C
  • oled = SSD1306_I2C(128, 64, i2c)
  • #OLED清屏
  • oled.fill(0)
  • oled.show()
  • #OLED显示信息
  • oled.text("GPS:",0,0)
  • oled.text("Sate:",0,36)
  • oled.text("Time:",0,50)
  • oled.show()

 

(2)驱动蜂鸣器发出警报声
 
  • #【得捷电子Follow me第1期】任务2:驱动外设(2)无源蜂鸣器警笛
  • #导入库
  • from machine import Pin, I2C, PWM
  • import time
  • #初始化引脚
  • buzzer = PWM(machine.Pin(20))
  • while True:
  • #设置频率freq
  • for freq in range(500,1000,5):
  • #蜂鸣器发声
  • buzzer.freq(freq)
  • #延时
  • time.sleep(0.002)
  • #设置频率freq
  • for freq in range(1000,500,-5):
  • #蜂鸣器发声
  • buzzer.freq(freq)
  • #延时
  • time.sleep(0.002)

 

3、任务3:同步网络时间

 

  • 任务3:同步网络时间
  • #导入库
  • from machine import RTC
  • import time
  • import network
  • import ntptime
  • #初始化网络
  • wlan = network.WLAN(network.STA_IF)
  • wlan.active(True)
  • wlan.connect('xiaogui', '88888888')
  • #同步NT时间函数
  • def RTCdate(flag, timezone=8):
  • #print("开始同步网络时间")
  • try:
  • rtc = RTC()
  • now = time.time()
  • now += timezone * 3600
  • dt = time.localtime(now)
  • date_str = "{}年{}月{}日".format(dt[0], dt[1], dt[2])
  • time_str = "{}:{}:{}".format(zero_str(dt[3]), zero_str(dt[4]), zero_str(dt[5]))
  • if flag == 0:
  • return date_str
  • else:
  • return time_str
  • except Exception as e:
  • print("同步NTP时间错误",repr(e))
  • # 补零函数
  • def zero_str(str_num):
  • num=int(str_num)
  • num_str=None
  • if num>9:
  • num_str=str_num
  • else:
  • num_str="0"+str(str_num)
  • return num_str
  • #主程序,NTP校时
  • ntptime.host = 'ntp1.aliyun.com'
  • ntptime.settime()
  • print(RTCdate(0),RTCdate(1))

 

 
  • #任务4:实现定位功能
  • #导入库
  • from machine import UART, Pin, PWM, I2C
  • from ssd1306 import SSD1306_I2C
  • from micropyGPS import MicropyGPS
  • import time
  • WIDTH = 128
  • HEIGHT = 64
  • #初始化OLED
  • i2c = I2C(0,sda=Pin(8), scl=Pin(9))
  • oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)
  • #初始化串口uart0
  • uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
  • time.sleep(0.1)
  • rxData = bytes()
  • my_gps = MicropyGPS(8)
  • my_gps.local_offset
  • def get_GPS_values():
  • #定义两个全局变量
  • global gps_values,rtc
  • time.sleep(2)
  • cc = uart0.readline()
  • for x in cc:
  • my_gps.update(chr(x))
  • #获取经度、维度
  • gps_values = str(my_gps.latitude[0] + (my_gps.latitude[1] / 60)) + ',' + str(my_gps.longitude[0] + (my_gps.longitude[1] / 60))
  • #获取日期、时间
  • date = my_gps.date
  • timestamp = my_gps.timestamp
  • hour = timestamp[0]
  • rtc = str(int(timestamp[0]))+":"+str(int(timestamp[1]))+":"+str(int(timestamp[2]))
  • #返回经度、纬度值、RTC
  • return gps_values,rtc
  • while True:
  • time.sleep_ms(20)
  • get_GPS_values()
  • #OLED显示
  • oled.fill(0)
  • oled.show()
  • oled.text("GPS:",0,0)
  • oled.text(gps_values,0,16)
  • oled.text("Sate:",0,36)
  • oled.text(str(my_gps.satellites_in_use),64,36)
  • oled.text("Time:",0,50)
  • oled.text(rtc,64,50 )
  • oled.show()
  • #串口打印输出
  • print('Location:', gps_values)
  • print('State:', my_gps.satellites_in_use)
  • print('RTC:', rtc)

 

 
(三)功能展示及说明
 
1、Blink功能展示
 
 
 
如上图所示,板载LED灯1秒闪烁一次。
 
2、获取NTP网络时间功能演示
 
如上图所示,程序运行后,串口打印出通过NTP获得的日期与时间。
 
3、驱动外设及GNNS定位功能演示
 
 
 
 
如上图所示,程序运行后,OLED显示GNNS经维度坐标、卫星数、时间。
 
(四)对本活动的心得体会
1、改进目标
  • 手机APP:开发一个APP,随时随地监控二狗子的位置、设置安全区域和接收警报通知。
  • 物联网平台:物联网平台实时查看二狗子的位置。
  • 警报通知:一旦二狗子离开安全区域,系统将立即发送警报通知我,以便我能够立即采取行动。
  • 历史轨迹:系统能够存储和显示二狗子的历史轨迹记录,让我可以了解二狗子的活动范围和习惯。
 
三、可编译下载的代码
 
task04.py (1.52 KB, 下载次数: 0)

task03.py (1.06 KB, 下载次数: 0)

task02-2.py (556 Bytes, 下载次数: 0)

task02-1.py (423 Bytes, 下载次数: 0)

task01.py (293 Bytes, 下载次数: 0)

micropyGPS.py (29.63 KB, 下载次数: 0)

ssd1306.py (4.93 KB, 下载次数: 0)

 

最新回复

感谢楼主分享,功能看着很实用,就是不知道最终的成品体积大不大,耗电怎么样  详情 回复 发表于 2023-7-2 00:39
点赞 关注
 
 

回复
举报

7500

帖子

2

TA的资源

版主

沙发
 

你这二狗子似乎有点调皮,给它再加个太阳能板,防止跑远了,定位器没电了。

点评

是的,得给二狗子装一队太阳翼  详情 回复 发表于 2023-6-30 16:20
 
 
 

回复

441

帖子

0

TA的资源

纯净的硅(中级)

板凳
 

功能看着很使用啊,就是不知道最终的成品体积大不大,给二狗子带身上方不方便呢,

 
 
 

回复

12

帖子

2

TA的资源

一粒金砂(中级)

4
 
wangerxian 发表于 2023-6-30 11:37 你这二狗子似乎有点调皮,给它再加个太阳能板,防止跑远了,定位器没电了。

是的,得给二狗子装一对太阳翼

点评

成为全村最靓的仔!  详情 回复 发表于 2023-6-30 16:23
 
 
 

回复

7500

帖子

2

TA的资源

版主

5
 
doudoubaba 发表于 2023-6-30 16:20 是的,得给二狗子装一对太阳翼

成为全村最靓的仔!

 
 
 

回复

7188

帖子

11

TA的资源

版主

6
 

感谢楼主的分享,恭喜完成任务,这个开板可以深入研究,希望多来EEWORLD展示楼主的才华。楼主的题目很醒目呀!

 
 
 

回复

1629

帖子

0

TA的资源

五彩晶圆(初级)

7
 
感谢楼主分享,功能看着很实用,就是不知道最终的成品体积大不大,耗电怎么样
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表