找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 27205|回复: 11
打印 上一主题 下一主题
收起左侧

基于单片机的的智能晾衣系统设计文档

  [复制链接]
跳转到指定楼层
楼主
ID:269874 发表于 2018-1-1 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

基于单片机的的智能晾衣系统设计


摘要

随着社会经济水平的发展,现在人们的生活追求个性化、自动化,追求快节奏,追求充满乐趣的生活方式,家装要求的档次越来越高,生活家居人性化、智能化的要求使智能控制技术在智能家居电子产品中得到了广泛应用,伴随着智能家居的快速发展,晾衣工具的智能化发展明显落后与其他家用器具智能化发展之后,现在己经引起社会的很大关注。本文档为了把握市场动态,顺应时代主题,设计并实现了智能晾衣架系统。

采用单片机进行采集光照、雨滴两个外部天气信号,并通过单片机控制旋转衣架,旋转衣架通过步进电机进行调节,当外部天晴,且无雨时,将衣架转出,晾晒衣物;当下雨或者没有阳光时,转回室内,防止被雨打湿,或者天已黑。其中光照传感器采用光敏电阻,雨滴传感器采用LY-69雨滴检测传感器,控制硬件采用步进电机,按键电路设定光照和雨滴的阈值,5110液晶显示感测量和设定值,及工作状态。

通过设计和实验调试完成了基于单片机的智能晾衣系统。



目录

1  引言

1.1  课题研究背景与意义

1,2  国内外研究现状

1.3  课题研究内容

2  基于单片机的的智能晾衣系统的硬件设计

2.1  整体设计框图

2.2  光照传感器

2.3  雨滴传感器

2.4  衣架位置传感器

2.5  STM32控制器

2.6  步进电机驱动电路

2.7  液晶显示屏

2.8  按键电路

3  基于单片机的的智能晾衣系统的软件设计

3.1  系统分析

3.2  软件算法

3.3  软件容错处理

4  实验调试

5  结论与展望

参考文献

致谢

附页1




1  引言

随着社会经济水平的发展,现在人们的生活追求个性化、自动化,追求快节奏,追求充满乐趣的生活方式,家装要求的档次越来越高,生活家居人性化、智能化的要求使智能控制技术在智能家居电子产品中得到了广泛应用,它不仅优化人们的生活方式和居住环境,而且方便人们有效地安排时间和节约各种能源,实现了家电、照明、窗帘控制和防盗报警、定时控制及电话远程控制等。伴随着智能家居的快速发展,晾衣工具的智能化发展明显落后与其他家用器具智能化发展之后,现在己经引起社会的很大关注。本文档为了把握市场动态,顺应时代主题,设计并实现了智能晾衣架系统。

1.1  课题研究背景与意义

基于现在晾衣架发展现状,本设计开发了一种能帮助人们摆脱原始操作的智能晾衣架。本新型晾衣架主要特点在于:可以伸缩,操作简单,占地面积小,美观实尸构优点。同类产品虽有可收缩式的,但属组装而成,操作比较麻烦,而本晾才架只需按下打开按键,衣架杆即可自动伸展开来。同时晾衣架能识别晴雨天气一自动完成收衣服功能的目的。晴雨智能晾衣架能有效地避免在下雨时,衣服无人收起而被雨淋湿;或在天色变晚时,衣架能自动收回,避免衣服在外面过夜。

1,2  国内外研究现状

在中国各大中城市以及农村普遍是将衣物晾晒于阳台内部或外部,而传统的晾晒衣物方式是阳台内天花板下设置有钢筋挂钩,钩卜通常是挂有竹杆或其它杆体。人们通常习惯于用一支撑杆将衣物支撑到晾衣杆晾晒,这样晾晒衣物费时费力,而且布置钢筋及竹杆与当今现代化建筑结构的阳台也不搭配、有失雅观。另外,家庭通常大都是老人晾衣物,因此,传统的支撑晒衣、收衣不仅是费神费力,而目.容易扭伤筋胃·或支撑不顺扎伤人体。正因传统晾晒衣方式有众多的不便,后出现手摇晾衣架,手摇晾衣架改变了支撑晾衣架的传统习惯,同时也给众多家庭带来了更多的方便。但手摇晾衣架需设置多个机械装置和支撑点,同时需多根网线布置来带动其晾衣杆上下升降。由几支撑点及多根网线的布置,手摇式晾衣架给原本漂亮的阳台增添了不美的因素。其次,手摇晾衣架的升降每次都要人工转换接头,目.需要人力摇动慢慢将杆升降,若晾杆承载的衣物重量过大,摇上去既费力又容易伤手。因此,手摇晾衣架虽然改变传统支撑晾衣的不便,但没有彻底改变费神费力的根本状态。人们期望着一种更方便更美观的新型晾衣架的出现。

