历史上的今天
返回首页

历史上的今天

今天是:2026年01月02日(星期五)

2023年01月02日 | 基于Arduino制作一款自动家庭清洁机器人

2023-01-02 来源:circuitdigest

自动地板清洁剂并不是什么新鲜事,但它们都有一个共同的问题。它们对于它们所做的事情来说都太昂贵了。今天,我们将制作一款自动家庭清洁,其成本仅为市场上的一小部分。这个机器人可以它前面的障碍物和物体,并可以继续移动,避开障碍物,直到整个房间被清理干净。它附有一个小刷子来清洁地板。

所需组件:

UNO R3。

超声波。

Arduino Motor Driver Shield。

轮驱动机器人底盘。

计算机对Arduino进行。

电池。

为Arduino供电的移动

鞋刷。

苏格兰布里特磨砂垫。

注意:除了使用电池,您还可以像我们一样使用长 4 股线。虽然这不是一个非常优雅或实用的解决方案,但如果您不打算每天在现实世界中使用它,则可以这样做。确保电缆的长度足够。

HC-SR04 超声波传感器:

超声波传感器用于以高精度和稳定的读数测量距离。它可以测量从 2 厘米到 400 厘米或从 1 英寸到 13 英尺的距离。它在空气中以40KHz的频率发射超声波,如果物体挡住了它的方式,那么它将反弹回传感器。通过使用撞击物体并返回所需的时间,您可以计算距离。

超声波传感器使用一种称为“ECHO”的技术。“回声”只是一种反射的声波。当声音在到达死胡同后反射回来时,您将有一个回声。

当我们使“触发”引脚高约10us时,H04模块在超声波范围内产生声音振动,这将以声速发送8个周期的声波突发,撞击物体后,它将被回波引脚接收。根据声音振动恢复所需的时间,它提供适当的脉冲输出。如果物体距离很远,则需要更多时间才能听到回波,并且输出脉冲宽度会很大。如果障碍物近在咫尺,那么回声将被更快地听到,输出脉冲宽度将更小。

我们可以根据超声波返回传感器所花费的时间计算物体的距离。由于声的时间和速度是已知的,我们可以通过以下公式计算距离。

Distance= (me x Speed of Sound in r (343 m/s))/2.

该值除以 2,因为波向前和向后传播覆盖相同的距离。因此,到达障碍物的时间仅为总时间的一半

所以以厘米为单位的距离 = 17150*T

地板清洁机器人组装:

将 Arduino 安装在机箱上。确保您的机箱由金属制成时不会短路任何东西。最好为Arduino和器扩展板买一个盒子。使用螺钉将电机与车轮和底盘固定。您的机箱应该可以从工厂开始选择执行此操作,但如果没有,您可以即兴制作不同的解决方案。环氧树脂不是一个坏主意。将鞋刷安装在机箱前面。为此,我们使用了M-Seal环氧树脂和钻孔螺钉的组合,尽管您可以使用任何其他对您来说可能更容易的解决方案。将苏格兰布里特磨砂垫安装在刷子后面。我们使用了穿过底盘的轴来支撑它,尽管这也是即兴的。弹簧加载轴可用于伴随它。安装电池(或机箱背面的电缆)。环氧树脂或电池座是做到这一点的好方法。热胶也不错。

 

接线和连接:

这款自动家庭清洁机器人的电路非常简单。如下所述,将超声波传感器连接到Arduino,并像任何其他扩展板一样将屏蔽放在Arduino上。

超声波的Trig引脚连接到Arduino上的第12个引脚,Echo引脚连接到第13个引脚,电压引脚连接到5V引脚,接地引脚连接到接地引脚。Echo引脚和Trig引脚允许Arduino与传感器。电源通过电压和接地引脚输送到传感器,三角和回波引脚允许它使用 Arduino 发送和接收数据。

电机屏蔽应至少有 2 个输出,并且它们应连接到 2 个电机。通常,这些输出标记为“M1”和“M2”或“电机1”和“电机2”。将电池和移动电源分别连接到电机护罩和 Arduino。不要交叉连接它们。电机屏蔽应具有输入通道。如果您使用的是电线,请将它们连接到交流适配器。

编程说明:

打开 Arduino IDE。将本末尾给出的完整 Arduino 代码粘贴到 IDE 中。将Arduino连接到计算机。在“工具/端口”中选择端口。单击上传按钮。

测试机器人。如果它变得太少或太多,请尝试延迟直到完美。

