|
【得捷电子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模块上显示。
(二)各功能对应的主要代码片段及说明
-
-
- import machine
- import time
-
-
- LED = 25
- led = machine.Pin(LED, machine.Pin.OUT)
- while(True):
-
-
- led.on()
-
-
- time.sleep(1)
-
-
- led.off()
-
-
- time.sleep(1)
(1)驱动OLED
-
-
-
- from machine import Pin, I2C
- from ssd1306 import SSD1306_I2C
- import time
-
-
- i2c = I2C(0,sda=Pin(8), scl=Pin(9))
-
-
- oled = SSD1306_I2C(128, 64, i2c)
-
-
- oled.fill(0)
- oled.show()
-
-
- oled.text("GPS:",0,0)
- oled.text("Sate:",0,36)
- oled.text("Time:",0,50)
- oled.show()
(2)驱动蜂鸣器发出警报声
-
-
- from machine import Pin, I2C, PWM
- import time
-
-
- buzzer = PWM(machine.Pin(20))
-
- while True:
-
-
- for freq in range(500,1000,5):
-
-
- buzzer.freq(freq)
-
-
- time.sleep(0.002)
-
-
- 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')
-
-
-
- def RTCdate(flag, timezone=8):
-
- 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
-
-
-
- ntptime.host = 'ntp1.aliyun.com'
- ntptime.settime()
- print(RTCdate(0),RTCdate(1))
-
-
- from machine import UART, Pin, PWM, I2C
- from ssd1306 import SSD1306_I2C
- from micropyGPS import MicropyGPS
- import time
- WIDTH = 128
- HEIGHT = 64
-
-
- i2c = I2C(0,sda=Pin(8), scl=Pin(9))
- oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)
-
-
- 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]))
-
- return gps_values,rtc
-
-
-
- while True:
- time.sleep_ms(20)
- get_GPS_values()
-
-
- 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,随时随地监控二狗子的位置、设置安全区域和接收警报通知。
- 物联网平台:物联网平台实时查看二狗子的位置。
- 警报通知:一旦二狗子离开安全区域,系统将立即发送警报通知我,以便我能够立即采取行动。
- 历史轨迹:系统能够存储和显示二狗子的历史轨迹记录,让我可以了解二狗子的活动范围和习惯。
三、可编译下载的代码
|
|