IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于51单片机的智能小车(寻迹功能) -> 正文阅读

[嵌入式]基于51单片机的智能小车(寻迹功能)

题目:基于C52的智能小车设计与制作

1设计目的
通过构建智能小车,培养设计并实现自动控制系统的能力,在实践过程中,熟悉以单片机为核心控制芯片,设计小车的检测,驱动和显示等外围电路,采用智能控制算法实现小车的流水灯,蜂鸣器,数码管,机动等的结合。灵活应用机电等相关学科实现方法,达到理论与实践的统一。在此过程中,加深对控制理论的理解和认识。

2功能要求及技术指标

功能要求:

  1. 按键控制小车功能,使小车功能多样化。
  2. 小车的前进,后退左右转弯及原地旋转。
  3. 通过小车车灯红外功能实现小车自行循迹。
  4. 脱离轨道蜂鸣器自动报警。

技术指标:

可熟练运用按键复用,中断等技术,熟练掌握分模块编程,调用协调函数。各模块各司其职,协调配合,以此达到自己预期想要的效果,同时分模块编程,便于日后小车的维护。


3 总体设计方案

方框图直接用软件VISIO 2003?画出。方框图应有文字描述:方框图的功能、组成和工作过程(各方框图的相互关系)等。

4 硬件电路设计

主控芯片:

蜂鸣器工作原理:蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型,蜂鸣器的发声原理为:
1、无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声音信号输出。
2、有源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。

蜂鸣器工作原理图:

电机驱动原理:

所谓步进电机驱动器就是一种将电脉冲转化为角位移的执行机构;更通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。我们可以通过控制脉冲的个数来控制电机的角位移量,从而达到***定位的目的;同时还可以通过控制脉冲频率来控制电动机转动的速度和加速度,从而达到调速的目的。目前,比较常用的步进电动机包括反应式步进电动机(VR)、永磁式步进电动机(PM)、混合式步进电动机(HB)和单相式步进电动机等。

电机驱动原理图:

5 软件设计

程序流程图直接用软件VISIO 2003 画出。注意绘制的程序流程图要规范,具体有如下要求:(1)开始框两边要是椭圆的;(2)判断框要是菱形,菱形框内的文字后要以问号?结尾,两条分支分别要有“Y”“N”分支条件;(3)带箭头的流向线能到线的,尽量到线。

对程序程序流程图应有文字描述:程序流程图的功能、初始化的过程、工作流程等。

6 系统测试与结果分析

基于物联网技术的智能家居控制系统的实验样机图如图5所示,1台YB1731A2A型直流稳压电源提供+5V的电压,1台DMM4040型6位半数字万用表同时接入系统分别测量系统的输入电压、输入电流、输出电压。用0~10Ω/50W可调电阻做负载对该系统进行性能测试。

7 使用说明

按下S2键小车启动。放入事先准备好的跑道。小车自动向前行驶,脱离轨道后会发出警报声,根据相对应的程序。小车能够自主在准备好的轨道上行驶而不至于脱离轨道。

8 设计总结

经过为期一周的课设,我们不仅在技术方面得到了很大启发与进步,还在心性方面得到了很大的磨练。在本次实验中,我们了解了AT80C51单片机的基本硬件构成,学习并实践了流水灯、数码管、蜂鸣器、电机、定时器、按键及中断的代码编写,将硬件与代码结合,设计了基于51单片机的智能小车。

有些知识上课听起来云里雾里没怎么搞懂,通过这次自己动手操作,我们把学到的书本知识转化成了实际的应用,加深了我们对知识的掌握,实践和理论结合,让人感到更有意思。这一周中,我们遇到许许多多的困难,同时也不断克服困难。通过这几天的学习与钻研,我们再次培养了实践能力和协作精神,这对我们以后的工作和学习有很大的用处。总的来说,这次学的到了技术,也收获了很多处理问题的技巧与方法,果然实践才是掌握真理的唯一标准。

在这期间和老师的相处也特别的愉快,特别喜欢这种一起努力一起讨论的感觉,也享受这种经过自己的努力将问题解决发自内心的喜悦。

实验代码:

#include<reg52.h>

#include "main.h"

#include"beep.h"

