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 小时前
基于STM32物联网冻保鲜运输智能控制系统
stm32·嵌入式硬件·物联网
明达智控技术12 小时前
MR30分布式IO在全自动中药煎药机中的应用
分布式·物联网·自动化
ManThink Technology15 小时前
做好LoRaWAN的传感器都需要实现哪些功能点?
物联网
华普微HOPERF18 小时前
数字隔离器,新能源汽车PTC中的“电气安全卫士”
科技·物联网·汽车
糖糖单片机设计1 天前
硬件开发_基于物联网的老人跌倒监测报警系统
stm32·单片机·嵌入式硬件·物联网·51单片机
TDengine (老段)1 天前
TDengine 时间函数 WEEKDAY() 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
TDengine (老段)1 天前
从 ETL 到 Agentic AI:工业数据管理变革与 TDengine IDMP 的治理之道
数据库·数据仓库·人工智能·物联网·时序数据库·etl·tdengine
Zero_Era2 天前
LKT4202UGM重新定义物联网设备安全标准
物联网·安全·嵌入式
时序数据说2 天前
时序数据库IoTDB的核心优势
大数据·数据库·物联网·开源·时序数据库·iotdb
TDengine (老段)2 天前
中国时序数据库行业市场概览、投资热点及发展趋势预测报告
数据库·物联网·时序数据库·iot·tdengine