在进入代码之前,我们需要安装afruit 电机屏蔽库来驱动直流电机。由于我们使用的是 L293D 电机驱动器扩展板,因此我们需要从此处 AFmotor 库。然后将其添加到Arduino IDE库文件夹中。确保将其重命名为 AFMotor。了解有关安装此库的更多信息。

代码很简单,很容易理解,但在这里我们解释了它的几个部分:

下面的代码设置机器人。首先,我们包括了用于驱动带有电机驱动器盾牌的电机的 Adafruit 库。之后,我们定义了三角引脚和回声引脚。它还设置电机。它将三角引脚设置为输出,将回显引脚设置为输入。

#include
#define trigPin 12
#define echon 13
AF_Motor motor1(1,MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);

void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
下面的代码告诉Arduino循环以下命令。之后,它使用传感器发送和接收超声波。一旦超声波反弹回来,它就会计算它与物体的距离,在注意到物体在设定的距离内后,它会告诉 Arduino 相应地旋转电机。

void loop() {
long duraTIon, distance;
digitalWri(trigPin, LOW); 
delayMicroseconds(2); 
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duraTIon = pulseIn(echoPin, HIGH);
distance = (duraTIon/2) / 29.1;

if (distance < 20) { 
motor1.setSpeed(255);
motor2.setSpeed(0);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
delay(2000); //CHANGE THIS ACCORDING TO HOW THE ROBOT TURNS. 
这使得机器人通过旋转一个电机并保持另一个电机停滞来转动。

下面的代码使机器人向同一方向转动两个电机,以使其向前移动,直到它检测到上述边界中的物体。

else {
motor1.setSpeed(160); //CHANGE THIS ACCORDING TO HOW FAST YOUR ROBOT SHOULD GO.
motor2.setSpeed(160); //CHANGE THIS TO THE SAME VALUE AS YOU PUT IN ABOVE.
motor1.run(FORWARD);
motor2.run(FORWARD); 
}

#include

#define trigPin 12

#define echoPin 13

AF_DCMotor motor1(1,MOTOR12_64KHZ);

AF_DCMotor motor2(2, MOTOR12_8KHZ);



void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

}



void loop() {



long duration, distance;

digitalWrite(trigPin, LOW); 

delayMicroseconds(2); 

digitalWrite(trigPin, HIGH);



delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration/2) / 29.1;



if (distance < 20) { 

motor1.setSpeed(255);

motor2.setSpeed(0);

motor1.run(BACKWARD);

motor2.run(BACKWARD);

delay(2000); //CHANGE THIS ACCORDING TO HOW THE ROBOT TURNS. 

}

else {

motor1.setSpeed(160); //CHANGE THIS ACCORDING TO HOW FAST YOUR ROBOT SHOULD GO.

motor2.setSpeed(160); //CHANGE THIS TO THE SAME VALUE AS YOU PUT IN ABOVE.

motor1.run(FORWARD);

motor2.run(FORWARD); 

}

推荐阅读

史海拾趣

H&D Wireless公司的发展小趣事

随着全球化进程的加速,高创也开始了其全球化布局的步伐。除了在以色列和中国设立研发中心外,高创还积极拓展国际市场,与全球多个国家和地区的客户建立了长期合作关系。通过参加国际知名展会如汉诺威工业博览会等,高创不仅展示了其最新技术和产品,还加强了与国际同行的交流与合作,进一步提升了其国际知名度和影响力。

ACCUTEK公司的发展小趣事

在发展过程中,ACCUTEK公司始终注重品牌建设和品质提升。公司投入大量资源用于品牌推广和市场宣传,提高了品牌知名度和美誉度。同时,公司还建立了严格的质量管理体系和售后服务体系,确保每一台出厂的设备都能达到客户的要求和期望。这些举措有效地提升了公司的市场竞争力,赢得了更多客户的信任和支持。

ARBOR公司的发展小趣事

随着环保意识的日益增强,ARBOR公司积极响应国家号召,致力于绿色电子产品的研发和生产。公司投入大量资金研发环保材料和技术,成功推出了一系列绿色电子产品。这些产品不仅具有优异的性能,还符合环保标准,得到了消费者的广泛认可。ARBOR公司的绿色环保理念也为整个电子行业树立了榜样。

Elpida Memory公司的发展小趣事

尽管有政府的支持,但Elpida Memory的经营状况并未得到根本性的改善。在经历了多年的亏损和重组后,Elpida Memory最终于2012年被美国的美光科技(Micron Technology)收购。这一收购标志着Elpida Memory正式退出了日本半导体产业的舞台,但也为其未来的发展提供了新的机遇。

联智(Celfras)公司的发展小趣事

江西联智集成电路有限公司(简称联智)自2016年成立以来,始终致力于无线充电技术的研发和创新。公司凭借其先进的无线充电TX/RX芯片解决方案,迅速在行业内崭露头角。联智不仅拥有由多名高校博士和高级研发人员组成的核心研发团队,还在中国及韩国设立了研发中心,确保技术的领先性和市场竞争力。

CAMDENBOSS公司的发展小趣事

CAMDENBOSS公司深知人才是企业发展的核心动力。因此,公司注重人才培养和团队建设,通过提供丰富的培训和学习机会,不断提升员工的技能和素质。同时,公司还建立了完善的激励机制和晋升通道,鼓励员工积极创新、勇攀高峰。这些举措不仅增强了员工的归属感和凝聚力,也为公司的长远发展奠定了坚实的基础。

请注意,以上故事均基于虚构和假设,并非CAMDENBOSS公司的真实历史。如果您需要了解该公司的真实发展情况,建议查阅相关资料或联系该公司进行了解。

问答坊 | AI 解惑

嵌入式GSM短信息接口的软硬件设计

引 言   SMS(Short Message Service)短信息服务是GSM(Global System for Mobile Communication)系统中提供的一种GSM终端(手机)之间,通过服务中心(Service Center)进行文本信息收发的应用服务,其中服务中心完成信息的存储和转发功能。短 ...…

查看全部问答>

电子钟设计详解

本帖最后由 paulhyde 于 2014-9-15 09:34 编辑 电子钟设计  …

查看全部问答>

急,请教高手,WinCE中CF卡的hive注册表保存问题

CF卡hive注册表保存问题。我按网上的众多资料中几乎每种说法都试过了,但还是不行,不是启动黑屏就是不能保存。 我就是想在进入CE后将IP设置的信息保存下来,下次开机不必从新设置。我的是冷启动,直接拔插电源的。 哎。。搞了两天了没有一点进展 ...…

查看全部问答>

DM9000的ip可以任意设置么?

在DM9000所给的web例子中,设定DM9000的IP地址为: 172,20,24,42,然后将对接的PC的IP也设在该网段就行了,我想问的是,是不是DM9000的IP可以任意设置,只要保证同和它连接的PC的IP在一个网段就行了?…

查看全部问答>

关于max232CPE的小问题

我用了max232cpe做了个串口烧录器,主要烧录STC51单片机,但是就是不行,我在max232里看到max232周围的电容用的是1u的,max232A用的电容是0.1U的,我想问一下max232可以用0.1u的电容吗?我的就是无法烧录,你们谁有完整的线路图给我个,谢谢。…

查看全部问答>

不明白现在51学习板为什么配彩屏

不明白现在51学习板为什么都配彩屏,就因为学生不懂,忽悠学生们的钱?还真不如做点实用的,把价格降下来,给广大学生们省点钱来搞学习。 看看实际做产品的,哪个产品是用51来驱动彩屏做显示的?简直赚钱不要命。…

查看全部问答>

初学FPGA (4)不完整条件语句与时序电路(EEFPGA学习计划)

…… BEGIN IF CLK’EVENT AND CLK=’1’   THEN Q1<=D; END IF; 不完整的条件语句:即在条件语句中,没有将所有可能发生的情况给出对应的处理方式。对于这种现象,VHDL综合器理解为:对于不满足的条件,跳过Q1<=D不执行,但是需要保 ...…

查看全部问答>

数码管显示

小弟初学!请求各位帮我一下。共阳数码管 module LED(data,sel);     output[7:0] data;   output[7:0] sel;    wire [7:0] data;wire [7:0] sel;assign sel=8\'b11111111;    //位 ...…

查看全部问答>

为什么不能单步执行左移右移的操作

如题,,,,我发现在单步执行的时候,有左移或者右移的命令都跳过去了。这是怎么回事呢??…

查看全部问答>

expression must have pointer type

mdk中出现expression must have pointer type看一下出错的语句是否是这样的:TIM_TimeBaseInitstruct->TIM_Prescaler改为  TIM_TimeBaseInitstruct.TIM_Prescaler。可能就好了…

查看全部问答>