#include"car.h"

sfr IPH = 0xB7;

extern unsigned short pwm_left_val ;

extern unsigned short pwm_right_val;

extern unsigned int pwm_t;

unsigned char car_state = 0;

Input_Filter_t input;

Input_Flag_t input_flag;

void timer0() interrupt 1

{

pwm_t++;

if(pwm_t == pwm_left_val)

EN1 = 0;

if(pwm_right_val == pwm_t)

EN2 = 0;

if(pwm_t == FREQUENCY * 5)

{

EN1 = 1;

EN2 = 1;

pwm_t = 0;

}

}

void Timer0_init()

{

TMOD |= 0x02;

TH0 = 235;

TL0 = 235;

ET0 = 1;

EA = 1;

IPH &= ~(1<<1);

IP |= 1<<1;

TR0 = 1;

}

void key()

{

while(1)

{

if(key_s2 == 0)

{

return;

}

}

}

void xj()

{

if(left_led1 == 1 && right_led1 == 1)

{

?? ????forword();

??BEEP=BEEPOFF;

} ?

????????

else if(left_led1 == 0 && right_led1 == 1)

{

????????right();

BEEP=BEEPON;

}

else if(left_led1 == 1 && right_led1 == 0)

{

????????left();

????????BEEP=BEEPON;

}

else

{

BEEP=BEEPOFF;

}

}

void Obstacle_Avoidance(void)

{

//if(input_flag.left_led2_flag == 1 && input_flag.right_led2_flag == 1 && car_state != CAR_FORWARD)

if(input_flag.left_led1_flag == 1 && input_flag.right_led1_flag == 1 )

{

forword();

//car_state = CAR_FORWARD;

}

else if(input_flag.left_led1_flag == 1 && input_flag.right_led1_flag == 0 || car_state != CAR_TRUN_LEFT)//修正

{

left();

car_state = CAR_TRUN_LEFT;

}

else if(input_flag.left_led1_flag == 0 && input_flag.right_led1_flag == 1 car_state != CAR_TRUN_RIGHT) ?//右转修正

{

right();

car_state = CAR_TRUN_RIGHT;

}

//else if(car_state != CAR_CLOCKWISE)

else

{

//Back();

//Clockwise_Run();

//car_state = CAR_CLOCKWISE;

}

}

void Input_Check(void)

{

if(left_led2 == 0)

{

input.Input_down_filter[0]++;

input.Input_up_filter[0] = 0;

if(input.Input_down_filter[0] == 100)

{

input_flag.left_led2_flag = 0;

}

}

else

{

input.Input_up_filter[0]++;

input.Input_down_filter[0] = 0;

if(input.Input_up_filter[0] == 100)

{

input_flag.left_led2_flag = 1;

}

}

if(right_led2 == 0)

{

input.Input_down_filter[1]++;

input.Input_up_filter[1] = 0;

if(input.Input_down_filter[1] == 100)

{

input_flag.right_led2_flag = 0;

}

}

else

{

input.Input_up_filter[1]++;

input.Input_down_filter[1] = 0;

if(input.Input_up_filter[1] == 100)

{

input_flag.right_led2_flag = 1;

}

}

if(left_led1 == 0)

{

input.Input_down_filter[2]++;

input.Input_up_filter[2] = 0;

if(input.Input_down_filter[2] == 100)

{

input_flag.left_led1_flag = 0;

}

}

else

{

input.Input_up_filter[2]++;

input.Input_down_filter[2] = 0;

if(input.Input_up_filter[2] == 100)

{

input_flag.left_led1_flag = 1;

}

}

if(right_led1 == 0)

{

input.Input_down_filter[3]++;

input.Input_up_filter[3] = 0;

if(input.Input_down_filter[3] == 100)

{

input_flag.right_led1_flag = 0;

}

}

else

{

input.Input_up_filter[3]++;

input.Input_down_filter[3] = 0;

if(input.Input_up_filter[3] == 100)

{

input_flag.right_led1_flag = 1;

}

}

}

?void ?main()

{

key();

Timer0_init();

Motor_Init();

while(1)

{

xj();

}

}

?

?

?

?

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 12:06:30  更:2021-07-17 12:07:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 9:29:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计