|
視頻在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è)量模塊
51hei.png (6.41 KB, 下載次數(shù): 65)
下載附件
2019-12-19 12:54 上傳
單片機(jī)源程序如下:
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer4.h"
- #include "adc.h"
- #include "oled.h"
- #include "lora_app.h"
- #include "lora_ui.h"
- #include "usart3.h"
- #include "string.h"
- #include "stdio.h"
- #include "timer.h"
- #include "rtc.h"
- //d12 d13 d14 d15
- #define N 200
- #define M 50
- #define deat_speed 50
- #define pwm_min 1749
- #define pwm_mid 1849
- #define pwm_max 1949
- #define pwm_sum 3698
- u16 x = 0,y = 0,z = 0;
- u16 ADC = 0;
- u8 t=0;
- float vote = 0.0;
- u16 up_a,up_b;
- u16 down_a,down_b;
- u8 i,j,min_up=0,min_down=0,min_UP=0;
- u16 up_date[N];
- u16 down_date[M];
- void delay_min(u8 n,u8 sent_up,u8 sent_down);
- void time_display(void);
- int main(void)
- {
- uart_init(115200);
- delay_init();
- OLED_Init();
- RTC_Init(); //RTC初始化
- TIM4_PWM_Init(1999,719);//50khz
- Adc_Init();
- LoRa_Init();
- LoRa_Set();//LoRa配置(進(jìn)入配置需設(shè)置串口波特率為115200)
- while(1)
- {
- //1號(hào)歸位
- //2號(hào)固定45度
- TIM_SetCompare1(TIM4,pwm_min);
- TIM_SetCompare2(TIM4,1810);
- delay_ms(200);
- //1號(hào)開始檢測(cè)
- up_b = 0;
- up_a = 0;
- for(; up_a < N; up_a += 2) //200脈沖單位,檢測(cè)100次
- {
- TIM_SetCompare1(TIM4,pwm_min + up_a);//舵機(jī)轉(zhuǎn)180度
- delay_ms(deat_speed);
- up_date[up_b] = (Get_Adc_Average(ADC_Channel_0,1));
- up_b ++;
- }
- //1號(hào)歸位
- //2號(hào)固定135度
- TIM_SetCompare1(TIM4,pwm_max);
- TIM_SetCompare2(TIM4,1890);
- delay_ms(500);
- //1號(hào)開始檢測(cè)
- up_b = 100;
- up_a = N;
- for(; up_a > 0; up_a -= 2) //200脈沖單位,檢測(cè)100次
- {
- TIM_SetCompare1(TIM4,pwm_min + up_a);//舵機(jī)轉(zhuǎn)180度
- delay_ms(deat_speed);
- up_date[up_b] = (Get_Adc_Average(ADC_Channel_0,1));
- up_b ++;
- }
- //找最大值
- for(j = 1; j < N - 1; j ++)
- {
- if(up_date[j + 1] < up_date[min_UP])
- {
- min_UP = j + 1;
- }
- else
- {
- j +=1;
- }
- }
- //判斷min_up在哪邊
- if(min_UP < 100)
- {
- min_up = min_UP;
- TIM_SetCompare1(TIM4,min_up * 2 + pwm_min);
- TIM_SetCompare2(TIM4,pwm_mid);
- delay_ms(500);
- //2號(hào)舵機(jī)上下
- down_b = 0;
- down_a = 100;
- for(; down_a > 0; down_a -=2)
- {
- TIM_SetCompare2(TIM4,pwm_min + down_a);
- delay_ms(deat_speed);
- down_date[down_b] = (Get_Adc_Average(ADC_Channel_0,1));
- down_b ++;
- }
- //找最大值
- for(i = 1; i < M - 1; i ++)
- {
- if(down_date[i + 1] < down_date[min_down])
- {
- min_down = i + 1;
- }
- else
- {
- i +=1;
- }
- }
- //算出最大值所在的平面坐標(biāo)
- TIM_SetCompare2(TIM4,min_down * (-2) + pwm_mid);
- }
- else
- {
- min_up = N - min_UP;
- //算出最大值所在的平面坐標(biāo)
- TIM_SetCompare1(TIM4,min_up * 2 + pwm_min);
- TIM_SetCompare2(TIM4,pwm_mid);
- delay_ms(500);
- //2號(hào)舵機(jī)上下
- down_b = 0;
- down_a = 100;
- for(; down_a > 0; down_a -=2)
- {
- TIM_SetCompare2(TIM4,pwm_max - down_a);
- delay_ms(deat_speed);
- down_date[down_b] = (Get_Adc_Average(ADC_Channel_0,1));
- down_b ++;
- }
- //找最大值
- for(i = 1; i < M - 1; i ++)
- {
- if(down_date[i + 1] < down_date[min_down])
- {
- min_down = i + 1;
- }
- else
- {
- i +=1;
- }
- }
- //算出最大值所在的平面坐標(biāo)
- TIM_SetCompare2(TIM4,min_down * 2 + pwm_mid);
- }
- OLED_16x16CN(0,0,up_date[min_UP] / 1000);
- OLED_16x16CN(9,0,up_date[min_UP] / 100 % 10);
- OLED_16x16CN(18,0,up_date[min_UP] / 10 % 10);
- OLED_16x16CN(27,0,up_date[min_UP] % 10);
- OLED_16x16CN(0,2,down_date[min_down] / 1000);
- OLED_16x16CN(9,2,down_date[min_down] / 100 % 10);
- OLED_16x16CN(18,2,down_date[min_down] / 10 % 10);
- OLED_16x16CN(27,2,down_date[min_down] % 10);
- OLED_16x16CN(0,4,min_UP / 100);
- OLED_16x16CN(9,4,min_UP / 10 % 10);
- OLED_16x16CN(18,4,min_UP % 10);
- OLED_16x16CN(32,4,min_down / 10);
- OLED_16x16CN(40,4,min_down % 10);
- //發(fā)送數(shù)據(jù)
- if(!LORA_AUX)//若空閑
- {
- LoRa_SendData(min_UP,min_down);//發(fā)送數(shù)據(jù)
- }
- time_display(); //調(diào)試部分
- // while(1)
- // {
- // int hhh;
- // hhh ++;
- // }
- delay_min(15,min_UP,min_down);
- }
- }
- void delay_min(u8 n,u8 sent_up,u8 sent_down)
- {
- for(y = 0; y < n; y ++)
- {
- for(x = 0; x < 30; x ++)
- {
- delay_ms(500);
- delay_ms(500);
- delay_ms(500);
- delay_ms(500);
- //調(diào)試
- //采集光伏板電壓
- ADC = (int)((Get_Adc_Average(ADC_Channel_1,1)));//A1
- //轉(zhuǎn)換為電壓
- vote = 2 * ADC / 1262.0;
- // printf("LIGHT = %f /ADC\r\n",vote);
- if(!LORA_AUX)//若空閑
- {
- LoRa_SendData(sent_up,sent_down);//發(fā)送數(shù)據(jù)
- LoRa_SendData_v(vote * 10);
- }
- }
- }
- }
- void time_display(void)
- {
- if(t!=calendar.sec)
- {
- t=calendar.sec;
- // 年
- OLED_16x16CN(0,6,calendar.w_year / 10 % 10);
- OLED_16x16CN(8,6,calendar.w_year % 10);
- OLED_16x16CN(16,6,11);
- // 月
- OLED_16x16CN(24,6,calendar.w_month / 10 % 10);
- OLED_16x16CN(32,6,calendar.w_month % 10);
- OLED_16x16CN(40,6,11);
- // 日
- OLED_16x16CN(48,6,calendar.w_date / 10 %10);
- OLED_16x16CN(56,6,calendar.w_date % 10);
- OLED_16x16CN(64,6,11);
- switch(calendar.week)
- {
- case 0:
- OLED_16x16CN(72,6,7);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
9-21.7z
(1.36 MB, 下載次數(shù): 135)
2019-12-19 12:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|