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

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

相关推荐
老梁agent2 天前
Agent 如何看懂时序数据?时间序列查询的 Tool 设计模式
物联网·agent
Inhand陈工8 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
大鱼>8 天前
大语言模型+物联网:LLM理解物理世界
物联网·struts·语言模型·多模态·aiot
果丁智能8 天前
物联网智能锁赋能集中式住宿:身份核验与远程权限管控的全链路技术实践
大数据·人工智能·物联网·智能家居
国产化创客8 天前
ESP32 CameraWebServer 原生摄像头项目全解析
物联网·开源·嵌入式·实时音视频·智能硬件
谁似人间西林客8 天前
数据智能怎么赋能工业制造?物联网场景落地方法解析
物联网·制造
InHand云飞小白8 天前
无人值守站点网络困境?工业级路由器IR315破解连接难题
网络·物联网·4g·工业路由器·4g路由器·iiot·蜂窝路由器
MetrixAeroCore8 天前
Metrix 国际物联网卡资费方案|多场景共享流量池·按需扩容
物联网
by————组态8 天前
Ricon组态系统 - 新一代Web可视化组态平台
前端·后端·物联网·架构·组态·组态软件
王二端茶倒水8 天前
智慧园区网络运营:认证、分权、运维和安全闭环
运维·物联网·架构