机器人制作开源方案 | 莲花灯

2023-11-22 08:36

本文主要是介绍机器人制作开源方案 | 莲花灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 功能描述

       莲花灯是一款基于莲花形象设计的机器人,本文示例将用两种模式来实现莲花灯的亮灭功能。
       自主模式:用 光强传感器 控制莲花灯的灯叶开合。暗光情况下灯叶打开,灯亮;强光情况下灯叶闭合,灯灭。
       遥控模式:采用 蓝牙串口模块控制灯叶开合。灯叶打开,灯亮;灯叶闭合,灯灭。

0-机器人制作开源方案 | 莲花灯

2. 结构说明

       莲花灯采用“探索者”结构件搭建、辅以外观设计而成,由曲柄摇杆机构和平行四连杆机构构成一个二级升降机构,通过杠杆来控制莲花灯的开合。

       莲花灯的灯叶开合主要是由膨胀机构来控制的,膨胀轮是整个结构的核心部分,这种结构的优点是可实现收缩和膨胀,从而来控制灯叶的开合。

膨胀轮

3. 电子硬件

在这个示例中,我们采用了以下硬件,请大家参考:

电路连接:

       ① 灯带:连在Bigfish扩展板的D9、D10接口上
       ② 舵机:连在Bigfish扩展板的D4端口上
       ③ 蓝牙串口模块:安装在Bigfish扩展坞上
       ④ 光强传感器:连在Bigfish扩展板的A0端口上

4. 功能实现

4.1自主模式
编程环境:Arduino 1.8.19
下面提供一个实现暗光情况下灯叶打开,灯亮;强光情况下灯叶闭合,灯灭的参考程序(light.ino):

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-10-25 https://www.robotway.com/------------------------------*//** Light测试例程* 2018/04/17* ————————————* 接线:*    灯带:9、10*    舵机:4*    蓝牙:Bigfish扩展坞*    光强:A0* ————————————* 功能:*    控制模式:蓝牙控制灯叶开合*    自主模式:光强传感器控制灯叶开合*   *    灯叶打开,灯亮;灯叶闭合,灯灭*/#include <ServoTimer2.h>#include "light.h"ServoTimer2 myServo;int servo_port = 4;       //定义舵机引脚int sensor_port = A0;     //定义光强传感器引脚int servo_value = 1550;   //定义舵机初始值 PWM/*int open_angle = 1150;    //灯叶打开时舵机的值int close_angle = 1550;   //灯叶闭合时舵机的值*/void setup() {Serial.begin(9600);PortInit();myServo.write(servo_value);delay(1000);}void loop() {/*Bluetooth Mode*/   if(SerialRead() == '1'){Serial.println("Bluetooth Mode");while(true){switch(SerialRead()){case '2':Serial.println("OPEN");ServoGo(1150);   //OPENbreak;case '3':Serial.println("CLOSE");ServoGo(1550);   //CLOSEbreak;default:break;}if(SerialRead() == '4') {Serial.println("Auto Mode");break;}}}/* Auto Mode*/AutoMode();  }/*端口初始化*/void PortInit(){pinMode(sensor_port, INPUT);pinMode(servo_port, OUTPUT);pinMode(9, OUTPUT);pinMode(10, OUTPUT);digitalWrite(9, LOW);digitalWrite(10, LOW);myServo.attach(servo_port);}/*串口控制*/char SerialRead(){char c;while(Serial.available()) {c = Serial.read();  }return c;}/*自主模式*/void AutoMode(){if(digitalRead(sensor_port)){   //亮光下,光强返回值1,灯叶闭合,灯光关闭ServoGo(1550);}if(!digitalRead(sensor_port)){   //黑暗中,光强返回0,灯叶打开,灯光开启ServoGo(1150);}}/*舵机控制*/void ServoGo(int where){   //舵机控制函数,参数:目标角度int delta = where - servo_value;    //delta < 0: OPEN ; delta > 0: CLOSEif(delta == 0) return;float light_value = delta < 0 ? 0 : 255;   int diff = delta < 0 ? -1 : 1;for(int i=0;i<abs(delta);i++){servo_value += diff;if(delta < 0){light_value += 0.65;   //0.65 (255 / delta);if(light_value > 255) light_value = 255;}else if(delta > 0){light_value -= 0.65;if(light_value < 0) light_value = 0;}LightState(&light_value);  myServo.write(servo_value);delay(10);  }}/*灯光控制*/void LightState(float * value){analogWrite(9, *value);analogWrite(10, 0);}

4.2遥控模式
APP设置:将文末资料中的“BLE_SPP_PRO.apk”安装到手机中。
① 搜索蓝牙

​② 连接蓝牙

③ 模式选择

④ 按键设置

​⑤ 各按键发送值

5. 资料清单

①程序源代码
②样机3D文件
资料下载链接:莲花灯-概述

这篇关于机器人制作开源方案 | 莲花灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/408870

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4