標題:
STM32隨光追光系統(tǒng)的源碼+視頻
[打印本頁]
作者:
QI0609
時間:
2019-12-18 12:25
標題:
STM32隨光追光系統(tǒng)的源碼+視頻
視頻在B站,鏈接如下,大家有喜歡的可以去看看,現(xiàn)在開放源代碼。STM32F103ZET6芯片。
視頻地址:
https://www.bilibili.com/video/av68476662
視頻地址:
https://www.bilibili.com/video/av66018630
這個是校光伏大賽比賽的一個作品
旨在萬物互聯(lián),萬物聯(lián)網(wǎng)。
加入電壓采集功能,實時傳給電腦端的LORA
加入角度測量模塊
51hei.png
(6.41 KB, 下載次數(shù): 65)
下載附件
2019-12-19 12:54 上傳
單片機源程序如下:
#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配置(進入配置需設(shè)置串口波特率為115200)
while(1)
{
//1號歸位
//2號固定45度
TIM_SetCompare1(TIM4,pwm_min);
TIM_SetCompare2(TIM4,1810);
delay_ms(200);
//1號開始檢測
up_b = 0;
up_a = 0;
for(; up_a < N; up_a += 2) //200脈沖單位,檢測100次
{
TIM_SetCompare1(TIM4,pwm_min + up_a);//舵機轉(zhuǎn)180度
delay_ms(deat_speed);
up_date[up_b] = (Get_Adc_Average(ADC_Channel_0,1));
up_b ++;
}
//1號歸位
//2號固定135度
TIM_SetCompare1(TIM4,pwm_max);
TIM_SetCompare2(TIM4,1890);
delay_ms(500);
//1號開始檢測
up_b = 100;
up_a = N;
for(; up_a > 0; up_a -= 2) //200脈沖單位,檢測100次
{
TIM_SetCompare1(TIM4,pwm_min + up_a);//舵機轉(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號舵機上下
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;
}
}
//算出最大值所在的平面坐標
TIM_SetCompare2(TIM4,min_down * (-2) + pwm_mid);
}
else
{
min_up = N - min_UP;
//算出最大值所在的平面坐標
TIM_SetCompare1(TIM4,min_up * 2 + pwm_min);
TIM_SetCompare2(TIM4,pwm_mid);
delay_ms(500);
//2號舵機上下
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;
}
}
//算出最大值所在的平面坐標
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);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
9-21.7z
(1.36 MB, 下載次數(shù): 135)
2019-12-19 12:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
1069663316
時間:
2019-12-24 11:14
能用51嗎
作者:
yuanhong
時間:
2020-3-25 15:41
正好需要,感謝分享!
作者:
DEVIL嗯
時間:
2022-9-19 20:24
視頻里的什么電機啊,型號
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1