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

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

相关推荐
汤姆yu12 小时前
基于ESP32的玫瑰大棚智能系统
物联网·esp32·arduino·大棚温湿度
星空真迷人13 小时前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
hongmai66688813 小时前
GK7205V300芯片深度解析:H.265低功耗视觉主控,助力安防监控高效选型
arm开发·嵌入式硬件·物联网·智能家居·h.265·risc-v
微硬创新13 小时前
耐达讯自动化:16路4-20mA模拟信号,该怎样平稳接入PROFINET控制系统?
人工智能·物联网·网络协议·自动化·信息与通信
云边云科技_云网融合14 小时前
金融医疗混合云组网如何满足数据安全与合规要求?
大数据·人工智能·物联网
mengpp_12345615 小时前
物联网云平台可以离线使用吗?摒弃云端依赖,工业现场离线自动化解决方案
运维·物联网·自动化·华为云
武汉唯众智创17 小时前
高职物联网应用技术专业实训室怎么建?嵌入式开发实训室建设方案详解
物联网·物联网实训室·物联网嵌入式实训室·物联网实训室解决方案
星恒讯工业路由器17 小时前
2G/3G网络退网趋势解读:对工业物联网设备的影响与应对策略
物联网·信息与通信·工业物联网·工业通信·5g redcap·2g3g退网·4g/5g升级
科莱特SAP18 小时前
精准匹配双向赋能:科莱特数智人才猎场重塑数字化人才服务模式
大数据·人工智能·物联网·人力资源·科莱特·科莱特人才服务
延凡科技1 天前
工业锅炉智慧云管控平台解决方案|物联网远程监测、智能预警与能耗优化
物联网·远程控制·工业物联网·设备运维·智慧锅炉