湖北省建设厅招骋网站网站开发工程师的要求

pingmian/2026/1/19 22:00:41/文章来源:
湖北省建设厅招骋网站,网站开发工程师的要求,天津网站建设外包,云天下网站建设一、前言 随着对可再生能源的需求不断增长#xff0c;太阳能作为一种清洁、可持续的能源形式#xff0c;受到越来越多的关注和应用。太阳能光板通常固定在一个固定的角度上#xff0c;这限制了它们对太阳光的接收效率。为了充分利用太阳能资源#xff0c;提高太阳能光板的…一、前言 随着对可再生能源的需求不断增长太阳能作为一种清洁、可持续的能源形式受到越来越多的关注和应用。太阳能光板通常固定在一个固定的角度上这限制了它们对太阳光的接收效率。为了充分利用太阳能资源提高太阳能光板的收集效率需要设计一个能够自动跟踪太阳光的系统。 本项目采用基于单片机的设计方案主控芯片选择STC89C52。在太阳能光板的四个角上安装了四个光敏电阻它们用于检测四个方向太阳光的最强位置。每个光敏电阻通过PCF8591模块与主控芯片相连利用模数转换器ADC采集各个通道的数据值。 通过对四个光敏传感器采集到的数据进行处理和比较主控芯片能够确定太阳光的最强位置所在。然后通过控制两个28BYJ-48-5V步进电机的运动太阳能光板可以实现左右和上下方向的旋转。通过调整太阳能光板的倾斜角度使其与太阳光保持垂直以获得最大的太阳能收集效率。 该太阳能跟踪器的设计旨在实现自动化的太阳光追踪以提高太阳能光板的能源收集效率。通过使用光敏电阻、ADC转换和步进电机控制等技术手段系统能够准确地确定太阳光的位置并自动调整太阳能光板的朝向。这将大大提高太阳能系统的能源输出并为可再生能源的利用做出贡献。 二、系统设计思路 2.1 硬件选型 【1】主控芯片STC89C52 STC89C52是一款高性价比的单片机具有丰富的外设和强大的计算能力。采用基于MCS-51内核的8位单片机架构拥有存储容量大8KB Flash和256B RAM和丰富的IO口32个适合控制太阳能跟踪器系统的各种功能。 【2】光敏电阻选择具有高灵敏度和较小尺寸的光敏电阻并根据光照条件进行选择。通过与PCF8591模块连接可以将光敏电阻的电阻值变化转换为相应的模拟电压信号。 【3】ADC模块PCF8591 PCF8591是一款常用的4通道12位ADC模块适用于将模拟信号转换为数字信号。通过连接4个光敏电阻到PCF8591的4个输入通道上可以实现数据的采集和转换。 【4】步进电机28BYJ-48-5V 28BYJ-48-5V步进电机是一个小型、低功耗的步进电机适用于低速应用。使用两个步进电机可以控制太阳能光板在水平和垂直方向上的旋转为太阳能跟踪器提供多个方向的调整。 2.2 设计思路 【1】硬件连接根据项目需求将STC89C52主控芯片与PCF8591模块、ULN2003驱动模块、28BYJ-48-5V步进电机、光敏电阻等进行正确的引脚连接。 【2】初始化设置在主函数开始部分进行必要的初始化设置例如设置I/O口方向、定义引脚连接、初始化I2C总线等。 【3】光敏电阻采集通过PCF8591模块采集4个光敏电阻的数据。使用I2C通信协议向PCF8591模块发送控制字节选择光敏电阻通道并通过ADC转换获取光敏电阻的数值。将采集到的数据存储在名为lightSensor的数组中每个元素对应一个光敏电阻通道。 【4】确定最强光位置根据采集到的光敏电阻数据通过比较找到最强光的位置。遍历lightSensor数组记录最大值的索引表示最强光所在的方向。 【5】步进电机控制根据最强光的位置控制步进电机的旋转使太阳能光板朝向最大光的方向。根据最大光位置的索引使用条件语句判断旋转方向然后调用StepperMotor_Rotate函数控制步进电机旋转。根据需求可以设置旋转步数和旋转方向以实现精确的转动控制。 【6】延时等待在步进电机旋转完成后可以添加适当的延时以等待太阳能光板调整到新的位置。可以根据实际情况调整延时时间确保光板稳定后进行下一次采集和控制。 【7】循环执行将上述步骤放置在一个无限循环中以实现持续的太阳能跟踪。程序将不断采集光敏电阻数据、确定最强光位置并通过步进电机控制太阳能光板旋转以获得最大的太阳能收集效率。 三、项目代码 3.1 PCF8591采集代码 以下是利用PCF8591的光敏电阻采集并通过串口打印的实现代码。 #include reg52.h #include intrins.h// 定义PCF8591模块地址 #define PCF8591_ADDR 0x90// 定义光敏电阻通道 #define LDR_CHANNEL_1 0x00 #define LDR_CHANNEL_2 0x01 #define LDR_CHANNEL_3 0x02 #define LDR_CHANNEL_4 0x03// 定义波特率 #define BAUDRATE 9600// 函数声明 void delay(unsigned int time); void uartInit(); void uartSendByte(unsigned char dat); void uartSendString(unsigned char *str); void pcf8591Init(); unsigned char pcf8591ReadChannel(unsigned char channel);void main() {unsigned char ldr1, ldr2, ldr3, ldr4;unsigned char str[20];uartInit(); // 初始化串口pcf8591Init(); // 初始化PCF8591模块while(1) {// 读取光敏电阻数据ldr1 pcf8591ReadChannel(LDR_CHANNEL_1);ldr2 pcf8591ReadChannel(LDR_CHANNEL_2);ldr3 pcf8591ReadChannel(LDR_CHANNEL_3);ldr4 pcf8591ReadChannel(LDR_CHANNEL_4);// 打印光敏电阻数据到串口sprintf(str, LDR1: %d, LDR2: %d, LDR3: %d, LDR4: %d\r\n, ldr1, ldr2, ldr3, ldr4);uartSendString(str);delay(1000); // 延时一段时间后再进行下一次采集和打印} }// 延时函数 void delay(unsigned int time) {unsigned int i, j;for(i 0; i time; i) {for(j 0; j 125; j);} }// 初始化串口 void uartInit() {TMOD 0x20; // 设置定时器1为模式2SCON 0x50; // 设置串口工作方式1允许接收TH1 256 - _cror(_cror(FOSC/12, 4), 4) / BAUDRATE; // 设置波特率TR1 1; // 启动定时器1 }// 串口发送单个字节 void uartSendByte(unsigned char dat) {SBUF dat;while (!TI); // 等待发送完成TI 0; // 清除发送完成标志位 }// 串口发送字符串 void uartSendString(unsigned char *str) {while (*str) {uartSendByte(*str);str;} }// 初始化PCF8591模块 void pcf8591Init() {// 发送启动转换命令I2C_Start(); I2C_Send_Byte(PCF8591_ADDR); // 发送设备地址I2C_Wait_Ack();I2C_Send_Byte(0x40); // 发送转换命令选择通道0I2C_Wait_Ack();I2C_Stop(); }// 读取PCF8591模块的指定通道的数据值 unsigned char pcf8591ReadChannel(unsigned char channel) {unsigned char value;I2C_Start();I2C_Send_Byte(PCF8591_ADDR); // 发送设备地址I2C_Wait_Ack();I2C_Send_Byte(channel); // 发送通道号I2C_Wait_Ack();I2C_Start(); // 重新启动I2C_Send_Byte(PCF8591_ADDR 1); // 发送读取命令I2C_Wait_Ack();value I2C_Read_Byte(); // 读取数据I2C_Send_NAck();I2C_Stop();return value; } 3.2 主项目框架代码 #include reg52.h// 定义PCF8591模块的引脚连接 #define PCF8591_ADDRESS 0x90 // PCF8591模块的I2C地址 #define PCF8591_CONTROL 0x00 // PCF8591模块的控制寄存器地址// 定义步进电机的引脚连接 sbit IN1 P1^0; // 步进电机引脚1 sbit IN2 P1^1; // 步进电机引脚2 sbit IN3 P1^2; // 步进电机引脚3 sbit IN4 P1^3; // 步进电机引脚4// 定义步进电机旋转方向 #define CW 0 // 顺时针 #define CCW 1 // 逆时针// 定义光敏电阻通道 #define CHANNEL_0 0 // 光敏电阻通道0 #define CHANNEL_1 1 // 光敏电阻通道1 #define CHANNEL_2 2 // 光敏电阻通道2 #define CHANNEL_3 3 // 光敏电阻通道3// 延时函数 void delay(unsigned int ms) {unsigned int i, j;for (i ms; i 0; i--)for (j 110; j 0; j--); }// I2C总线启动 void I2C_Start() {SDA 1;SCL 1;delay(1);SDA 0;delay(1);SCL 0;delay(1); }// I2C总线停止 void I2C_Stop() {SDA 0;SCL 1;delay(1);SDA 1;delay(1); }// I2C发送一个字节的数据 void I2C_SendByte(unsigned char dat) {unsigned char i;for (i 0; i 8; i) {SDA (dat 0x80) 7;dat 1;delay(1);SCL 1;delay(1);SCL 0;delay(1);}SDA 1;delay(1);SCL 1;delay(1);while (SDA) continue;SCL 0; }// 从PCF8591读取一个字节的数据 unsigned char PCF8591_ReadByte() {unsigned char i, dat 0;SDA 1;for (i 0; i 8; i) {dat 1;SCL 0;delay(1);SCL 1;delay(1);if (SDA) dat | 0x01;}SCL 0;return dat; }// 设置PCF8591的控制字节 void PCF8591_SetControl(unsigned char ctrl) {I2C_Start();I2C_SendByte(PCF8591_ADDRESS);I2C_SendByte(PCF8591_CONTROL);I2C_SendByte(ctrl);I2C_Stop(); }// 读取光敏电阻的数据 unsigned int ReadLightSensor(unsigned char channel) {unsigned int value;PCF8591_SetControl(0x40 | channel); // 选择光敏电阻通道delay(10); // 延时等待转换完成I2C_Start();I2C_SendByte(PCF8591_ADDRESS | 0x01); // 续上一段value PCF8591_ReadByte(); // 读取高字节value (value 8) PCF8591_ReadByte(); // 读取低字节I2C_Stop();return value; }// 控制步进电机旋转 void StepperMotor_Rotate(unsigned char direction, unsigned int steps) {unsigned int i;for (i 0; i steps; i) {// 顺时针旋转if (direction CW) {IN1 1; IN2 0; IN3 0; IN4 0;delay(10);IN1 0; IN2 1; IN3 0; IN4 0;delay(10);IN1 0; IN2 0; IN3 1; IN4 0;delay(10);IN1 0; IN2 0; IN3 0; IN4 1;delay(10);}// 逆时针旋转else if (direction CCW) {IN1 0; IN2 0; IN3 0; IN4 1;delay(10);IN1 0; IN2 0; IN3 1; IN4 0;delay(10);IN1 0; IN2 1; IN3 0; IN4 0;delay(10);IN1 1; IN2 0; IN3 0; IN4 0;delay(10);}} }// 主函数 void main() {unsigned int lightSensor[4];unsigned char maxIndex;while (1) {// 采集光敏电阻数据lightSensor[0] ReadLightSensor(CHANNEL_0);lightSensor[1] ReadLightSensor(CHANNEL_1);lightSensor[2] ReadLightSensor(CHANNEL_2);lightSensor[3] ReadLightSensor(CHANNEL_3);// 确定最强光位置maxIndex 0;if (lightSensor[1] lightSensor[maxIndex]) maxIndex 1;if (lightSensor[2] lightSensor[maxIndex]) maxIndex 2;if (lightSensor[3] lightSensor[maxIndex]) maxIndex 3;// 控制步进电机旋转if (maxIndex 0) {StepperMotor_Rotate(CW, 100); // 右转} else if (maxIndex 1) {StepperMotor_Rotate(CCW, 100); // 左转} else if (maxIndex 2) {StepperMotor_Rotate(CW, 100); // 右转StepperMotor_Rotate(CW, 100); // 右转} else if (maxIndex 3) {StepperMotor_Rotate(CCW, 100); // 左转StepperMotor_Rotate(CCW, 100); // 左转}delay(1000); // 延时一段时间} }

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

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

