本設(shè)計(jì):
基于STM32單片機(jī)智能跟隨小車_紅外遙控(程序+原理圖+PCB+論文報(bào)告)
原理圖:Altium Designer
程序編譯器:keil 5
編程語言:C語言
編號C0021
資料下載
【騰訊文檔】C0021 網(wǎng)盤鏈接
https://docs.qq.com/doc/DS1JjTFhXRHZXRnJj
功能描述:
1.以STM32F103RBT6為主控芯片,實(shí)現(xiàn)對小車的控制,使小車能夠做出前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等基本行駛動作,通過紅外遙控控制小車工作模式的轉(zhuǎn)換(自由行走避障模式、跟隨模式)
2.利用壓力傳感器測重,放在小車上物品的重量在500g范圍以內(nèi),可以跟隨,如果超過范圍,就停止不動,蜂鳴器響提示超重。
原理圖(提供源文件):
PCB(提供源文件):
源程序(提供完整程序):
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "adc.h"
#include "remote.h"
#include "hx711.h"
#include <string.h>
u8 Model=0; //?£ê?
u8 PWM_WIDTH=28;
u8 RunModel=0;
void Hw_Process()
{
u8 key;
key=Remote_Scan();
if(key)
{
Beep=1;
delay_ms(100); //?óê±300ms
Beep=0;
printf("rnoìía?ü?μ= %drn",key);
}
if(key==224)// - :??è? ×?óéò£??±ü???£ê?
{
RunModel=0;
}
else if(key==168)// - :??è? ?ú???£ê?
{
RunModel=1;
}
if(RunModel==0) //×?óéò£??±ü???£ê?£?ò£??????
{
if(key==194)// ?Yí£ >||
{
Model=0;
printf("rn�1rn");//
}
else if(key==34)//|<<
{
Model=4;
delay_ms(500); //?óê±300ms
Model=1;
printf("rn×órn");//
}
else if(key==2) //>>|
{
Model=3;
delay_ms(500); //?óê±300ms
Model=1;
printf("rnóòrn");//
}
else if(key==162) //CH-
{
Model=1;
printf("rn?°??rn");//
}
else if(key==98) //CH
{
Model=2;
printf("rnoóí?rn");//
}
else if(key==48) // °′???ü1
{
PWM_WIDTH=40;
printf("rn1μμrn");//
}
else if(key==24) // °′???ü2
{
PWM_WIDTH=35;
printf("rn2μμrn");//
}
else if(key==122) // °′???ü3
{
PWM_WIDTH=28;
printf("rn3μμrn");//
}
}
}
int main(void)
{
u16 adcx;
unsigned long adtemp,adtemp1;
u16 Weight=0;
u16 temp1,temp2;
delay_init(); //?óê±oˉêy3?ê??ˉ
LED_Init(); //3?ê??ˉó?LEDá??óμ?ó2?t?ó?ú
uart_init(9600);
//uart2_init(9600);
TIM3_Int_Init(10,5199);//10Khzμ???êy?μ?ê£???êyμ?10?a1ms ????D?3μ·??ò?°?ù?è
CH_SR04_Init();//3?éù2¨éè??3?ê??ˉ
Remote_Init(); //oìía?óê?3?ê??ˉ
//ADInit();
Beep=1;
delay_ms(100); //?óê±300ms
Beep=0;
delay_ms(100); //?óê±300ms
Beep=1;
delay_ms(100); //?óê±300ms
Beep=0;
printf("rn-----------------------------------------------rn");//
adtemp=HX711_Read(); //?è?áè??¤????ó|μ?AD?£×¢òa£oé?μ??° 3????ìé?2??ü·?è?o????·£?ò??a?ì3é2aá?2?×??£
Model=0;
while(1)
{
Hw_Process();//oìíaò£??′|àí
if(RunModel==0) //×?óéò£??±ü???£ê?£?ò£?????? +3?éù2¨±ü??
{
temp1=Senor_Using_Left()*10;
printf("rn×ó·??àà?= %d cm",temp1);//′??ú′òó?3?μ??1D??¢
temp2=Senor_Using_Right()*10;
printf("óò·??àà?= %d cmrn",temp2);//′??ú′òó?3?μ??1D??¢
if((temp1<250||temp2<250)&&Model==1)//?°·???°-ì??ü£?Dèòa±ü??
{
Model=0;
delay_ms(300); //?óê±300ms
Model=2;//oóí?
delay_ms(300); //?óê±300ms
Model=4;//óò×a
delay_ms(300); //?óê±300ms
Model=1;//?°??
}
}
else if(RunModel==1) //??è?×??ˉ?ú???£ê?
{
adtemp1=HX711_Read();
if(adtemp1>adtemp) //?D???ì2aμ?AD′óóú?¤??ê±£?è??aóD??ì?·????£
{
Weight=(adtemp1-adtemp)*0.002388; //?ù?Y′??úμ÷ê????μêy????1y3ì?a£o200g ??£¨8494856£¨·???200g??ì???ó|Ad?μ£?-8411097£¨?T??ì?·???ê±ê?3?AD?μ£?£?
printf("rn ??á?=%d grn",Weight);
}
if(Weight>500)//è?1?????′óóú 500g ·??ù?÷±¨?ˉ?£2??ú??
{
Beep=1;
delay_ms(300); //?óê±300ms
Beep=0;
delay_ms(300); //?óê±300ms
}
else
{
temp1=Senor_Using_Left()*10;
printf("rn×ó·??àà?= %d cm",temp1);//′??ú′òó?3?μ??1D??¢
temp2=Senor_Using_Right()*10;
printf("óò·??àà?= %d cmrn",temp2);//′??ú′òó?3?μ??1D??¢
if((temp1<200)||(temp2<200)) // 200= 20cm ×óóòóDò?·?D?óú20cm
{
Model=0;//�1
}
else if((temp1>1000)&&(temp2>1000))
{
printf("rn�1rn");
Model=0;//
}
else if((temp1<1000)&&(temp2<1000))
{
printf("rn?°??rn");
Model=1;//
delay_ms(300); //?óê±300ms
if(temp1>temp2) //?μ?÷′?ê± D?3μ3μí·?à??è???×ó£?ó|è?D?3μ?òóò1?í?
{
Model=3;//óò×a
printf("rnóò×arn");
delay_ms(200); //?óê±300ms
//
}
else if(temp2>temp1)//?μ?÷′?ê± D?3μ3μí·?à??è???óò£?ó|è?D?3μ?ò×ó1?í?
{
Model=4;//×ó×a
printf("rn×ó×arn");
delay_ms(200); //?óê±300ms
}
}
Model=0;//
}
}
}
}
論文報(bào)告:
全部資料如下: