17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,避障,低于50CM报警,LED灯亮起,自动翻晒用光敏电阻,光照强度大,电机转动,相当于翻晒粮食,远程控制用按键代替,按下去电机就转动,相当于翻晒粮食,然后光照强度和超声波的距离都在LCD1602显示屏显示出来。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

1、51单片机

2、超声波传感器

3、光照传感器

4、ADC0832数模转换器

5、L298N驱动电机模块

6、LCD1602显示模块

7、灯光报警模块

8、按键模块

仿真图:

编辑

三、程序编程

cpp 复制代码
/*所有代码资源看页尾*/
#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
sbit CS=P1^0;        //51单片机引脚设置
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit Motor1_IN1 = P3^3;	      //电机IN1口
sbit Motor1_IN2 = P3^4;
sbit Motor1_EN =  P3^2;       //电机使能端1

sbit Motor2_IN1 = P3^5;	      //电机IN1口
sbit Motor2_IN2 = P3^6;
sbit Motor2_EN =  P3^7;       //电机使能端2

sbit LED =  P1^5;  //LED灯定义
sbit key =  P1^4;
sbit key1 = P1^6;
sbit BEEP = P1^3;

sbit Tr=P3^0;//触发信号
sbit Ec=P3^1;//回响信号
uchar Recv_Buffer\[4\];
uint Voltage\[\]={'0','0','0','0'};
bit bdata IIC_ERROR;
  
unsigned char count;
unsigned int distance;
static uint temp;
uint temp;
static unsigned char num;
static int flag = 0, flag1 = 0;
unsigned int Read_value(void);//读值函数

void Delay10us(void);//10us延时函数

void Time0_Init()          //定时器初始化
{
    TMOD = 0x01;
    TH0 = 0x00;
    TL0 = 0x00;
    TR0 = 0;//先关闭定时器0
}

void Time0_Int() interrupt 1 //中断程序
{
   TH0  = 0xfe;             //重新赋值
   TL0  = 0x33;
}

uchar get\_AD\_Res()          //ADC0832启动读取函数
{
	uchar i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	CLK=1;\_nop\_();
	
	CLK=0;DIO=0;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	
	for(i=0; i<8; i++)
	{
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
		data1=(data1<<1)|(uchar)DIO; 
	}
	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO<<i;
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
	}
	CS=1;
	
	return(data1 == data2)?data1:0;
}
unsigned int Read_value()
{
	uint result;
	Tr=1;//触发引脚发出11us的触发信号(至少10us)
	Delay10us();
	Tr=0;
	while(!Ec);//度过回响信号的低电平
	TR0=1;//开启定时器0
	while(Ec);//度过回响信号高电平
	TR0=0;//关闭定时器0
	result=((TH0\*256+TL0)\*0.034)/2;		// 距离cm=(时间us * 速度cm/us)/2
	return result + 2;	//+2修正补偿	
}

void main()					  //主函数
{	
	uchar u;
	Tr=0;               //出发引脚首先拉低
	LCD_Init();         //显示屏初始化
	LCD_ShowString(1,1,"Distance:"); //显示字符串Distance
	LCD_ShowString(2,1,"GZQD:");     //显示字符串GZQD 光照强度
	Time0_Init();	   //定时初始化
	Motor2_EN = 1;	   //顺时针
	Motor2_IN1 = 1;
	Motor2_IN2 = 0;
	LED = 0;
	BEEP = 0;
	while(1)
	{
	   
		u=get\_AD\_Res();        //读取光照强度
	
		distance = Read_value();//读值
		distance-=1;

		LCD_ShowNum(1,10,distance,3); //显示距离
		LCD_ShowNum(2,6,u,3);         //显示光照强度

		if( (distance>=50) && (distance<= 100))
		{
		 Motor2_EN = 1;		   //逆时针
		 Motor2_IN1 = 0;
	     Motor2_IN2 = 1;
		 LED  = 0; 	 //LED灯熄灭
		 BEEP = 0;	 //蜂鸣器关掉
		}
		else if(distance < 50)	  //超声波距离判断
		{
		 LED  = 1;   //LED灯亮起
		 BEEP = 1;   //蜂鸣器响起
		}
		else if(distance > 100)
		{
		 Motor2_EN = 1;	    //顺时针
		 Motor2_IN1 = 1;
	     Motor2_IN2 = 0;
		}

		if(u > 80) //光照强度判断
		{
		 flag = 1;
		}
		else 
		{
		 flag = 0;
		}

		if(key == 0)
		{
		 Delay(100); //消除抖动
		 if(key == 0)
		 {
		  flag1 = 1;
		 }
		}

		if(key1 == 0)
		{
		 Delay(100);//消除抖动
		 if(key1 == 0)
		 {
		  flag1 = 0;
		 }
		}

		if(flag == 1)
		{
		  Motor1_EN = 1;  //电机端使能
		  Motor1_IN1 = 1; //给IN1口赋值高电平
		  Motor1_IN2 = 0; //给IN2口赋值低电平,形成顺时针转动
		}
		else if(flag1 == 1)
		{
		  Motor1_EN = 1;  //电机端使能
		  Motor1_IN1 = 1; //给IN1口赋值高电平
		  Motor1_IN2 = 0; //给IN2口赋值低电平,形成顺时针转动
		}
		else
		{
		   Motor1_EN  = 0;
		   Motor1_IN1 = 0;
		   Motor1_IN2 = 0;
		}

	}
	  
}

void Delay10us()
{
	TL0=0xF5;
	TH0=0xFF;
	TR0=1;
	while (TF0==0);
	TR0=0;
	TF0=0;
}

四、实现现象

具体动态效果看B站演示视频:

基于51单片机的太阳能自动谷物翻晒机器人控制系统_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

链接:https://pan.baidu.com/s/1Ewj05XL8mORAxrL9C3kejA

提取码:w4e9

--来自百度网盘超级会员V4的分享

相关推荐
女神下凡13 小时前
芯参谋(38):NAND_MCP_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
嵌入式学习菌13 小时前
FreeRTOS 中断管理实战:BASEPRI 寄存器实验
单片机·嵌入式硬件
HRTOS14 小时前
HRTOS:一个名字背后的目标——不断逼近硬实时
经验分享·单片机·系统架构·51单片机
UrSpecial16 小时前
GPIO 是什么?
单片机·嵌入式硬件
具身AGI17 小时前
300 台机器人常驻乐园,具身智能开始算运营账
机器人
修船大队长18 小时前
配置接受报文每个报文对应一个mailbox配置流程记录
网络·单片机·mcu
搁浅小泽20 小时前
二极管选型技术规范
单片机·嵌入式硬件·汽车
搁浅小泽20 小时前
电感选型技术规范
单片机·嵌入式硬件·汽车
..Dauntless..20 小时前
【stm32】串口——在MCU内部的工作过程
stm32·单片机·嵌入式硬件
lzqrzpt21 小时前
临沂LED驱动电源工程选型标准与工艺对比解析
python·单片机·嵌入式硬件·物联网