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文件,修改为以下内容:
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps = madhephaestus/ESP32Servo@^0.12.0

在这里插入图片描述
在这里插入图片描述

代码 (main.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 配置

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven集成模块打包使用

文章目录 1.问题思考&#xff08;如何对集成模块进行打包&#xff09;2.问题解决 &#xff08;如何对集成模块进行打包&#xff09;3.使用者使用该jar包(jar包安装本地仓库和使用) 1.问题思考&#xff08;如何对集成模块进行打包&#xff09; 思考&#xff1a;假设有这么一个场…

OpenVINO教程(二):图片目标检测推理应用

YOLO模型物体检测 下面是一个简单的python程序,他的功能是使用yolo11n模型对coco_bike.jpg照片进行检测,并显示检测结果 代码步骤如下: coco_bike.jpg照片加载yolo模型使用模型进行detect推理显示推理结果 下面是完整的代码 from pathlib import Pathimport urllib.request…

聚类算法(K-means、DBSCAN)

聚类算法 K-means 算法 算法原理 K-means 是一种基于类内距离最小化的划分式聚类算法&#xff0c;其核心思想是通过迭代优化将数据划分为 K 个簇。目标函数为最小化平方误差&#xff08;SSE&#xff09;&#xff1a; S S E ∑ i 1 K ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2…

Oracle在ERP市场击败SAP

2024年&#xff0c;甲骨文&#xff08;Oracle&#xff09;以87亿美元的ERP收入和6.63%的市场份额&#xff0c;首次超越SAP&#xff0c;成为全球最大的ERP应用软件供应商&#xff0c;结束了SAP自上世纪80年代以来在该领域的长期霸主地位。据APPS RUN THE WORLD的市场调研&#x…

嵌入式面试高频笔试题目解析

一、基础概念与 C 语言核心题 1. 指针与内存操作 典型题目: char str[] = "hello"; char *ptr = "world"; str[0] = H; // 合法吗? ptr[0] = W; // 合法吗?为什么?解析: str 是栈上数组,可修改内容,str[0]=H 合法。ptr 指向常量字符串区,修改会…

【Python】Selenium切换网页的标签页的写法(全!!!)

在使用selenium做网站爬取测试的时候&#xff0c;我们经常会遇到一些需要点击的元素&#xff0c;才能点击到我们想要进入的页面&#xff0c; 于是我们就要模拟 不断地 点点点击 鼠标的样子。 这个时候网页上就会有很多的标签页&#xff0c;你的浏览器网页标签栏 be like: 那…

MySQL GTID模式主从同步配置全指南:从配置到故障转移

前言 MySQL主从复制是企业级数据库架构的基础&#xff0c;而GTID(Global Transaction Identifier)模式则是MySQL 5.6版本后推出的革命性复制技术。本文将详细介绍如何配置基于GTID的主从同步&#xff0c;并包含实用的故障转移操作指南。 一、GTID模式核心优势 相比传统基于…

MAC系统下完全卸载Android Studio

删除以下文件 /Applications/Android Studio.app /Users/用户名/Library/Application Support/Google/AndroidStudio2024.2 /Users/用户名/Library/Google/AndroidStudio /Users/用户名/Library/Preferences/com.google.android.studio.plist /Users/用户名/Library/Cache…

<C#>.NET WebAPI 的 FromBody ,FromForm ,FromServices等详细解释

在 .NET 8 Web API 中&#xff0c;[FromBody]、[FromForm]、[FromHeader]、[FromKeyedServices]、[FromQuery]、[FromRoute] 和 [FromServices] 这些都是用于绑定控制器动作方法参数的特性&#xff0c;下面为你详细解释这些特性。 1. [FromBody] 作用&#xff1a;从 HTTP 请求…

# 透视 Linux 内核:Socket 机制的底层架构与运行逻辑深度解析

在由 Linux 操作系统构建的庞大网络生态中&#xff0c;Socket 作为网络通信的核心枢纽&#xff0c;承载着不同主机间应用进程的数据交互重任。无论是日常的网页浏览、在线游戏&#xff0c;还是复杂的分布式系统通信&#xff0c;Socket 都在幕后扮演着关键角色。尽管多数开发者对…

# 利用迁移学习优化食物分类模型:基于ResNet18的实践

利用迁移学习优化食物分类模型&#xff1a;基于ResNet18的实践 在深度学习的众多应用中&#xff0c;图像分类一直是一个热门且具有挑战性的领域。随着研究的深入&#xff0c;我们发现利用预训练模型进行迁移学习是一种非常有效的策略&#xff0c;可以显著提高模型的性能&#…

Excel提取图片并自动上传到文件服务器(OOS),获取文件链接

Excel提取图片并自动上传到接口 在实际项目中&#xff0c;我们可能经常会遇到需要批量从Excel文件&#xff08;.xlsx&#xff09;中提取图片并上传到特定接口的场景。今天&#xff0c;我就详细介绍一下如何使用Python实现这一功能&#xff0c;本文会手把手教你搭建一个完整的解…

jmeter利用csv进行参数化和自动断言

1.测试数据 csv测试数据如下&#xff08;以注册接口为例&#xff09; 2.jemer参数化csv设置 打开 jmeter&#xff0c;添加好线程组、HTTP信息头管理器、CSV 数据文件设置、注册请求、响应断言、查看结果树 1&#xff09; CSV 数据文件设置 若 CSV 中数据包含中文&#xff0c;…

腾讯云对象存储m3u8文件使用腾讯播放器播放

参考腾讯云官方文档&#xff1a; 播放器 SDK Demo 体验_腾讯云 重要的一步来了&#xff1a; 登录腾讯云控制台&#xff0c;找到对象存储的存储桶。 此时&#xff0c;再去刷新刚才创建的播放器html文件&#xff0c;即可看到播放画面了。

CSS 美化页面(五)

一、position属性 属性值‌‌描述‌‌应用场景‌static默认定位方式&#xff0c;元素遵循文档流正常排列&#xff0c;top/right/bottom/left 属性无效‌。普通文档流布局&#xff0c;默认布局&#xff0c;无需特殊定位。relative相对定位&#xff0c;相对于元素原本位置进行偏…

Spring MVC 核心注解与文件上传教程

一、RequestBody 注解详解 1. 基本使用 作用&#xff1a;从 HTTP 请求体中获取数据&#xff0c;适用于 POST/PUT 请求。 限制&#xff1a;GET 请求无请求体&#xff0c;不可使用该注解。 示例代码 Controller RequestMapping("/demo01") public class Demo01Cont…

js原型链prototype解释

function Person(){} var personnew Person() console.log(啊啊,Person instanceof Function);//true console.log(,Person.__proto__Function.prototype);//true console.log(,Person.prototype.__proto__ Object.prototype);//true console.log(,Function.prototype.__prot…

为您的照片提供本地 AI 视觉:使用 Llama Vision 和 ChromaDB 构建 AI 图像标记器

有没有花 20 分钟浏览您的文件夹以找到心中的特定图像或屏幕截图&#xff1f;您并不孤单。 作为工作中的产品经理&#xff0c;我总是淹没在竞争对手产品的屏幕截图、UI 灵感以及白板会议或草图的照片的海洋中。在我的个人生活中&#xff0c;我总是捕捉我在生活中遇到的事物&am…

Kafka消费者端重平衡流程

重平衡的完整流程需要消费者 端和协调者组件共同参与才能完成。我们先从消费者的视角来审视一下重平衡的流程。在消费者端&#xff0c;重平衡分为两个步骤&#xff1a;分别是加入组和等待领导者消费者&#xff08;Leader Consumer&#xff09;分配方案。这两个步骤分别对应两类…

2025年五大ETL数据集成工具推荐

ETL工具作为打通数据孤岛的核心引擎&#xff0c;直接影响着企业的决策效率与业务敏捷性。本文精选五款实战型ETL解决方案&#xff0c;从零门槛的国产免费工具到国际大厂企业级平台&#xff0c;助您找到最适合的数据集成利器。 一、谷云科技ETLCloud&#xff1a;国产数据集成工…