【Proteus仿真】【STM32单片机】太阳能追光系统设计

2023-10-18 11:29

本文主要是介绍【Proteus仿真】【STM32单片机】太阳能追光系统设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、光敏传感器、PCF8591 ADC模块、按键模块、28BYJ48步进电机驱动模块、直流电机模块等。

主要功能:
系统运行后,LCD1602显示四个方向光线强度、工作模式及控制状态;
系统默认工作在自动模式,当系统检测为白天晴天,可以开始工作,当上光线值比下光线值还高于阈值,则直流电机工作上升;
当下光线值比上光线值还高于阈值,则直流电机工作下降;
当左光线值比右光线值还高于阈值,则步进电机工作左转;
当右光线值比左光线值还高于阈值,则步进电机工作右转;
当系统检测为夜晚,停止工作。
当按下K1键,切换为手动模式,可通过K2-K5键对上下左右方向控制;


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*///系统数据显示
void sys_data_show(void)
{while(1){//光线显示lcd1602_show_nums(2,0,sys_ctrl.light[0],2,0);//上lcd1602_show_nums(8,0,sys_ctrl.light[1],2,0);//下lcd1602_show_nums(2,1,sys_ctrl.light[2],2,0);//左lcd1602_show_nums(8,1,sys_ctrl.light[3],2,0);//右//自动手动显示if(sys_ctrl.auto_flag)lcd1602_show_string(12,0,"SD");else lcd1602_show_string(12,0,"Au");//上升下降状态显示if(sys_ctrl.udrun==0)lcd1602_show_string(15,0,"N");else if(sys_ctrl.udrun==1)lcd1602_show_string(15,0,"U");else if(sys_ctrl.udrun==2)lcd1602_show_string(15,0,"D");//左右转状态显示if(sys_ctrl.lrrun==0)lcd1602_show_string(15,1,"N");else if(sys_ctrl.lrrun==1)lcd1602_show_string(15,1,"L");else if(sys_ctrl.lrrun==2)lcd1602_show_string(15,1,"R");break;			}
}//系统功能控制
void sys_fun_ctrl(void)
{//手动模式下if(sys_ctrl.auto_flag==1){switch(sys_ctrl.udrun){case 0: _dc_motor_stop();break;//停止case 1: _dc_motor_fturn();break;//上升case 2: _dc_motor_zturn();break;//下降}switch(sys_ctrl.lrrun){case 1: step_motor_28BYJ48_send_pulse(8,0,STEPMOTOR_MAXSPEED,1,1);break;//左转case 2: step_motor_28BYJ48_send_pulse(8,1,STEPMOTOR_MAXSPEED,1,1);break;//右转}	}//自动控制模式else{//如果是晴天,根据4个传感器检测光线强弱自动调节if(sys_ctrl.light[0]>LIGHT_D_MIN && sys_ctrl.light[1]>LIGHT_D_MIN &&sys_ctrl.light[2]>LIGHT_D_MIN && sys_ctrl.light[3]>LIGHT_D_MIN){//上比下亮,下降if(sys_ctrl.light[0]>sys_ctrl.light[1]+LIGHT_VALUE){sys_ctrl.udrun=2;_dc_motor_zturn();	}//下比上亮,上升else if(sys_ctrl.light[1]>sys_ctrl.light[0]+LIGHT_VALUE){sys_ctrl.udrun=1;_dc_motor_fturn();}//上下亮度差不多,停止else {sys_ctrl.udrun=0;_dc_motor_stop();	}//左比右亮,左转if(sys_ctrl.light[2]>sys_ctrl.light[3]+LIGHT_VALUE){sys_ctrl.lrrun=1;step_motor_28BYJ48_send_pulse(8,0,STEPMOTOR_MAXSPEED,1,1);	}//右比左亮,右转else if(sys_ctrl.light[3]>sys_ctrl.light[2]+LIGHT_VALUE){sys_ctrl.lrrun=2;step_motor_28BYJ48_send_pulse(8,1,STEPMOTOR_MAXSPEED,1,1);	}else{sys_ctrl.lrrun=0;}}//如果是夜晚,系统不工作else if(sys_ctrl.light[0]<LIGHT_N_MIN && sys_ctrl.light[1]<LIGHT_N_MIN &&sys_ctrl.light[2]<LIGHT_N_MIN && sys_ctrl.light[3]<LIGHT_N_MIN){sys_ctrl.udrun=0;sys_ctrl.lrrun=0;_dc_motor_stop();		}}
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化KEY_Init();pcf8591_init();dc_motor_init();step_motor_gpio_init();lcd1602_init();//LCD1602初始化sys_open_show();//系统初始界面显示while(1){sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制		}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619

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


联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

这篇关于【Proteus仿真】【STM32单片机】太阳能追光系统设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/232267

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创