1.3  课题研究内容

基于单片机的的智能晾衣系统设计,需要采用单片机作为控制中心,实现自动晾衣的功能,并根据具体情况进行相应的调整,具体性能和指标如下:

  • 智能晾衣杆全自动工作,可实现无人操控
                  2)晾衣杆只有两个位置,伸出去,缩回来
                  3)位置检测:晾衣杆伸出去时,到达指定位置能够停下来
                  4)软件容错处理:晾衣杆伸缩过程中遇到各种障碍,能够通过软件容错处理来停止
                  5)光敏传感器:天黑时候将衣服收回来,天亮时候或者阳光猛烈的时候伸出去晾晒
  • .雨滴传感器:下雨的时候将衣服收回来
                  7)参数灵敏度调节(动态设置):按键+液晶显示
                  8)供电:5V电源供给单片机、电机

2  基于单片机的的智能晾衣系统的硬件设计

采用单片机进行采集光照、雨滴两个外部天气信号,并通过单片机控制旋转衣架,旋转衣架通过步进电机进行调节,当外部天晴,且无雨时,将衣架转出,晾晒衣物;当下雨或者没有阳光时,转回室内,防止被雨打湿,或者天已黑。

2.1  整体设计框图

    控制总体款图如下图2.1所示,通过光照传感器和雨滴传感器感知外部天气的光照和雨滴情况,按键设定光照和雨滴的阈值,衣架位置传感器采集衣架所在位置,最后单片机驱动步进电机,将衣架来回于室内室外。

图2.1 总体设计款图

2.2  光照传感器

为了对外部光照强度的测量,文档采用光敏电阻对光照进行测量,如图2.2.1所示光敏电阻,此光敏电阻是负参数的光敏电阻,也就是说光照增强后电阻阻减小,我们通过实验测量得到光敏电阻的电子变化范围在几百欧姆到几兆欧姆之间变化,当光强度很大时,光敏电阻的阻值可达几百欧姆,当在黑暗的环境中时,测量光敏电阻两端的阻值,可达几兆欧姆的电阻。

图 2.2.1 光敏电阻

为了实现与光敏电阻的阻值想匹配的电阻,我们采用10K的电阻进行上拉电阻。通常情况下,光敏电阻的阻值在千欧姆上,所以当光照强度很大时,光敏电阻的阻值很小,进行图2.2.2电路后输出的信号就是很小的电压信号;当光照强度很小时,即黑暗情况下,光敏电阻的阻值很大,进行图2.2.2电路后输出的信号就是接近供电电源的电压3.3V。在电压信号输出后,采用104电容进行滤波,已得到更平滑的信号波形,方便单片机对信号的处理,不会因为光照的不稳定,而导致误判。

图2.2.2 光照测量电流
2.3  雨滴传感器

雨滴传感器又叫雨滴检测传感器,用于检测是否下雨及雨量的大小,如图2.3.1所示。雨滴传感器的种类有:(1)根据雨滴冲击能量的变化进行检测;(2)利用静电电容量变化进行检测;(3)利用光亮变化进行检测。

本文档采用的图2.3.1雨滴传感器检测雨滴,当雨滴滴到检测极板上时,检测极板的电阻就会发生变化,通过上拉电阻就可以检测极板输出的电压变化。

图2.3.1 雨滴传感器

如图2.3.3所示的是雨滴传感器的电路图,通过上拉10K电阻将雨滴传感器的电阻变化得到电压变化,最后通过运放实现信号的调理,还有LED的指示可以清楚的了解电路工作情况。

