Arduino 项目:太阳能跟踪器

        在本文中,您将逐步学习如何使用 光敏电阻和舵机制作双轴太阳能跟踪器 Arduino 项目。在这个项目中,我们将使用一些光敏传感器来跟踪阳光,并将利用舵机将太阳能电池板引导到可提高其效率的区域。

此项目所需的组件

序号部件名称描述数量备注
1Arduino UNOArduino UNO R31
2舵机微型舵机 - SG902
3        光敏电阻LDR(光敏电阻)传感器4
4电阻10k欧姆电阻4
5面包板迷你面包板1

光敏电阻的工作原理

        光敏电阻。实际上,它是一种光敏设备。当光线照射到它上面时,电阻会减小。在这个项目中,我们使用 4 个光敏电阻来检测阳光。

        根据上方两个光敏电阻和下方两个光敏电阻的读数差额,调整垂直方向的舵机角度,根据左边两个光敏电阻和右面两个光敏电阻的读数差额调整水平方向的舵机角度,从而更好地放置太阳能电池板,以最大限度地提高其效率。

接线图

注意

1.光敏电阻之间要使用隔断将各个光敏电阻之间分隔开来。

2.在实施项目时应该注意调试光敏电阻之间的距离。

代码

#include <Servo.h>Servo horizontal; //水平方向电机
int servoh = 180;
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAXServo vertical; //垂直方向电机
int servov = 45;
int servovLimitHigh = 60;
int servovLimitLow = 1;// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left 
int ldrrt = A2; //LDR top rigt 
int ldrld = A1; //LDR down left 
int ldrrd = A3; //ldr down rigt void setup() {horizontal.attach(9);//水平方向舵机接9号管脚vertical.attach(10);//垂直方向舵机接10号管脚horizontal.write(180);//初始化水平方向舵机为180度vertical.write(45);//初始化垂直方向舵机为45度delay(2500);
}
void loop() {int lt = analogRead(ldrlt); // 上左光敏电阻int rt = analogRead(ldrrt); // 上右光敏电阻int ld = analogRead(ldrld); // 下左光敏电阻int rd = analogRead(ldrrd); // 下右光敏电阻int dtime = 10; //检测时间int tol = 90; int avt = (lt + rt) / 2; // 顶部两个光敏电阻读数平均值int avd = (ld + rd) / 2; // 下方两个光敏电阻读数平均值int avl = (lt + ld) / 2; // 左边两个光敏电阻读数平均值int avr = (rt + rd) / 2; // 右边两个光敏电阻读数平均值int dvert = avt - avd; // 检测上下两组光敏电阻读数差异,这个差异决定了垂直舵机的转向角度int dhoriz = avl - avr;// 检测左右两组光敏电阻读数差异,这个差异决定了水平舵机的转向角度if (-1 * tol > dvert || dvert > tol){if (avt > avd){servov = ++servov;//顶部传感器值大于底部值,舵机角度增加。if (servov > servovLimitHigh){servov = servovLimitHigh;//转动角度大于最大值时角度设置为最大值。}}else if (avt < avd){ servov = --servov;//顶部传感器值小于底部值,舵机角度减小if (servov < servovLimitLow){servov = servovLimitLow;//转动角小于最大值时设置为最小值。}}vertical.write(servov);//转动舵机。}if (-1 * tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle{if (avl > avr){servoh = --servoh;if (servoh < servohLimitLow){servoh = servohLimitLow;}}else if (avl < avr){servoh = ++servoh;if (servoh > servohLimitHigh){servoh = servohLimitHigh;}}else if (avl = avr){delay(5000);}horizontal.write(servoh);}delay(dtime);}

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

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

相关文章

Excel根据身份证号提取信息

概览 本篇文章主要对根据身份证号码提取出生年月日、年龄、性别、退休年龄这三项进行讲解。 一. 提取出生年月日 公式&#xff1a;TEXT(MID(B2,7,8),“0000-00-00”) MID(B2,7,8)&#xff1a;表示从单元格 B2 中的字符串&#xff08;这里是身份证号&#xff09;&#xff0c…

《web应用技术》第十一次作业

1、验证过滤器进行权限验证的原理。 代码展示&#xff1a; Slf4j WebFilter(urlPatterns "/*") public class LoginCheckFilter implements Filter { Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) thro…

未来工作场所:数字化转型的无限可能

探索技术如何重塑我们的工作环境与协作方式 引言 在21世纪的第三个十年&#xff0c;数字化转型已不再仅仅是科技公司的专利&#xff0c;它如同一股不可阻挡的潮流&#xff0c;深刻地渗透到了每一个行业的血脉之中。从灵活的远程办公模式到工作流程的智能化重构&#xff0c;技术…

Java高级技术探索:深入理解JVM内存分区与GC机制

文章目录 引言JVM内存分区概览垃圾回收机制&#xff08;GC&#xff09;GC算法基础常见垃圾回收器ParNew /Serial old 收集器运行示意图 优化实践结语 引言 Java作为一门广泛应用于企业级开发的编程语言&#xff0c;其背后的Java虚拟机&#xff08;JVM&#xff09;扮演着至关重…

html的网页制作代码分享

<!-- prj_8_2.html --> <!DOCTYPE html> <html lang "EN"><head><meta charset"utf-8" /><title>页面布局设计</title><style type "text/css">*{padding: 0px;margin:0px;}#header{back…

Web端在线/离线Stomp服务测试与WebSocket服务测试

Stomp服务测试 支持连接、发送、订阅、接收&#xff0c;可设置请求头、自动重连 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/lxbho9lkzvgc 演练页面&#xff1a;http://www.da…

11_从注意力机制到序列处理的革命:Transformer原理详解

1.1 简介 Transformer是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;尤其是自然语言处理任务&#xff0c;如机器翻译、文本摘要等。该模型由Vaswani等人在2017年的论文《Attention is All You Need》中首次提出&#xff0c;它的出现极大地推动了自然语言处理…

【推荐算法的评估与调试】离线评估+在线A/B Test

文章目录 1、离线评估1.1、评估排序算法1.1.1、AUC和GAUC1.1.2、NDCG 1.2、评估召回算法1.2.1、Precision&Recall1.2.2、MAP1.2.3、Hit Rate1.2.4、持续评估 2、在线评估2.1、线上&#xff1a;流量划分2.1.1、根据User ID划分流量2.1.2、分层重叠划分流量2.1.3、A/A实验的重…

没那么简单!浅析伦敦金与美元的关系

伦敦金价与美元的关系可以被比喻为跷跷板的两端&#xff0c;它们的价格走势往往呈现出此消彼长的关系&#xff1a;当美元表现强势的时候&#xff0c;伦敦金的价格可能承受到压力&#xff1b;相反&#xff0c;当美元疲软时&#xff0c;黄金往往会成为避险资产&#xff0c;令伦敦…

YOLOv10涨点改进|引入BoTNet结构与CA注意力机制,打造高效轻量级检测器

📚 专栏地址:《YOLOv10算法改进实战》 👉 独家改进,对现有YOLOv10进行二次创新,提升检测精度,适合科研创新度十足,强烈推荐 🌟 统一使用 YOLOv10 代码框架,结合不同模块来构建不同的YOLO目标检测模型。 💥 本博客包含大量的改进方式,降低改进难度,改进点包含【B…

数据结构(一):绪论——数据结构基本概念真题

1&#xff1a;&#xff08;2017暨南大学&#xff09;计算机内部数据处理的基本单元是&#xff08;B&#xff09; A&#xff1a;数据 B&#xff1a;数据元素 C&#xff1a;数据项 D&#xff1a;数据库 解析&#xff1a;计算机内部数据处理的基本单元是数据…

安装操作系统1-Win10版本介绍及硬件要求

注意&#xff1a;安装系统&#xff0c;首先弄清有哪些版本及所需硬件环境。 1.Win10有哪些版本 微软将 Win10为以下7个版本&#xff1a; Windows 10 家庭版&#xff08;Home&#xff09; 面向所有普通用户&#xff0c;提供Win 10的基本功能。此版本适合个人家庭用户使用&am…

6-7 最大子段和(分治法)

6-7 最大子段和&#xff08;分治法&#xff09; 分数 15 全屏浏览 作者 王东 单位 贵州师范学院 最大子段和问题。给定由n个整数组成的序列&#xff0c;求序列中子段的最大和&#xff0c;若所有整数均为负整数时定义最大子段和为0。 函数接口定义&#xff1a; long long …

Qt 焦点系统关键点总结

1.1 焦点窗口 指的是当前时刻拥有键盘输入的窗口。 Qt提供了如下接口&#xff0c;用于设置窗口是否是”可获取焦点“窗口&#xff1a; void QWidget::setFocusPolicy(Qt::FocusPolicy policy); Qt::FocusPolicy Qt::TabFocus 与焦点链相关&#xff0c;详解见下一…

STM32F103ZET6_HAL_CAN

1定义时钟 2定义按键 按键上拉电阻 3开启串口 4打开CAN&#xff08;具体什么意思上一篇讲了&#xff09; 5生成代码 /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief …

鸿蒙HarmonyOS开发 preferences首选项

目录 引言 官方介绍 如何使用 完整示例 监听首选项变化 总结 引言 在鸿蒙开发中&#xff0c;不可避免的需要用到一些简单数据的持久化存储&#xff0c;今天就总结一下鸿蒙开发中的持久化存储库ohos.data.preferences (用户首选项)&#xff0c;有过Android原生开发经验的…

在Spring中如何手动开启事务(使用编程式事务)

这里写自定义目录标题 一、使用 transactionManager1、向容器中注入事务管理器2、使用 transactionManager 提交事务3、测试 二、使用TransactionTemplate1、向容器中注入 TransactionTemplate2、开启事务 一、使用 transactionManager 1、向容器中注入事务管理器 Configurat…

JAVA面试题整理——内存溢出与内存泄露的区别与联系

内存溢出与内存泄露的区别与联系 在前面jvm学习整理的时候其实用过一个简单的例子了解过内存溢出&#xff0c;在jvm内存模型章节下&#xff0c;大家有兴趣的可以去看看&#xff1a;JVM初学 GC_knowwait的博客-CSDN博客 内存溢出 内存溢出&#xff08;out of memory&#xff09…

LSF 任务运行失败,为什么任务状态却为DONE ?

LSF 任务运行失败&#xff0c;为什么任务状态却为DONE &#xff1f; 问题 用户反馈提交任务后&#xff0c;任务仅运行 1&#xff5e;2 秒后就退出&#xff0c;没有正常结束。但通过 bjobs 查看任务&#xff0c;却显示任务状态为 DONE 即正常退出。因此用户怀疑 LSF 有问题&am…

关于ReactV18的页面跳转传参和接收

一、使用路由方式进行传参和接收&#xff08;此处需使用 useNavigate 和 useParams 两个hooks&#xff09; 1 首先需要配置好路由形式如下 :id(参数) { path: "/articleDetail/:id", element: lazyElement(<ArticleDetail />), }, 2 传递参数 使用 useNaviga…