相关文章

做外贸怎样打开国外网站企业信用信息查询公示系统年审

元对象系统 元对象系统是一个基于标准C++的扩展,为Qt提供了信号与槽机制、实时类型信息、动态属性系统。 元对象系统的三个基本条件:类必须继承自QObject、类声明Q_OBJECT宏、元对象编译器moc。 Qt元对象编译器(Moc)是Qt框架中的一个重要工具,用于处理Qt特有的元对象系统…

闵行建设机械网站广西响应式网站建设

一、TCP/IP的具体含义: 从字面意思来讲,很多人会认为TCP/IP是指TCP与IP这两种协议。有时确实也可以说是这两种协议,但是大部分情况下所说的是利用IP进行通信时所必须用到的协议群的统称。具体来说IP,ICMP,TCP,UDP,FTP以及HTTP等都属于TCP/IP协…

餐饮网站源码福州网站建设公司哪家比较好

输入:一个没有排序的正数数组nums 输出:在 nums数组中未出现的最小的正整数 规则:数组中的元素可能是负数,也可能重复。要求时间复杂度O(n),空间复杂度O(1)。 分析:题目其实很简单,遍历一次放入…

制作企业网站需要注意的事项WordPress又拍云联盟代码

文章目录 前言dequedeque底层设计迭代器设计 priority仿函数数组中的第k个最大元素优先级队列模拟实现pushpop调整仿函数存储自定义类型 前言 今天要介绍比较特殊的结构,双端队列。 还有一个适配器,优先级队列。 deque 栈的默认容器用了一个deque的东西…