图2.3.2 雨滴传感器电路
2.4  衣架位置传感器

为了识别衣架位置,我们采用红外传感器进行判断衣架的位置,当衣架运动到红外传感器可以检测的范围内时,红外传感器就输出一个变化的信号,通过单片机读取后就知道衣架现在运动到什么位置了。实物图如图2.4.1所示。

图2.4.1 红外检测传感器

如图2.4.2所示,三极管Q采用9013小功率三极管,单片机通过IO口驱动三极管的b极,通过1K电阻进行限流,防止电流过大烧毁三极管和单片机。

红外接收管的工作功率为75mW,开启电压0.39V,为了实现接收,采用如图2.4.3所示,NE5532运放作为电压跟随器跟随接收管上电压的变化,单片机通过IO口中断读取数据,通过10K电阻进行限流,防止电流过大烧毁三极管。

   
图2.4.2 红外发射电路   图2.4.3 红外接收电路

我们分别在室内和室外两个地方各安装一个传感器,当衣架运动是室内时,为了不让衣架运动过度,通过红外传感器检测到衣架后,将衣架停止。当衣架运动是室外时,为了不让衣架运动过度,通过红外传感器检测到衣架后,将衣架停止,晾晒衣物。

2.5  STM32控制器

STM32系列单片机是一款高性能、低成本、低功耗的嵌入式应用的单片机,它的内核是ARM Cortex-M3。ST公司对STM32进行了产品划分,按性能分成两个不同的系列:STM32F103属于增强型系列和STM32F101是基本型系列。增强型STM32F103系列的系统时钟频率可达到72MHz,是同类中低端产品中性能是属于最高的一款产品。STM32F101基本型的系统时钟频率是36MHz,它的16位产品比其他公司的16位产品在价格上有大幅提升了性能,是16位单片机用户的最好的选择。STM32F103与STM32F101系列都内置32K到128K的闪存,所不一样的是SRAM的最大容量是和外部设备接口的组合。当系统时钟的频率为72MHz时,单片机从内部闪存位置开始执行初始代码,STM32总的系统功耗36mA,是32位单片机市场中功耗最低的一款产品,电流频率比为0.5mA/MHz。图2.5.1是STM32F103C8T6的实物图。

图2.5.1 STM32F103C8T6

STM32F103C8T6总共有48个引脚,PA0—PA15端口A15个、PB0—PB15端口B15个,2个外部晶振引脚OSC_IN、OSC_OUT,1个复位引脚NRST,2个32.768K的实时时钟晶振引脚,BOOT0程序驱动脚。VDDA、VDD_1、VDD_2、VDD_3与VSS、VSS_1、VSS_2 、VSS_3总共8个电源引脚,包括模拟供电电源。内核采用ARM 32位的Cortex-M3,最高72MHz工作频率,单周期乘法和硬件除法;存储器采用从64K字节的闪存程序存储器,高达20K字节的SRAM;时钟、复位和电源管理采用3.6伏供电和I/O引脚,上电/断电复位(POR/PDR)、可编程电压监测器(PVD),8MHz晶体振荡器,内嵌经出厂调校的8MHz的RC振荡器,内嵌带校准的40kHz的RC振荡器,产生CPU时钟的PLL,带校准功能的32kHz RTC振荡器;低功耗模式有睡眠、停机和待机模式,VBAT为RTC和后备寄存器供电;2个12位模数转换器,1us转换时间(多达16个输入通道) ,转换范围:0至3.6V,双采样和保持功能,还有内部温度传感器;内部共有7通道DMA控制器,支持的外设有3个定时器、ADC、SPI、I2C和USART等;调试模式可选择串行单线调试(SWD)和JTAG接口。如图2.5.2所示。

图2.5.2 引脚图

图2.5.3与图2.5.4是STM32F103C8T6的外部时钟,本方案采用8M外部晶振,进过内部9倍频后得到72M系统时钟,图5与图6中的30pF电容与10pF电容为晶振的启动电容,不能偏大也不能偏小,链接8M的晶振上经典值电容应该选择30pF,32.768K晶振上的电容最大不能超过15pF,晶振连接图如图所示。

