久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4924|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STM32隨光追光系統(tǒng)的源碼+視頻

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:504404 發(fā)表于 2019-12-18 12:25 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
視頻在B站,鏈接如下,大家有喜歡的可以去看看,現(xiàn)在開放源代碼。STM32F103ZET6芯片。
視頻地址:https://www.bilibili.com/video/av68476662
視頻地址:https://www.bilibili.com/video/av66018630

這個(gè)是校光伏大賽比賽的一個(gè)作品
旨在萬(wàn)物互聯(lián),萬(wàn)物聯(lián)網(wǎng)。

加入電壓采集功能,實(shí)時(shí)傳給電腦端的LORA
加入角度測(cè)量模塊

單片機(jī)源程序如下:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "timer4.h"
  5. #include "adc.h"
  6. #include "oled.h"
  7. #include "lora_app.h"
  8. #include "lora_ui.h"
  9. #include "usart3.h"
  10. #include "string.h"
  11. #include "stdio.h"
  12. #include "timer.h"
  13. #include "rtc.h"
  14. //d12 d13 d14 d15
  15. #define N 200
  16. #define M 50
  17. #define deat_speed 50
  18. #define pwm_min 1749
  19. #define pwm_mid 1849
  20. #define pwm_max 1949
  21. #define pwm_sum 3698
  22. u16 x = 0,y = 0,z = 0;
  23. u16 ADC = 0;
  24. u8 t=0;
  25. float vote = 0.0;
  26. u16 up_a,up_b;
  27. u16 down_a,down_b;
  28. u8 i,j,min_up=0,min_down=0,min_UP=0;
  29. u16 up_date[N];
  30. u16 down_date[M];
  31. void delay_min(u8 n,u8 sent_up,u8 sent_down);
  32. void time_display(void);
  33. int main(void)
  34. {
  35.     uart_init(115200);
  36.     delay_init();
  37.     OLED_Init();
  38.     RTC_Init();                                  //RTC初始化
  39.     TIM4_PWM_Init(1999,719);//50khz
  40.     Adc_Init();
  41.     LoRa_Init();
  42.     LoRa_Set();//LoRa配置(進(jìn)入配置需設(shè)置串口波特率為115200)
  43.     while(1)
  44.     {
  45.         //1號(hào)歸位
  46.         //2號(hào)固定45度
  47.         TIM_SetCompare1(TIM4,pwm_min);
  48.         TIM_SetCompare2(TIM4,1810);
  49.         delay_ms(200);
  50.         //1號(hào)開始檢測(cè)
  51.         up_b = 0;
  52.         up_a = 0;
  53.         for(; up_a < N; up_a += 2) //200脈沖單位,檢測(cè)100次
  54.         {
  55.             TIM_SetCompare1(TIM4,pwm_min + up_a);//舵機(jī)轉(zhuǎn)180度
  56.             delay_ms(deat_speed);
  57.             up_date[up_b] = (Get_Adc_Average(ADC_Channel_0,1));
  58.             up_b ++;
  59.         }
  60.         //1號(hào)歸位
  61.         //2號(hào)固定135度
  62.         TIM_SetCompare1(TIM4,pwm_max);
  63.         TIM_SetCompare2(TIM4,1890);
  64.         delay_ms(500);
  65.         //1號(hào)開始檢測(cè)
  66.         up_b = 100;
  67.         up_a = N;
  68.         for(; up_a > 0; up_a -= 2) //200脈沖單位,檢測(cè)100次
  69.         {
  70.             TIM_SetCompare1(TIM4,pwm_min + up_a);//舵機(jī)轉(zhuǎn)180度
  71.             delay_ms(deat_speed);
  72.             up_date[up_b] = (Get_Adc_Average(ADC_Channel_0,1));
  73.             up_b ++;
  74.         }
  75.         //找最大值
  76.         for(j = 1; j < N - 1; j ++)
  77.         {
  78.             if(up_date[j + 1] < up_date[min_UP])
  79.             {
  80.                 min_UP = j + 1;
  81.             }
  82.             else
  83.             {
  84.                 j +=1;
  85.             }
  86.         }
  87.         //判斷min_up在哪邊
  88.         if(min_UP < 100)
  89.         {
  90.             min_up = min_UP;
  91.             TIM_SetCompare1(TIM4,min_up * 2 + pwm_min);
  92.             TIM_SetCompare2(TIM4,pwm_mid);
  93.             delay_ms(500);
  94.             //2號(hào)舵機(jī)上下
  95.             down_b = 0;
  96.             down_a = 100;
  97.             for(; down_a > 0; down_a -=2)
  98.             {
  99.                 TIM_SetCompare2(TIM4,pwm_min + down_a);
  100.                 delay_ms(deat_speed);
  101.                 down_date[down_b] = (Get_Adc_Average(ADC_Channel_0,1));
  102.                 down_b ++;
  103.             }
  104.             //找最大值
  105.             for(i = 1; i < M - 1; i ++)
  106.             {
  107.                 if(down_date[i + 1] < down_date[min_down])
  108.                 {
  109.                     min_down = i + 1;
  110.                 }
  111.                 else
  112.                 {
  113.                     i +=1;
  114.                 }
  115.             }
  116.             //算出最大值所在的平面坐標(biāo)
  117.             TIM_SetCompare2(TIM4,min_down * (-2) + pwm_mid);
  118.         }
  119.         else
  120.         {
  121.             min_up = N - min_UP;
  122.             //算出最大值所在的平面坐標(biāo)
  123.             TIM_SetCompare1(TIM4,min_up * 2 + pwm_min);
  124.             TIM_SetCompare2(TIM4,pwm_mid);
  125.             delay_ms(500);
  126.             //2號(hào)舵機(jī)上下
  127.             down_b = 0;
  128.             down_a = 100;
  129.             for(; down_a > 0; down_a -=2)
  130.             {
  131.                 TIM_SetCompare2(TIM4,pwm_max - down_a);
  132.                 delay_ms(deat_speed);
  133.                 down_date[down_b] = (Get_Adc_Average(ADC_Channel_0,1));
  134.                 down_b ++;
  135.             }
  136.             //找最大值
  137.             for(i = 1; i < M - 1; i ++)
  138.             {
  139.                 if(down_date[i + 1] < down_date[min_down])
  140.                 {
  141.                     min_down = i + 1;
  142.                 }
  143.                 else
  144.                 {
  145.                     i +=1;
  146.                 }
  147.             }
  148.             //算出最大值所在的平面坐標(biāo)
  149.             TIM_SetCompare2(TIM4,min_down * 2 + pwm_mid);

  150.         }

  151.         OLED_16x16CN(0,0,up_date[min_UP] / 1000);
  152.         OLED_16x16CN(9,0,up_date[min_UP] / 100 % 10);
  153.         OLED_16x16CN(18,0,up_date[min_UP] / 10 % 10);
  154.         OLED_16x16CN(27,0,up_date[min_UP] % 10);
  155.         OLED_16x16CN(0,2,down_date[min_down] / 1000);
  156.         OLED_16x16CN(9,2,down_date[min_down] / 100 % 10);
  157.         OLED_16x16CN(18,2,down_date[min_down] / 10 % 10);
  158.         OLED_16x16CN(27,2,down_date[min_down] % 10);
  159.         OLED_16x16CN(0,4,min_UP / 100);
  160.         OLED_16x16CN(9,4,min_UP / 10 % 10);
  161.         OLED_16x16CN(18,4,min_UP % 10);
  162.         OLED_16x16CN(32,4,min_down / 10);
  163.         OLED_16x16CN(40,4,min_down % 10);
  164.         //發(fā)送數(shù)據(jù)
  165.         if(!LORA_AUX)//若空閑
  166.         {
  167.             LoRa_SendData(min_UP,min_down);//發(fā)送數(shù)據(jù)
  168.         }
  169.                 time_display();        //調(diào)試部分
  170. //        while(1)
  171. //        {
  172. //            int hhh;
  173. //            hhh ++;
  174. //        }
  175.         delay_min(15,min_UP,min_down);
  176.     }
  177. }

  178. void delay_min(u8 n,u8 sent_up,u8 sent_down)
  179. {
  180.     for(y = 0; y < n; y ++)
  181.     {
  182.         for(x = 0; x < 30; x ++)
  183.         {
  184.             delay_ms(500);
  185.             delay_ms(500);
  186.             delay_ms(500);
  187.             delay_ms(500);
  188.             //調(diào)試
  189.             //采集光伏板電壓
  190.             ADC = (int)((Get_Adc_Average(ADC_Channel_1,1)));//A1
  191.             //轉(zhuǎn)換為電壓
  192.             vote = 2 * ADC / 1262.0;
  193. //                        printf("LIGHT = %f /ADC\r\n",vote);
  194.             if(!LORA_AUX)//若空閑
  195.             {
  196.                 LoRa_SendData(sent_up,sent_down);//發(fā)送數(shù)據(jù)
  197.                 LoRa_SendData_v(vote * 10);
  198.             }
  199.         }
  200.     }
  201. }



  202. void time_display(void)
  203. {
  204.     if(t!=calendar.sec)
  205.     {
  206.         t=calendar.sec;
  207. //        年
  208.         OLED_16x16CN(0,6,calendar.w_year / 10 % 10);
  209.         OLED_16x16CN(8,6,calendar.w_year % 10);
  210.         OLED_16x16CN(16,6,11);
  211. //    月
  212.         OLED_16x16CN(24,6,calendar.w_month / 10 % 10);
  213.         OLED_16x16CN(32,6,calendar.w_month % 10);
  214.         OLED_16x16CN(40,6,11);
  215. //        日
  216.         OLED_16x16CN(48,6,calendar.w_date / 10 %10);
  217.         OLED_16x16CN(56,6,calendar.w_date % 10);
  218.         OLED_16x16CN(64,6,11);
  219.         switch(calendar.week)
  220.         {
  221.         case 0:
  222.             OLED_16x16CN(72,6,7);
  223. ……………………

  224. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
9-21.7z (1.36 MB, 下載次數(shù): 135)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:586372 發(fā)表于 2019-12-24 11:14 | 只看該作者
能用51嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:144104 發(fā)表于 2020-3-25 15:41 | 只看該作者
正好需要,感謝分享!
回復(fù)

使用道具 舉報(bào)

地板
ID:988221 發(fā)表于 2022-9-19 20:24 | 只看該作者
視頻里的什么電機(jī)啊,型號(hào)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | 日韩av一区二区在线 | 日韩国产在线 | 国产伦精品一区二区三毛 | 国内精品伊人久久久久网站 | 四虎在线视频 | 一道本视频 | 自拍偷拍亚洲一区 | www.日韩系列 | tube国产| 中文字幕在线第二页 | 欧美激情一区二区三级高清视频 | 色综合一区二区 | 久草在线青青草 | 99国产精品久久久久 | 精品人伦一区二区三区蜜桃网站 | 91精品国产91久久久久久最新 | 日日摸夜夜添夜夜添特色大片 | 日韩在线不卡视频 | 国产一区二区观看 | 国产精品久久久久久久久久久新郎 | 一区二区av | 欧美舔穴 | 中文字幕亚洲欧美 | 五月综合激情在线 | 成人av一区 | 亚洲男人天堂 | 啪一啪| 亚洲精品一区在线 | 影音先锋成人资源 | 久久精品中文字幕 | 黄网站涩免费蜜桃网站 | 欧美亚洲一级 | 黄色片免费 | 国产精品网址 | 久久精品久久综合 | 日本人做爰大片免费观看一老师 | 亚洲在线一区二区 | 精品久久久久久久 | 狠狠亚洲 | 日韩中文字幕 |