织梦做旅游网站成都网站建设龙兵

作者:周小白 【TechWeb】10 月 19 日消息,今日,腾讯云首次对外公布了“小程序云开发十大优秀实践”,包括白鹭引擎、千墨科技、腾讯新闻、即速应用、微盟、唯品会、猫眼、香格里拉、微信读书、微信支付等,涉及多个行业。…

网站建设公司主要完整网站模板下载

一 三层交换机 1 三层交换机概述 三层交换二层交换三层转发 2 虚拟接口概述 在三层交换机上配置的VLAN接口为虚拟接口,使用Vlanif(VLAN虚拟接口)实现VLAN间路由,VLAN接口的引入使得应用更加灵活 三层交换机VLAN间通信的转发…

php免费网站源码做网站排名步骤

Eric Evans 的领域驱动设计是对软件设计领域的一次重新审视,是在面向对象语言大行其道时对数据建模的“拨乱反正”。Eric 强调了模型的重要性,例如他在书中总结了模型在领域驱动设计中的作用包括: 模型和设计的核心互相影响模型是团队所有成…

做企业网站需要建多大的画布网站制作周期

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖,改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP(mybatisplus)的分页插件 二、使…

比较好的网站建设品牌设计网站开发 不好 怎么说

QT之QString 添加容器 点击栅格布局 添加容器,进行栅格布局 布局总结:每一个模块放在一个Group中,排放完之后,进行栅格布局。多个Group进行并排时,先将各个模块进行栅格布局,然后都选中进行垂直布…