图2.5.3  8M时钟            图2.5.4  32.768K时钟

单片机最小系统包括单片机芯片、晶振、复位电路,图2.5.5所示为单片机的复位电路,SW1为复位按键,常态为开,当按下时为闭合,R4为10K电阻,上拉电阻的选取没有固定的要求,通常选取10K,C5为滤波电容,大小选择104电容,也就是100nF陶瓷电容,防止复位按键抖动,导致系统误复位,启动滤除系统脉冲的作用,保护最小系统的正常工作。通常机械按键都有一个抖动过程,就需要通过这个电容来滤除按键产生的抖动。

图2.5.5 复位电路

通常供电电源都有小幅波动,需要通过使用大电容来滤除电源抖动,图2.5.6的4个电容是靠近STM32F103C8T6的电源引脚上放的,防止电源引脚有抖动信号的干扰。104电容为通用的选取阻值。

图2.5.6 滤波电路

为了实现单片机的正常工作,就需要为单片机提供稳定的供电电源,这里使用LM1117线性稳压芯片为单片机提供稳定的+3.3V电源,图2.5.7中P6与P7为排针,方便杜邦线的插拔,C8、C6为+5V电源的输入滤波电容,稳定输入的+5V电压,使用100nF滤除高频干扰,100uF滤除低频干扰,C9、C7为输出滤波电容,稳定输出电压,使用100nF滤除输出的高频干扰,100uF滤除输出的低频干扰,为单片机提供可靠的供电电源。

图2.5.7 稳压供电电路

图2.5.8为单片机下载方式选择端,或者是程序驱动方式选择端。STM32有三种启动模式对应的存储介质均是芯片内置的,它们是:

1)用户闪存 = 芯片内置的Flash。

2)SRAM = 芯片内置的RAM区,就是内存啦。

3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。

在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:

BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。

BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。

BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试。

要注意的是,一般不使用内置SRAM启动(BOOT1=1 BOOT0=1),因为SRAM掉电后数据就丢失。多数情况下SRAM只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到SRAM中诊断板上的其他电路,或用此方法读写板上的Flash或EEPROM等。还可以通过这种方法解除内部Flash的读写保护,当然解除读写保护的同时Flash的内容也被自动清除,以防止恶意的软件拷贝。

一般BOOT0和BOOT1跳线都跳到0(地)。串口下载的情况下,BOOT0=1,BOOT1=0 ,再复位,点击下载,下载完成后,把BOOT0的跳线接回0,也即BOOT0=0,BOOT1=0 。所以为了方便期间我们将BOOT1直接通过100K下拉电阻拉直地,只通过BOOT1就能进行选择下载方式。

图2.5.8 下载方式选择位

STM32的下载方式可以分为两种方式:第一种是20引线的JTAG下载;第二种是5引线的SW下载方式,这里使用SW下载方式,所以具体分析第二种下载方式(SW下载),五根引线的连接分配如下表格:

引脚名
描述
引脚分配
JTMS/SWDIO
串行线输入/输出
PA13
JTCK/SWCLK
串行线时钟
PA14
NRST
复位
NRST
VDD
3.3V
VDD
GND
GND

图2.5.9为实物图中的连接方式,+3.3V、GND为电源引脚,SWDIO下载数据的引脚、SWCLK是下载数据的时钟引脚,NRST为单片机复位引脚,也为下载器的复位引脚。

图2.5.9 下载端口

STM32系列单片机内部集成AD模块,所以我们只需要使用STM32控制器即可实现AD转化和音频数据编码后控制红外发射电路的工作方式。

2.6  步进电机驱动电路

步进电机采用ULN2003进行驱动,ULN2003是ST公司旗下的一款步进电机驱动的高性能芯片,高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。芯片内部原理图如图2.6.1所示,逻辑是反向的。

图2.6.1  ULN2003内部原理图

单片机通过IO控制输出驱动ULN2003的输入信号,因为单片机的IO输出电流和功率不足以驱动步进电机,所以采用ULN2003专用驱动芯片驱动步进电机,ULN2003输出后的信号直接接到步进电机的引脚上,如图2.6.2所示。

