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

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

相关文章

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

利用Python实现可回滚方案的示例代码

《利用Python实现可回滚方案的示例代码》很多项目翻车不是因为不会做,而是走错了方向却没法回头,技术选型失败的风险我们都清楚,但真正能提前规划“回滚方案”的人不多,本文从实际项目出发,教你如何用Py... 目录描述题解答案(核心思路)题解代码分析第一步:抽象缓存接口第二步:实现两个版本第三步:根据 Fea

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R