外贸网站建设注意事项建站平台塔山双喜

一、前文 用户画像的前提是标识出用户,存在以下场景:不同业务系统对同一个人的标识,匿名用户行为的行为归因;本文提供多种解决方案,提供大家思考。 二、方案矩阵 三、其他 相关连接: 如何通过图算法能力获…

常州市金坛区网站建设职高网站建设例题

1. 我遇到的问题 任何部署类问题实际上对于萌新来说都不算简单,因为没有经验,这里我简单将部署的步骤和想法给大家讲述一下 2. 简单安装步骤 准备 3台标准安装的乌班图server22.04(采用vm虚拟机安装,ip为192.168.50.3&#xff0…

邗江区做网站wordpress 织梦转换

ajax的完整写法——success/error/completethen/catch/done设置请求头两种方法——基础积累 1.完整写法——success/error/complete1.1 GET/DELETE——query传参1.2 GET/DELETE——JSON对象传参1.3 PUT/POST——JSON对象传参 2.简化写法——then/catch/done2.1 GET/DELETE——q…

鹤城机关建设网站莱芜市城乡建设局网站

随着人们生活水平的提高,洗护行业是越来越细分化了,从最开始的干洗店包含洗护行业的所有服务到现在有专门为洗鞋开的店,如果开发一款洗鞋店用的小程序,可以实现用户在家下单直接有人上门取鞋的话,应该如何去开发呢&…

网站上的楼价走势图怎么做怎样建企业网站

superset是优秀的数据可视化开源项目,为用户提供了丰富的图表视觉效果,基于python开发。但仅可以以图表、表格形式展示结果,不支持页面组装等高级BI功能。 准备环境docker 然后执行命令 docker pull amancevice/superset docker run --det…

男人和女人床上做性视频网站最新新闻热点图片

计算几何的精度问题说到底其实是浮点数的精度问题,但我觉得“计算几何”比“浮点数”更能吸引眼球,所以选了这个标题。 1.浮点数为啥会有精度问题: 浮点数(以C/C为准),一般用的较多的是float, double。 占字节数 数值范围 十进…

新网站seo外包优化大师有用吗

以下操作均是在ubuntu 下操作的: 1、进入crontab文件的编写状态: crontab -e 2、第一次进入编写crontab文件的界面,系统会提示选择相应的编辑器,一般我们选择vi编辑器就可以了:选择/usr/bin/vim.tiny 12345Select a…

做网站怎么用国处服务器开发工具下载

日常开发中,我们经常会遇到数据库慢查询。那么导致数据慢查询都有哪些常见的原因呢?今天就跟大家聊聊导致 MySQL 慢查询的 12 个常见原因,以及对应的解决方法: SQL 没加索引SQL 索引失效limit 深分页问题单表数据量太大join 或者…

网站 数据报表如何做wordpress空白

一. PXE网络装机简介和相关知识 1. 常见的三种系统安装方式和相关文件 ① 三种系统安装方式 u启动安装:在U盘中下载相关的安装系统及镜像文件,u盘插机安装 光驱安装:将带有所需系统的光盘放进电脑服务器中,按照官方引导装机 …

静态网站建设开发手机网站注册域名

第十五讲 基础篇:Linux内存是怎么工作的(2020.6.8)这一讲相关的内容正好之前看csapp的时候总结了一下,可以直接贴出来作为总结了。Linux的内存工作原理,这又是一个特别大的话题。一切向着尽量利用物理资源的方向在发展,在没有虚拟…

湖南省网站建设重庆做网站怎么做呀

文章目录 一、抽象类1.抽象类的概念2.抽象类的语法3.抽象类的特性4.抽象类的作用 二、接口1.接口的概念2.语法规则3.接口的使用4.接口的特性5.实现多个接口6.接口间的继承7.接口的使用实例8.Clonable 接口和深拷贝9.抽象类和接口的区别 三、Object类1.获取对象信息2.对象的比较…