图2.6.2 步进电机驱动电路
2.7  液晶显示屏

由于Nokia5110液晶的四大优点所以选择作为显示模块,如图3-6-1所示:

1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD12864一般50~70元。

2)接口简单,仅四根I/O线即可驱动,1602需11根I/O线,12864需12根。

3)速度快,是LCD12864的20倍,是LCD1602的40倍。

4) Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。

5110液晶的引脚定义为RST复位引脚、CE片选引脚、DC数据/命令切换引脚、Din数据输入引脚、CLK时钟引脚,BL背光开关引脚,5110供电电压可在+3V—+5V,我们方案采用+3.3V,如图2.7.1所示。

图2.7.1 5110液晶      图2.7.2 液晶接口

51110液晶的各引脚定义如下所示:

引脚号                 引脚名                功能                                            备注

1                                           GND              地

2                                          BL                            背光控制脚                            高电平打开背光灯,否则相反

3                                           VDD              电源输入脚                             3.3-5V(推荐使用3.3V),导电胶连接

4                                           CLK              同步时钟输入                最高可达4Mbps

5                                           DIN                            数据输入                              时钟上升沿采样

6                                           D/C                            数据/命令切换               0:命令;1:数据

7                                          CE                            片选信号                              低电平有效

8                                           RST               复位信号输入                低电平有效

液晶模块内部的原理图如图2.7.3所示:

  

图2.7.3 5110液晶内部原理图    图2.8 按键电路

2.8  按键电路

如图2.8所示,按键电路图,上拉10K电阻检测按键情况,当按键按下后,输出电平是低电平0,当按键抬起后,输出电压是高电平3.3V。


3  基于单片机的的智能晾衣系统的软件设计

软件部分采用C语言进行编写,开发环境选择keil4。采用单片机进行采集光照、雨滴两个外部天气信号,并通过单片机控制旋转衣架,旋转衣架通过步进电机进行调节,当外部天晴,且无雨时,将衣架转出,晾晒衣物;当下雨或者没有阳光时,转回室内,防止被雨打湿,或者天已黑。

3.1 系统分析

外部天气的光照和下雨情况,如下表1:

表1 外部天气的光照和下雨分类表

是否有阳光

是否下雨

衣架动作

收回室内

收回室内

出室晾晒

收回室内

所以我们可以通过表格发现,只有当外部天气是晴天,且没有雨的时候,衣物是可以进行晾晒的,其他条件下,都需要将衣物拿回室内。

3.2  软件算法
算法从最初对的系统初始化、外设初始化后,就通过按键设定光照和雨滴的阈值,来决定怎么样的光照强度和怎么样的雨滴强度,才能使衣架出去晾晒,或者回到室内。之后就判断是否有雨,是否有光照,若有达到相应强度的光照和没有雨时就出去晾晒衣物,其他清理进室内。但是有时机器也会被东西给卡主,所以需要检查衣架是否有故障,若有故障,就停下来,若无故障就完成上一步没有完成的动作,即回到室内或者出室晾晒。
图3.2 算法流程图
3.3  软件容错处理
采用累积时间来判断事故,我们通过实验可得当衣架从室内到室外,或者从室外到室内的运动时间大概是20秒左右,我们累积时间当超过30秒时,室内衣架位置传感器还没有检测到衣架回到室内,就是说明发生了事故;同理,从室内到室外也是用室外的衣架位置传感器检测衣架,当超过30秒时还没有检测到衣架,就表示发生故障。

4  实验调试
通过实验调试得到图4.1、4.2、4.3、4.4,可以看出实现运行正常,且可行。当外部天晴,且无雨时,将衣架转出,晾晒衣物;当下雨或者没有阳光时,转回室内,防止被雨打湿,或者天已黑。
图4.1  按键设定阈值
图4.2  有阳光衣架出室
图4.3  衣架达到设定位置停下
图4.4 有雨衣架回室内

5  结论与展望

