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.pswp.cn/web/76823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76823.shtml
英文地址,請注明出處:http://en.pswp.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;國產數據集成工…