找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12998|回复: 28
收起左侧

单片机太阳追踪系统制作源码与资料

  [复制链接]
ID:220936 发表于 2017-7-19 21:06 | 显示全部楼层 |阅读模式
太阳追踪系统制作图解:
Step_motor1_3.gif 460642_145321186151_2.jpg 1323312033.jpg 20093261012373499.jpg Img319465053.jpg OOOPIC_shawlei_200911188292a51f12a8becb.jpg proxy.jpg

ppt文档:
0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include"i2c.h"
  3. #define speed 8


  4. //--定义PCF8591的读写地址--//
  5. #define  WRITEADDR 0x90           //写地址
  6. #define  READADDR  0x91           //读地址
  7. //Motor
  8.     sbit a1 = P1^0;          //定义管脚
  9.     sbit a2 = P1^1;
  10.     sbit a3 = P1^2;
  11.     sbit a4 = P1^3;
  12.         sbit b1 = P0^0;
  13.     sbit b2 = P0^1;
  14.         sbit b3 = P0^2;
  15.         sbit b4 = P0^3;
  16.                   
  17. //--声明全局函数--//
  18. void Pcf8591SendByte(unsigned char channel);
  19. unsigned char Pcf8591ReadByte();

  20. void delay(int time);


  21. void GoA1();
  22. void GoA2();
  23. void GoB1();
  24. void GoB2();
  25. /*******************************************************************************
  26. * 函 数 名         : main
  27. * 函数功能                   : 主函数
  28. * 输    入         : 无
  29. * 输    出         : 无
  30. *******************************************************************************/

  31. void main()
  32. {
  33.                                       unsigned int M;
  34. M=4;
  35.                    a1=0;
  36.                                    a2=0;
  37.                                    a3=0;
  38.                                    a4=0;
  39.                    b1=0;
  40.                                    b2=0;
  41.                                    b3=0;
  42.                                    b4=0;       

  43.        

  44.         while(1)
  45.         {       
  46.        
  47.     unsigned int adNum[4];

  48.            unsigned int A1;
  49.         unsigned int A2;
  50.         unsigned int A3;
  51.         unsigned int B1;
  52.         unsigned int B2;
  53.         unsigned int B3;       
  54.         float value;
  55.         //--显示电位器电压--//
  56.                 Pcf8591SendByte(0);             //发送电位器转换命令

  57.                 //--由于8591在第一次读取的时候是读取到的上次转换的结果--//
  58.                 //--所以我们先读一次,只是读到的数据不做处理--//
  59.                 adNum[0]=        Pcf8591ReadByte()*2;//将前一次转换结果读走
  60.                 value=adNum[0]/2*0.01953;  //转为电压值
  61.                 adNum[0]=value*100;        //保留两位小数
  62.                 A1=        adNum[0];
  63.                
  64.                 Pcf8591SendByte(1);             //发送热敏转换命令
  65.                 adNum[0]=        Pcf8591ReadByte()*2;//读取电位器转换结果
  66.                
  67.                 value=adNum[0]/2*0.01953;  //转为电压值
  68.                 adNum[0]=value*100;        //保留两位小数
  69.                 A1=        adNum[0];

  70.                 Pcf8591SendByte(2);               //发送光敏转换命令
  71.                 adNum[1]=Pcf8591ReadByte()*2; //ADC1读取热敏
  72.                 value=adNum[1]/2*0.01953;  //转为电压值
  73.                 adNum[1]=value*100;
  74.                 //--一下读取的方式跟上面一样处理--//
  75.                 //--读光敏--//
  76.                 A2=adNum[1];
  77.                 A3=adNum[0]-adNum[1];
  78.                 if ( A3<0 )
  79.                 {
  80.                 A3 = -A3;
  81.                 }
  82.                 Pcf8591SendByte(3);                   //发送外部输入电压转换命令
  83.                 adNum[2]=Pcf8591ReadByte()*2;  //ADC2读取光敏
  84.                 value=adNum[2]/2*0.01953;  //转为电压值
  85.                 adNum[2]=value*100;
  86.                 //--读取外部输入电压--//
  87.                 B1=adNum[2];
  88.                 adNum[3]=Pcf8591ReadByte()*2;  //ADC3读取外部输入电压
  89.                 value=adNum[3]/2*0.01953;  //转为电压值
  90.                 adNum[3]=value*100;
  91.                 B2=adNum[3];
  92.                 B3=adNum[2]-adNum[3];
  93.                         if ( B3<0 )
  94.                 {
  95.                 B3 = -B3;
  96.                 }
  97.                
  98.         //比较两个电压是否相等//
  99.                
  100.         if(A3<M)
  101.                          {
  102.                    a1=0;
  103.                                    a2=0;
  104.                                    a3=0;
  105.                                    a4=0;
  106.                                   
  107.                  }
  108.          else
  109.                 {
  110.                                
  111.                 if(A1<A2)
  112.                     {
  113.                                
  114.                     GoA2();
  115.                                        
  116.                     }
  117.                 else
  118.                     {
  119.                     GoA1();
  120.                         }
  121.                                  
  122.                 }
  123.         
  124.                
  125.        
  126.                
  127.         //比较两个电压是否相等//
  128.                
  129.         if(B3<M)
  130.                          {
  131.                    b1=0;
  132.                                    b2=0;
  133.                                    b3=0;
  134.                                    b4=0;
  135.                                   
  136.                  }
  137.          else
  138.                 {
  139.                                
  140.                 if(B1<B2)
  141.                     {
  142.                                
  143.                     GoB2();
  144.                                        
  145.                     }
  146.                 else
  147.                     {
  148.                     GoB1();
  149.                         }
  150.                                  
  151.                 }  
  152.                   }
  153.                  
  154.         }
  155. /*******************************************************************************
  156. * 函 数 名         : Pcf8591SendByte
  157. * 函数功能                   : 写入一个控制命令
  158. * 输    入         : channel(转换通道)
  159. * 输    出         : 无
  160. *******************************************************************************/

  161. void Pcf8591SendByte(unsigned char channel)
  162. {       
  163.         I2C_Start();
  164.         I2C_SendByte(WRITEADDR, 1);    //发送写器件地址
  165.         I2C_SendByte(0x40|channel, 0); //发送控制寄存器
  166.         I2C_Stop();
  167. }
  168. /*******************************************************************************
  169. * 函 数 名         : Pcf8591ReadByte
  170. * 函数功能                   : 读取一个转换值
  171. * 输    入         : 无
  172. * 输    出         : dat
  173. *******************************************************************************/

  174. unsigned char Pcf8591ReadByte()
  175. {
  176.         unsigned char dat;
  177.         I2C_Start();
  178.         I2C_SendByte(READADDR, 1);//发送读器件地址
  179.         dat=I2C_ReadByte();    //读取数据
  180.         I2C_Stop();            //结束总线
  181.     return dat;
  182. }

  183. //正转a

  184. void GoA1()
  185. {        //A
  186.     a1=1;
  187.         a2=0;
  188.         a3=0;
  189.         a4=0;
  190.         delay(speed);
  191.         //AB
  192.         a1=1;
  193.         a2=1;
  194.         a3=0;
  195.         a4=0;
  196.         delay(speed);
  197.         //B
  198.         a1=0;
  199.         a2=1;
  200.         a3=0;
  201.         a4=0;
  202.         delay(speed);
  203.         //BC
  204.         a1=0;
  205.         a2=1;
  206.         a3=1;
  207.         a4=0;
  208.           delay(speed);
  209.         //C
  210.         a1=0;
  211.         a2=0;
  212.         a3=1;
  213.         a4=0;
  214.         delay(speed);
  215.         //CD
  216.         a1=0;
  217.         a2=0;
  218.         a3=1;
  219.         a4=1;
  220.         delay(speed);
  221.         //D
  222.         a1=0;
  223.         a2=0;
  224.         a3=0;
  225.         a4=1;
  226.         delay(speed);
  227.         //DA
  228.         a1=1;
  229.         a2=0;
  230.         a3=0;
  231.         a4=1;
  232.         delay(speed);
  233. }



  234. //反转a

  235. void GoA2()
  236. {
  237.       //DA
  238.         a1=1;
  239.         a2=0;
  240.         a3=0;
  241.         a4=1;
  242.         delay(speed);  
  243.     //D
  244.         a1=0;
  245.         a2=0;
  246.         a3=0;
  247.         a4=1;
  248.         delay(speed);
  249.         //CD
  250.         a1=0;
  251.         a2=0;
  252.         a3=1;
  253.         a4=1;
  254.         delay(speed);
  255.         //C
  256.         a1=0;
  257.         a2=0;
  258.         a3=1;
  259.         a4=0;
  260.         delay(speed);
  261.         //BC
  262.         a1=0;
  263.         a2=1;
  264.         a3=1;
  265.         a4=0;
  266.           delay(speed);
  267.         //B
  268.         a1=0;
  269.         a2=1;
  270.         a3=0;
  271.         a4=0;
  272.         delay(speed);
  273.         //AB
  274.         a1=1;
  275.         a2=1;
  276.         a3=0;
  277.         a4=0;
  278.         delay(speed);
  279.         //A
  280.     a1=1;
  281.         a2=0;
  282.         a3=0;
  283.         a4=0;
  284.         delay(speed);
  285.                   
  286. }
  287. //正转b

  288. void GoB1()
  289. {        //A
  290.     b1=1;
  291.         b2=0;
  292.         b3=0;
  293.         b4=0;
  294.         delay(speed);
  295.         //AB
  296.         b1=1;
  297.         b2=1;
  298.         b3=0;
  299.         b4=0;
  300.         delay(speed);
  301.         //B
  302.         b1=0;
  303.         b2=1;
  304.         b3=0;
  305.         b4=0;
  306.         delay(speed);
  307.         //BC
  308.         b1=0;
  309.         b2=1;
  310.         b3=1;
  311.         b4=0;
  312.           delay(speed);
  313.         //C
  314.         b1=0;
  315.         b2=0;
  316.         b3=1;
  317.         b4=0;
  318.         delay(speed);
  319.         //CD
  320.         b1=0;
  321.         b2=0;
  322.         b3=1;
  323.         b4=1;
  324.         delay(speed);
  325.         //D
  326.         b1=0;
  327.         b2=0;
  328.         b3=0;
  329.         b4=1;
  330.         delay(speed);
  331.         //DA
  332.         b1=1;
  333.         b2=0;
  334.         b3=0;
  335.         b4=1;
  336.         delay(speed);
  337. }



  338. //反转b

  339. void GoB2()
  340. {
  341.       //DA
  342.         b1=1;
  343.         b2=0;
  344.         b3=0;
  345.         b4=1;
  346.         delay(speed);  
  347.     //D
  348.         b1=0;
  349.         b2=0;
  350.         b3=0;
  351.         b4=1;
  352.         delay(speed);
  353.         //CD
  354.         b1=0;
  355.         b2=0;
  356. ……………………

  357. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
太阳追踪系统.rar (2.99 MB, 下载次数: 376)

评分

参与人数 1黑币 +10 收起 理由
哈哈我哈哈 + 10

查看全部评分

回复

使用道具 举报

ID:208108 发表于 2017-7-20 10:42 | 显示全部楼层
好资料,正准备用STC自带的ADC来做。
回复

使用道具 举报

ID:208443 发表于 2017-7-23 10:31 | 显示全部楼层
很好 太阳能充电器
回复

使用道具 举报

ID:222635 发表于 2017-7-27 08:30 | 显示全部楼层
很厉害
回复

使用道具 举报

ID:224393 发表于 2017-9-9 09:12 来自手机 | 显示全部楼层
好资料刚好准备做
回复

使用道具 举报

ID:195950 发表于 2017-9-11 21:55 | 显示全部楼层
有电路图么??
回复

使用道具 举报

ID:433547 发表于 2018-11-26 16:45 | 显示全部楼层
需要添加步进电机吗楼主
回复

使用道具 举报

ID:350104 发表于 2018-11-27 10:52 | 显示全部楼层
思路不错 就是实际应用不知道怎么样 单纯用光敏电阻监测光线强度 可以达到效果吗 ?
回复

使用道具 举报

ID:171111 发表于 2018-11-29 19:02 | 显示全部楼层
谢谢分享 这个资料太好了 正需要
回复

使用道具 举报

ID:524003 发表于 2019-4-28 22:21 | 显示全部楼层
挺好的,学习了,感谢楼主
回复

使用道具 举报

ID:484435 发表于 2019-4-29 09:34 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:576710 发表于 2019-7-2 22:28 | 显示全部楼层
为什么不让下载
回复

使用道具 举报

ID:371529 发表于 2019-7-5 19:34 | 显示全部楼层
优秀,想赏你
回复

使用道具 举报

ID:220936 发表于 2019-8-8 15:17 | 显示全部楼层

谢谢
回复

使用道具 举报

ID:613786 发表于 2020-2-13 11:29 | 显示全部楼层
除了仿真图打不开,其他还好
回复

使用道具 举报

ID:141106 发表于 2020-2-13 14:49 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:171111 发表于 2020-4-25 01:06 来自手机 | 显示全部楼层
谢谢分享 正需要 值得参考
回复

使用道具 举报

ID:724172 发表于 2020-9-3 15:24 | 显示全部楼层
这是 用的电机什么型号的?
回复

使用道具 举报

ID:828650 发表于 2020-10-12 15:43 来自手机 | 显示全部楼层
终于找到了,太感谢楼主了
回复

使用道具 举报

ID:143767 发表于 2020-10-14 13:14 | 显示全部楼层
我下载看了,电路图不全,步进电机是怎么控制的,单片机部分也没有
回复

使用道具 举报

ID:357153 发表于 2020-10-15 17:04 | 显示全部楼层
单纯用光敏电阻监测光线强度 可以达到效果吗
回复

使用道具 举报

ID:675767 发表于 2021-2-5 23:45 来自手机 | 显示全部楼层
这个真的很牛逼啊先收藏了
回复

使用道具 举报

ID:200118 发表于 2021-2-14 23:32 | 显示全部楼层
电路图不全,发份完整的图纸就好了。。。
回复

使用道具 举报

ID:883932 发表于 2021-2-17 01:06 | 显示全部楼层
很有帮助,就是没有电路图
另外程序里有读取热敏的注释,暂时看不懂是啥意思
很不错的资料,有待完善
回复

使用道具 举报

ID:869417 发表于 2021-2-21 18:37 | 显示全部楼层
学习了。与普通比较电路控制普通电机哪个方案好。
回复

使用道具 举报

ID:557411 发表于 2021-3-20 16:50 | 显示全部楼层
很实用,提高充电效率
回复

使用道具 举报

ID:1045132 发表于 2022-9-21 15:39 | 显示全部楼层
谢谢分享,资料不是很全
回复

使用道具 举报

ID:63317 发表于 2022-9-21 20:47 | 显示全部楼层
谢谢分享 正需要 值得参考
回复

使用道具 举报

ID:977861 发表于 2022-10-3 12:58 | 显示全部楼层
太实用了,做的不错,光接收部位有需要改进的地方
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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