本文档设计并实现了基于单片机的智能晾衣系统,通过实验调试,当外部天晴,且无雨时,衣架转出,晾晒衣物;当下雨或者没有阳光时,转回室内。完成要求中智能晾衣杆全自动工作,实现无人操控;晾衣杆有两个位置,伸出去,缩回来;可以进行位置检测:晾衣杆伸出去时,到达指定位置能够停下来;有软件容错处理:晾衣杆伸缩过程中遇到各种障碍,能够通过软件容错处理来停止;使用光敏传感器:天黑时候将衣服收回来,天亮时候或者阳光猛烈的时候伸出去晾晒;使用雨滴传感器:下雨的时候将衣服收回来;参数灵敏度可以调节(动态设置):按键+液晶显示;采用5V供电:5V电源供给单片机、电机。

本文档实现了智能晾衣系统,还需要结合市场,对衣架的结构和工作方式。比如旋转还是上下伸缩,前后伸缩等,进一步完善系统,使之满足市场需求,更好的为客户服务




致  谢

值此文档即将完稿之际,向所有关心和帮助我的朋友表示衷心的感谢!首先,要感谢我的导师。两年多来,在老师的精心指导和亲切关怀下,我完成了本课题硬件系统的搭建、监控系统的开发和实验分析以及文档撰写等工作。导师渊博的学识、严谨的态度、求实的精神以及高尚的个人品质,给我留下了深刻的印象,使我受益终身。两年多来,无论是在学业上还是在生活中导师都给予我无微不至的关怀,宽容对待我的犯错,其坦诚与亲和感染了我。借此机会,我要向尊敬老师致以最诚挚的谢意!

两年多来,同窗好友等人在我的学业和生活中给予我莫大的支持和帮助,与他们分享我进步的快乐,分担失败的苦涩是人生中的幸事!感谢我的师兄,他们在我的学习过程中引导我前进,教我把握课题的进度,我今天的文档和他们的关心是分不开的。感谢师弟、师妹们的无私帮助!感谢求学期间给我提供帮助的老师、同学!

最后,我要感谢我的所有亲人在我求学生涯中给予我一贯的支持和鼓励!



附页1
图A  实物图


