• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【 DigiKey DIY原创大赛】自行车智能系统

一、系统概述

该自行车智能系统提供以下主要功能:

1.GPS 定位与导航:实时获取自行车位置,支持导航功能。
2.防盗报警:通过传感器检测自行车的移动或振动,当检测到异常时触发报警。
3.数据显示:通过显示屏实时显示速度、距离、时间、GPS 位置等信息。
4.无线连接:通过蓝牙或 Wi-Fi 将数据传输到手机应用,实现更丰富的功能。

二、所需硬件组件

1.ESP32 开发板具有强大的处理能力和丰富的接口,支持 Wi-Fi 和蓝牙。
2.GPS 模块推荐使用 NEO-6M ,通过串口与 ESP32 通信。
3.显示屏OLED 显示屏(0.96 英寸 I2C OLED)适合显示基本信息。
4.防盗传感器陀螺仪/加速度计模块(如 MPU6050)用于检测运动和振动。
5.蜂鸣器
用于发出报警声。
6.电源管理锂电池及充电模块( TP4056)。电压稳压器(如 AMS1117)将电池电压转换为 5V 或 3.3V。
7.其他配件按键(用于用户交互,开关机、模式切换)。防水外壳(保护电子元件)。连接线和面包板。

三、系统架构

硬件连接

1.ESP32 与 GPS 模块连接 ESP32 的 UART 引脚(如 RXD2, TXD2)到 GPS 模块的 TX, RX 引脚。电源连接 3.3V 和 GND。
2.ESP32 与显示屏OLED 显示屏通过 I2C 接口连接 SDA 和 SCL 引脚。
3.ESP32 与防盗传感器陀螺仪/加速度计模块通过 I2C 接口连接 SDA 和 SCL 引脚。
振动传感器连接到 ESP32 的 GPIO 引脚。
4.ESP32 与蜂鸣器蜂鸣器连接到 ESP32 的 GPIO 引脚,通过一个限流电阻。
5.电源连接电池通过充电模块连接到 ESP32 的 5V 或 3.3V 输入。确保所有模块的 GND 相连。

软件架构

1.GPS 数据处理使用 ESP32 的 UART 接口读取 GPS 模块数据。解析 NMEA 协议获取位置信息(经度、纬度、速度等)。
2.防盗检测读取陀螺仪/加速度计数据,检测是否有异常运动或振动。或者检测振动传感器的状态变化。
3.数据显示使用相应的库驱动 OLED 。显示速度、距离、时间、位置等信息。
4.报警控制当检测到异常运动时,控制蜂鸣器发出报警声。可以通过无线方式发送报警信息到手机。
5.无线通信(:使用 ESP32 的蓝牙功能,将数据传输到手机应用。实现实时监控和远程控制。

四、实现步骤

1. 硬件搭建

根据上述连接方案,将所有组件连接到 ESP32 开发板上。确保所有连接稳固,避免松动或短路。

2. 软件开发

开发环境使用 Arduino IDE 进行 ESP32 开发。

库安装

GPS 模块:安装 TinyGPS++ 库。

OLED 显示屏:

安装 Adafruit_SSD1306 和 Adafruit_GFX 库。

陀螺仪/加速度计:安装 MPU6050 库。

#include <Wire.h>
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <Adafruit_SSD1306.h>
#include <MPU6050.h>

// GPS 模块串口
#define RX_PIN 16
#define TX_PIN 17
SoftwareSerial gpsSerial(RX_PIN, TX_PIN);

// OLED 显示
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// MPU6050 陀螺仪
MPU6050 mpu;

// 报警控制
const int buzzerPin = 2;

void setup() {
  Serial.begin(115200);
  gpsSerial.begin(9600);
  Wire.begin();
  
  // 初始化 OLED
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.clearDisplay();
  display.display();
  
  // 初始化 MPU6050
  mpu.initialize();
  if(!mpu.testConnection()) {
    Serial.println("MPU6050 connection failed");
    while(1);
  }
  
  pinMode(buzzerPin, OUTPUT);
  digitalWrite(buzzerPin, LOW);
}

void loop() {
  // GPS 数据处理
  while (gpsSerial.available() > 0) {
    char c = gpsSerial.read();
    gps.encode(c);
  }
  
  // 获取 GPS 数据
  if (gps.location.isUpdated()) {
    float lat = gps.location.lat();
    float lon = gps.location.lng();
    float speed = gps.speed.kmph();
    // 更新显示
    display.clearDisplay();
    display.setCursor(0,0);
    display.print("Lat: ");
    display.println(lat, 6);
    display.print("Lon: ");
    display.println(lon, 6);
    display.print("Speed: ");
    display.print(speed);
    display.println(" km/h");
    display.display();
  }
  
  // 防盗检测
  int16_t ax, ay, az;
  mpu.getAcceleration(&ax, &ay, &az);
  float totalAccel = sqrt(ax*ax + ay*ay + az*az);
  if (totalAccel > 15.0) { // 阈值根据实际情况调整
    digitalWrite(buzzerPin, HIGH);
  } else {
    digitalWrite(buzzerPin, LOW);
  }
  
  delay(500);
}

下一步 实现:

无线通信实现蓝牙或 Wi-Fi 功能,将数据发送到手机应用,实现实时监控。

用户界面设计更友好的用户界面,提供更多交互功能。

节能优化采用低功耗模式,延长电池续航时间。

防盗增强增加远程报警功能,通过手机接收报警信息。

全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法