百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Arduino制作“小雷达”的详细步骤

bigegpt 2024-08-15 19:55 2 浏览

前一段时间,在头条号上发布了一个短视频《 用Arduino在家制作“雷达”的4个步骤》,有好多人问如何制作,所以在此写一篇文章,尽量详细的介绍一下制作过程。

一、材料

用到的材料有Arduino UNO开发板、舵机、超声波传感器、面包板,先来一张全家福吧。

接下来分别进行一下简单的介绍:

1、Arduino开发板

什么是Arduino开发板呢,我把它比作一个小电脑,有兴趣的朋友可以看一下我上传的视频。它的设计初衷就是让非专业人士能够快速上手编程、开发小型自动控制应用,从这一点上说,它是比较容易学习的,我也在更新Arduino应用的基础教程视频,有兴趣的朋友可以观看一下。

Arduino是一个大家庭,是一系列开发板的总称,不同的板子有有不同的功能,大小、接口数量、处理器种类、处理数据速度也不同,可以到官方网站www.arduino.cc/en/main/hardware查看各种型号的板子。

这里重点介绍一下Arduino UNO,它是最常用的一款开发板,也是本次制作中用的一款Arduino开发板。它的构造如下:

它的各部分功能:

  1. 重启按钮:重新启动Arduino上面的程序。
  2. USB接口:Arduino一般通过这个接口进行程序的刻录,并且可由此接口提供电源。
  3. 电源接口:Arduino独立工作的时候一般使用这个接口供电。
  4. 供电接口:可提供5V、3.3V的电压以及接地。
  5. 模拟输入接口:Arduino Uno 有 6个模拟输入端口,标记为 A0 到 A5,都可提供 10 位的模拟信号解析 (即 1024 种不同的数值)。
  6. 单片机:运行程序的核心部件。
  7. 数字接口:用来处理数字信号,有输入和输出模式。

Arduino开发板需要编程才能使用,他的编程软件就叫Arduino,可以到官方网站上进行下载。

2、舵机

(1)什么是舵机

舵机集成了电机、齿轮及内部反馈系统,它能够转动达到并保持指定的角度。内部反馈系统主要依靠的是位置检测器,由电机控制齿轮转动,通过位置传感器判断是否达到了指定位置,并实时进行反馈校正。

(2)舵机的种类

电子制作中常用的舵机从外形上看基本都是一样的,主要区别可能就是大小不同。其实选择舵机主要看两个性能指标:扭力和转速。扭力就是指舵机有多大劲,是否能够完成要执行的动作。转速就是在对完成速度有要求时要考虑的一个变量了。

本次制作中舵机只需要能够带动超声波传感器转动就可以了,对舵机没有特别要求。

(3)如何控制舵机

这里需要重点讲的是如何控制舵机,舵机一般有三根线,黑色(或棕色)的线是接地线,红线接+5V电压,黄线(或是白色或橙色)接控制信号端。舵机的控制信号是方波,一般叫做PWM波,PWM是脉冲宽度调制的英文简写。可以简单理解为通过控制PWM波的脉冲宽度来控制舵机转动的角度。

一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。这里特别要注意的是: 控制脉冲的低电平持续20毫秒。每经过20毫秒(50次每秒),就要再次跳变为高电平,否则舵机就可能罢工,难以保持稳定。

(4)Arduino如何控制舵机

Arduino是如何控制舵机的呢,本次制作用到了Arduino集成的servo库,其中包含了可以控制舵机的函数:

  • attach():连接设定舵机的接口;
  • write():用于设定舵机旋转角度的语句,可设定的角度范围一般是0°到180°;
  • writeMicroseconds():用于设定舵机旋转角度的语句,直接用微秒作为参数;
  • read():用于读取舵机角度的语句;
  • attached():判断舵机参数是否已发送到舵机所在接口;
  • detach():使舵机与其接口分离。

本次制作中只用到了其中两个函数,attach()设定连接舵机控制端的接口,write()控制舵机转动的角度。下面就是用11口控制舵机从0°到180°来回转动的代码。

#include <Servo.h>
Servo radarServo;
void setup() 
{
 radarServo.attach(11);
}
void loop() 
{
 for(int i=0;i<=180;i++)
 {
 radarServo.write(i);
 delay(50);
 }
 
 for(int i=180;i>=0;i--)
 {
 radarServo.write(i);
 delay(50);
 }
}

3、超声波传感器

超声波传感器采用“回声定位”的方式来确定距离,发出一个脉冲声波,等待反射回来的声波,通过发出跟发射回来的时间差来计算距离。我的这个视频中简单讲解了超声波传感器的原理及应用。

超声波传感器有4个引脚:GND、VCC、Trig和Echo ,模块的GND和VCC分别连接到Arduino开发板的GND和5V引脚就可以了。Trig和Echo引脚可以连接到Arduino开发板上的任意数字接口。

为了产生超声波,需要将Trig设置为高电平并持续10μs。这将使超声波传感器发出一个声波脉冲,它将声速340米/秒在空气中传播,如果碰到物体反射回来,就会在Echo引脚中接收。 Echo引脚将输出声波传播的时间,以微秒为单位.。

例如,如果物体距离传感器10厘米,并且声速为340米/秒也就是0.034厘米/μs,则声波将需要行进约294微秒到达物体。但是你从Echo引脚得到的数字将是这个数字的两倍,因为声波需要前进并向后反射。因此,为了获得以cm为单位的距离,我们需要Echo引脚接收的行程时间值乘以0.034并除以2,这一点在后边的编程中要用到。