附页2
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "key.h"
  5. #include "usart.h"
  6. #include "key.h"
  7. #include "nokia_5110.h"
  8. #include "adc.h"

  9. void motor_forward(void);
  10. void motor_back(void);

  11. int main(void)
  12. {            
  13.               while(1)
  14.               {
  15.                             key = KEY_Scan();
  16.                             switch(key)
  17.                             {
  18.                                           case 1:
  19.                                           {            
  20.                                                         k=0;
  21.                                                         light_set++;
  22.                                                         if(light_set >= 10)
  23.                                                                       light_set = 0;
  24.                                           }
  25.                                           break;
  26.                                           case 2:
  27.                                           {
  28.                                                         k=0;
  29.                                                         rain_set++;
  30.                                                         if(rain_set >= 10)
  31.                                                                                     rain_set = 0;
  32.                                           }
  33.                                           break;
  34.                                           default:
  35.                                                         k++;
  36.                                                                       break;
  37.                             }
  38.                             delay_ms(5);
  39.                             sprintf(str,"light_set:%d",light_set);
  40.                             LCD_write_String(0,1,str);
  41.                             sprintf(str,"rain_set:%d",rain_set);
  42.                             LCD_write_String(0,3,str);
  43.                             if(k>=1000)
  44.                                           break;
  45.               }            
  46.             
  47.               while(1)
  48.               {
  49.                             light = Get_Adc_Average(0,10);
  50.                             light = light/410;
  51.                             rain  = Get_Adc_Average(1,10);
  52.                             rain = rain/410;
  53.                             son   = Get_Adc_Average(2,10);
  54.                             son = son/410;
  55.                             soff  = Get_Adc_Average(3,10);
  56.                             soff = soff/410;
  57.                                          
  58.                             sprintf(str,"light:%d",9-light);
  59.                             LCD_write_String(0,0,str);            
  60.                             sprintf(str,"light_set:%d",light_set);
  61.                             LCD_write_String(0,1,str);
  62.                             sprintf(str,"rain:%d",9-rain);
  63.                             LCD_write_String(0,2,str);            
  64.                             sprintf(str,"rain_set:%d",rain_set);
  65.                             LCD_write_String(0,3,str);
  66.                             sprintf(str,"state:%d %d",son,soff);
  67.                             LCD_write_String(0,4,str);            
  68.                             sprintf(str,"state:off");
  69.                             LCD_write_String(0,5,str);                                                                     
  70.                            
  71.               }            

  72. }

  73. void motor_forward(void)
  74. {
  75.                             MOTOR1 = 0;
  76.                             MOTOR2 = 1;
  77.                             MOTOR3 = 1;
  78.                             MOTOR4 = 1;
  79.                             delay_ms(10);
  80.                             MOTOR1 = 1;
  81.                             MOTOR2 = 0;
  82.                             MOTOR3 = 1;
  83.                             MOTOR4 = 1;
  84.                             delay_ms(10);
  85.                             MOTOR1 = 1;
  86.                             MOTOR2 = 1;
  87.                             MOTOR3 = 0;
  88.                             MOTOR4 = 1;
  89.                             delay_ms(10);
  90.                             MOTOR1 = 1;
  91.                             MOTOR2 = 1;
  92.                             MOTOR3 = 1;
  93.                             MOTOR4 = 0;
  94.                             delay_ms(10);
  95. }
  96. void motor_back(void)
  97. {
  98.                             MOTOR1 = 1;
  99.                             MOTOR2 = 1;
  100.                             MOTOR3 = 1;
  101.                             MOTOR4 = 0;
  102.                             delay_ms(10);
  103.                             MOTOR1 = 1;
  104.                             MOTOR2 = 1;
  105.                             MOTOR3 = 0;
  106.                             MOTOR4 = 1;
  107.                             delay_ms(10);
  108.                             MOTOR1 = 1;
  109.                             MOTOR2 = 0;
  110.                             MOTOR3 = 1;
  111.                             MOTOR4 = 1;
  112.                             delay_ms(10);
  113.                             MOTOR1 = 0;
  114.                             MOTOR2 = 1;
  115.                             MOTOR3 = 1;
  116.                             MOTOR4 = 1;
  117.                             delay_ms(10);
  118. }
复制代码

以上图文的Word格式文档下载(内容和本网页上的一模一样,方便保存):
word文档.doc (4.39 MB, 下载次数: 136)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:164041 发表于 2019-10-15 17:54 | 只看该作者
楼主,你好,我下载了你分享的资料,但是里面也是没有程序里面了头文件,你手头上有吗?可不可以发下,谢谢啦!
回复

使用道具 举报

板凳
ID:479708 发表于 2019-2-24 14:05 | 只看该作者
感谢分享
回复

使用道具 举报

地板
ID:358019 发表于 2019-2-24 15:19 | 只看该作者
感谢分享
回复

使用道具 举报

5#
ID:529574 发表于 2019-5-7 14:47 | 只看该作者
谢谢
回复

使用道具 举报

6#
ID:414894 发表于 2019-5-17 09:03 | 只看该作者
我觉得有些地方可以由单片机程序进行控制这样可以省去一些成本,又锻炼到了逻辑思维的能力提升
回复

使用道具 举报

7#
ID:556679 发表于 2019-9-19 11:07 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
ID:208849 发表于 2019-10-16 09:49 | 只看该作者
作为学习是可以了,但如果推论到实际产品,那就差很远了;应该多跟进实际的项目去做一些文档
回复

使用道具 举报

9#
ID:162734 发表于 2019-10-16 12:25 | 只看该作者
谢谢分享
回复

使用道具 举报

10#
ID:665267 发表于 2019-12-16 15:33 | 只看该作者
代码一共就这么多吗
回复

使用道具 举报

11#
ID:671159 发表于 2020-1-3 19:07 来自手机 | 只看该作者
楼主有完整的原理图吗,能发我一份吗,谢谢
回复

使用道具 举报

12#
ID:899118 发表于 2021-4-7 22:28 | 只看该作者
楼主,你好,请问有完整的程序和头文件吗?可以发我一下吗?谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表