1319|6

12

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

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

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

一、 3-5分钟短视频

 
 
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
点赞 关注
 
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 

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

点评

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

回复

420

帖子

0

TA的资源

纯净的硅(中级)

板凳
 

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

 
 
 

回复

12

帖子

2

TA的资源

一粒金砂(中级)

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

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

点评

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

回复

7244

帖子

2

TA的资源

版主

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

成为全村最靓的仔!

 
 
 

回复

7062

帖子

11

TA的资源

版主

6
 

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

 
 
 

回复

1633

帖子

0

TA的资源

五彩晶圆(初级)

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

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表