IOT项目——双轴追光系统

双轴太阳能追光系统 - ESP32实现

系统概述

这个系统使用:

  • ESP32开发板
  • 2个舵机(水平方向和垂直方向)
  • 4个光敏电阻(用于检测光照方向)
  • 适当的电阻(用于光敏电阻分压)

接线示意图

复制代码
+-------------------+       +-----------------+
|      ESP32        |       |    光敏电阻     |
|                   |       |    L1   L2      |
|               GND |-------| GND    GND      |
|              3.3V |-------| VCC    VCC      |
|              GPIO32|------| L1信号          |
|              GPIO33|------| L2信号          |
|              GPIO34|------| L3信号          |
|              GPIO35|------| L4信号          |
|                   |       |                 |
|              GPIO25|------| 水平舵机信号    |
|              GPIO26|------| 垂直舵机信号    |
|                   |       |                 |
|               GND |-------| 舵机GND         |
|              5V   |-------| 舵机VCC        |
+-------------------+       +-----------------+

光敏电阻布置:

  • L1: 左侧
  • L2: 右侧
  • L3: 上侧
  • L4: 下侧

所需组件清单

  1. ESP32开发板
  2. SG90舵机 x2
  3. 光敏电阻 x4
  4. 10kΩ电阻 x4
  5. 面包板和跳线若干
  6. 太阳能板(可选,用于实际应用)

VSCode代码实现

首先确保您已安装PlatformIO插件,然后创建一个新的ESP32项目。

完整的环境配置步骤

  1. 安装必要的工具
    安装VSCode

在VSCode扩展商店中搜索安装PlatformIO IDE

  1. 创建新项目
    按Ctrl+Shift+P → 输入PlatformIO: New Project

选择板子型号:ESP32 Dev Module

选择框架:Arduino

完成创建

  1. 修改配置文件
    打开platformio.ini文件,修改为以下内容:
c 复制代码
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps = 
    madhephaestus/ESP32Servo@^0.12.0


代码 (main.cpp)

cpp 复制代码
#include <Arduino.h>
#include <ESP32Servo.h>

// 定义光敏电阻引脚
#define L1_PIN 32  // 左侧
#define L2_PIN 33  // 右侧
#define L3_PIN 34  // 上侧
#define L4_PIN 35  // 下侧

// 定义舵机引脚
#define SERVO_HORIZ_PIN 25  // 水平舵机
#define SERVO_VERT_PIN 26   // 垂直舵机

// 创建舵机对象
Servo servoHoriz;  // 水平方向舵机
Servo servoVert;   // 垂直方向舵机

// 舵机初始位置
int horizPos = 90;  // 水平初始位置 (0-180)
int vertPos = 90;   // 垂直初始位置 (0-180)

// 光敏电阻读数
int l1, l2, l3, l4;

// 舵机移动步长
const int STEP = 2;

// 光敏电阻阈值差
const int THRESHOLD = 50;

void setup() {
  Serial.begin(115200);
  
  // 初始化舵机
  servoHoriz.attach(SERVO_HORIZ_PIN);
  servoVert.attach(SERVO_VERT_PIN);
  
  // 设置初始位置
  servoHoriz.write(horizPos);
  servoVert.write(vertPos);
  
  // 光敏电阻不需要设置模式,因为它们是模拟输入
}

void loop() {
  // 读取所有光敏电阻值
  l1 = analogRead(L1_PIN);  // 左
  l2 = analogRead(L2_PIN);  // 右
  l3 = analogRead(L3_PIN);  // 上
  l4 = analogRead(L4_PIN);  // 下
  
  // 打印传感器值用于调试
  Serial.printf("L1: %d, L2: %d, L3: %d, L4: %d\n", l1, l2, l3, l4);
  
  // 水平方向控制
  int horizDiff = l1 - l2;
  if (abs(horizDiff) > THRESHOLD) {
    if (horizDiff > 0 && horizPos < 180) {
      horizPos += STEP;  // 向左转
    } else if (horizDiff < 0 && horizPos > 0) {
      horizPos -= STEP;  // 向右转
    }
    servoHoriz.write(horizPos);
  }
  
  // 垂直方向控制
  int vertDiff = l3 - l4;
  if (abs(vertDiff) > THRESHOLD) {
    if (vertDiff > 0 && vertPos < 180) {
      vertPos += STEP;  // 向上转
    } else if (vertDiff < 0 && vertPos > 0) {
      vertPos -= STEP;  // 向下转
    }
    servoVert.write(vertPos);
  }
  
  // 打印当前位置
  Serial.printf("Horizontal Position: %d, Vertical Position: %d\n", horizPos, vertPos);
  
  // 延迟以避免过快响应
  delay(100);
}

platformio.ini 配置

ini 复制代码
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps = 
    ESP32Servo

系统工作原理

  1. 光敏电阻检测:四个光敏电阻分别检测四个方向的光照强度。
  2. 方向判断:通过比较左右光敏电阻的值差判断水平方向,比较上下光敏电阻的值差判断垂直方向。
  3. 舵机控制:根据光照差异调整舵机位置,使太阳能板始终朝向光照最强的方向。
  4. 阈值控制:只有当光照差异超过阈值时才调整位置,避免微小变化导致的频繁调整。

模型

尽管这个模型在网络上流传甚广,但是我没有找到视频中的程序和模型,使用我自己构建了一个

优化建议

  1. 可以添加PID控制算法使运动更加平滑
  2. 可以增加夜间复位功能,当所有光敏电阻值都很低时回到初始位置
  3. 可以添加WiFi功能,通过手机APP监控和调整系统
  4. 考虑添加太阳能电池电压检测功能

注意事项

  1. 确保舵机电源足够(可能需要外部电源)
  2. 光敏电阻需要合理布置,避免相互干扰
  3. 根据实际光照情况调整THRESHOLD和STEP值
  4. 注意舵机的机械限位,避免损坏

这个系统可以有效地跟踪太阳位置,提高太阳能板的发电效率。您可以根据实际需求进一步调整和优化代码。

相关推荐
小白橘颂1 天前
【C语言】基础概念梳理(一)
c语言·开发语言·stm32·单片机·mcu·物联网·51单片机
学术小白人1 天前
会议征稿!2026年制造工程与数字仿真国际学术会议(MEDS 2026)
大数据·物联网·计算机·rdlink研发家·智能感知
jianqiang.xue2 天前
嵌入式软件架构设计:从分层思想到状态机实现,打造高可维护、高可移植的工程级代码
c语言·驱动开发·stm32·单片机·mcu·物联网·iot
zhaoshuzhaoshu2 天前
蓝牙音频协议与编解码介绍(含详细参数对比)
物联网·蓝牙·无线
weixin_505154462 天前
博维数孪,重塑3D作业指导新时代
人工智能·物联网·3d·智慧城市·数据安全·数字孪生
xu_wenming2 天前
为什么要在项目中加入 ESP‑NN(神经网络)
mcu·物联网·算法·iot
zhaoshuzhaoshu2 天前
蓝牙A2DP(LE Audio)协议技术发展史
物联网·蓝牙·无线
weixin_436182422 天前
物联网行业会议时间汇总:按月度整理参会指南
物联网
txh05072 天前
物联网esp8266小记
物联网·学习·esp8266
颜颜yan_2 天前
面向工业物联网的大数据底座选型:Apache IoTDB 的架构能力与落地价值分析
大数据·物联网·apache