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. 注意舵机的机械限位,避免损坏

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

相关推荐
会周易的程序员11 分钟前
STVM OSAL 层设计方案
物联网·iot·软plc·iec61131·stvm·open plc
数字新视界24 分钟前
国产信创动环监控系统的未来趋势分析
物联网·3d·数字孪生·三维可视化·数据可视化
会周易的程序员37 分钟前
STVM OSAL 层架构设计文档
c++·物联网·嵌入式·虚拟机·iot·软plc·iec61131
调试优选官2 小时前
2026年物联网应用开发公司上榜品牌解析:D-coding技术纵深、项目规范与长期服务观察
物联网·开发经验·d-coding
白搞电子2 小时前
ESP32-S31 WASM 应用开发实录:重力弹球从电脑预览到 ESP-Mosaico 实机测试
单片机·嵌入式硬件·物联网·电脑·wasm
Mr_韩3 小时前
子网路由实战:无需公网 IP,异地直接访问家庭内网全部设备
运维·网络·物联网·nas
Quanqiucard3 小时前
矿山安全管控升级,布控球机物联网卡成视频稳定回传关键
物联网·安全
microrain4 小时前
同一个值,四个名字,四套口径:SagooIoT 属性上报链路的 Canonical 收敛
物联网·golang·开源·sagooiot
乐橙开放平台4 小时前
通道国标 ID 贴反会串店:海康大华宇视摄像头怎么用 GB28181 统一接入?
网络·笔记·物联网·自动化·音视频·智能家居
辛迪聊物业数字化5 小时前
物业管理系统新手部署与实操指南
数据库·物联网·架构·系统架构