Arduino提供了一个测量脉冲时间长度的pulseln()函数。语法格式为:pulseIn(pin, value),其中pin就是读取脉冲时间的接口,value是设定等待的脉冲为高电平还是低电平,值为HIGH或LOW。通过超声波传感器测量距离,编程就是通过将Trig设置为高电平脉冲从而使传感器输出一个声波脉冲,通过Echo引脚读取脉冲反射回的总时间,通过公式计算距离。下面是通过超声波传感器不断测量距离的程序。

const int trigPin = 9;
const int echoPin = 10;
long duration;
int distinCM;
void setup() 
{
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 Serial.begin(9600);
}
void loop() 
{ 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH); 
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distinCM = duration*0.034/2;
 
 Serial.print(i);
 Serial.print("*");
 Serial.print(distinCM);
 Serial.print("#");
}

4、面包板

面包板是常用的实验材料,可以免焊接连接电路,面包板上有很多小插孔,是专为电子电路的无焊接实验设计制造的。

这里也简单介绍了面包板

二、制作步骤

1、电路连接

在确定完要实现的功能之后,首先选择可以完成这些功能的硬件。然后就是设计电路,确定硬件的连接关系,文章开头已经列出了用到的硬件,这里还需要确定舵机、超声波传感器控制端与Arduino开发板的连接关系。这里我们用9、10脚控制超声波传感器,11脚控制舵机,其连接关系如下:

2、梳理思路

编程之前最好先梳理一下思路,这里我们要做到的是让舵机带着超声波传感器从0到180度以1度的精度来回转动,在这期间超声波传感器不断测量距离并传给上位机,由上位机进行图形显示。

3、编写程序及调试

(1)Arduino编程

思路理清楚了,按照电路连接关系编写Arduino的程序,本制作的程序如下:

#include <Servo.h>
const int trigPin = 10;
const int echoPin = 9;
long duration;
int distinCM;
Servo radarServo;
void setup() 
{
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 Serial.begin(9600);
 radarServo.attach(11);
}
void loop() 
{
 for(int i=0;i<=180;i++)
 {
 radarServo.write(i);
 delay(50);
 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH); 
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distinCM = duration*0.034/2;
 
 Serial.print(i);
 Serial.print("*");
 Serial.print(distinCM);
 Serial.print("#");
 }
 
 for(int i=180;i>=0;i--)
 {
 radarServo.write(i);
 delay(50);
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH); 
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distinCM = duration*0.034/2;
 
 Serial.print(i);
 Serial.print("*");
 Serial.print(distinCM);
 Serial.print("#");
 }
}

(2)上位机编程

本制作中实现电脑上显示雷达扫描图像所用到的软件是processing,我也是进行这个制作时接触到的这款软件,给我的感觉就是功能很强大,建议大家有时间研究一下。这款软件可以在官网上进行下载:https://processing.org/download/。

上位机程序的功能就是读取Arduino上传的超声波传感器在不同角度测定的距离,并以图形的形式显示出来。上位机的代码如下:

import processing.serial.*;
import processing.opengl.*;
import toxi.geom.*;
import toxi.processing.*;
ToxiclibsSupport gfx;
Serial port;
String serialAngle;
String serialDistance;
String serialData;
float objectDistance;
int radarAngle, radarDistance;
int index=0;
void setup() 
{
 size (1280, 720);
 gfx = new ToxiclibsSupport(this);
 smooth();
 
 //println(Serial.list());
 
 //String portName = Serial.list()[0];
 String portName = "COM6";
 port = new Serial(this, portName, 9600);
 
 //port = new Serial(this,"COM4", 9600);
 port.bufferUntil('#');
}
void draw() 
{
 //fill(10,255,10);
 noStroke();
 
 fill(0,4); 
 rect(0, 0, 1280, 720);
 fill(10,255,10);
 
 //Radar Arcs and Lines
 pushMatrix();
 
 translate(640,666);
 noFill();
 strokeWeight(2);
 stroke(10,255,10); 
 arc(0,0,1200,1200,PI,TWO_PI);
 arc(0,0,934,934,PI,TWO_PI);
 arc(0,0,666,666,PI,TWO_PI);
 arc(0,0,400,400,PI,TWO_PI);
 strokeWeight(4);
 line(-640,0,640,0);
 line(0,0,-554,-320);
 line(0,0,-320,-554);
 line(0,0,0,-640);
 line(0,0,320,-554);
 line(0,0,554,-320);
 
 popMatrix();
 
 //Ultrasonic Lines
 pushMatrix();
 
 strokeWeight(5);
 stroke(10,255,10);
 translate(640,666);
 line(0,0,640*cos(radians(radarAngle)),-640*sin(radians(radarAngle)));
 
 popMatrix();
 //Object Detection Lines
 pushMatrix();
 
 translate(640,666);
 strokeWeight(5);
 stroke(255,10,10); // red color
 objectDistance = radarDistance*15;
 if(radarDistance<40)
 {
 line(objectDistance*cos(radians(radarAngle)),-objectDistance*sin(radians(radarAngle)),633*cos(radians(radarAngle)),-633*sin(radians(radarAngle)));
 }
 
 popMatrix();
}
void serialEvent (Serial port) 
{
 serialData = port.readStringUntil('#');
 serialData = serialData.substring(0,serialData.length()-1);
 
 index = serialData.indexOf("*");
 
 serialAngle= serialData.substring(0, index);
 serialDistance= serialData.substring(index+1, serialData.length());
 
 radarAngle = int(serialAngle);
 radarDistance = int(serialDistance);
}

经过以上步骤,连接电路、编程并下载之后,应该就可以完成本次制作了。 如果大家还有什么不明白的地方,欢迎留言或给我发私信,我将尽力解答,谢谢。

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...