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


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文件
资料下载链接:莲花灯-概述
相关文章:
机器人制作开源方案 | 莲花灯
1. 功能描述 莲花灯是一款基于莲花形象设计的机器人,本文示例将用两种模式来实现莲花灯的亮灭功能。 自主模式:用 光强传感器 控制莲花灯的灯叶开合。暗光情况下灯叶打开,灯亮;强光情况下灯叶闭合,灯灭。 …...
华为无线ac+fit三层组网,每个ap发射不同的业务vlan
ap管理dhcp在ac控制器上,业务dhcp在汇聚上 配置WLAN业务 (1)配置VAP模板 • 配置员工网络的VAP模板(employee) [AC-wlan-view] security-profile name employee //创建名为“employee”的安全模板 [AC-wlan-sec-prof-…...
人工智能:科技之光,生活之美
在科技飞速发展的今天,人工智能已经深入到我们的生活中,它如同一束璀璨的科技之光,照亮我们生活的每一个角落,使我们的生活更加美好。下面我将从人工智能的领域、应用以及对人工智能的看法三个方面来谈谈它对我们生活的影响。 一、…...
mysql8.0英文OCP考试第61-70题
Q61.You wish to protect your MySQL database against SQL injection attacks. Which method would fail to do this? A)using stored procedures for any database access B)using PREPARED STATEMENTS C)installing and configuring the Connection Control plugin ( …...
WaveletPool:抗混叠在微小目标检测中的重要性
文章目录 摘要1、简介2、相关研究2.1、微小物体检测2.2. 抗锯齿过滤器3、方法3.1. Wavelet Pooling3.2 一致顺序的Wavelet Pooling的WaveCNet3.3、Bottom-Heavy Backbone4、实验4.1、预训练数据集4.2、微小目标检测数据集4.3、抗混叠方法的选择及应用顺序4.4、小波的选择4.5、T…...
文章系列2:Unraveling the functional dark matter through global metagenomics
这篇文章发布于2023年10月nature。通讯作者是来自于 DOE Joint Genome Institute, Lawrence Berkeley National Laboratory, Berkeley, CA, USA. 背景介绍&目标 作者首先背景介绍了两种主流宏基因组分析方法,包括reads-based reference mapping(eg…...
ubuntu 20.04 搭建crash dump问题分析环境
ubuntu 20.04 搭建crash dump问题分析环境 1 安装依赖软件1.1 linux-dump1.2 kexec-tools1.3 安装crash工具1.4 安装gdb调试工具1.5 安装ubuntu内核调试符号1.5.1 GPG 秘钥导入1.5.2 添加仓库配置1.5.3 更新软件包1.5.4 下载和安装内核调试符号1.5.5 验证内核调试符号已经被安装…...
算法训练营一刷 总结篇
今天就是Day60了,坚持了两个月的算法训练营在今天结束了。这两个月中,学习、练习了许许多多的算法,坚持每天完成博客来打卡,养成了写C的习惯,现在相比于Python我反而更喜欢思路严谨的C。感谢这个平台,感谢C…...
Linux中的MFS分布式文件系统
目录 一、MFS分布式文件系统 1、MooseFS简介 2、Moose File System的体系结构 (1)MooseFS Master (2)MooseFS Chunk Server (3)MooseFS Metalogger (4)MooseFS Client &…...
气相色谱质谱仪样品传输装置中电动针阀和微泄漏阀的解决方案
标题 摘要:针对目前国内外各种质谱仪压差法进样装置无法准确控制进气流量,且无相应配套产品的问题,本文提出了相应的解决方案和配套部件。解决方案主要解决了制作更小流量毛细管和毛细管进气端真空压力精密控制问题,微流量毛细管的…...
ArkTS基础知识
ArkTS基础知识 ArkUI开发框架 ArkTS声明式开发范式 装饰器: 用来装饰类,结构体,方法及变量。如: Entry:入口组件 Component :表示自定义组件 State 都是装饰器:组件中的状态变量,该…...
Kotlin学习(二)
2.kotlin学习(二) 1.条件控制 package com.simon.secondfun main(args: Array<String>) {//ifvar a 1var b 2var max:Intif (a > b){max a}else{max b}//作为表达式结果赋值给max1 感觉这个简单啊var max1 if(a>b)a else bprintln(ma…...
LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
根据图片生成推广文案, 用的HuggingFace中的image-caption模型 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数…...
QFontDialog开发详解
QFontDialog 类是 Qt 框架中用于选择字体的对话框类。它允许用户选择字体的各种属性,如字体名称、字号、粗体、斜体等。以下是 QFontDialog 的一些常见用法和详解: 一、QFontDialog基本用法 #include <QApplication> #include <QFontDialog> #include <QMes…...
【C++进阶之路】第七篇:异常
文章目录 一、C语言传统的处理错误的方式二、 C异常概念三、异常的使用1.异常的抛出和捕获2.异常的重新抛出3.异常安全4.异常规范 四、自定义异常体系五、C标准库的异常体系(了解)六、异常的优缺点 一、C语言传统的处理错误的方式 传统的错误处理机制&am…...
shell 判断文件是否存在(csh bash)
文章目录 前言1. -e 判断文件是否存在2. -f 判断文件是否存在且为普通文件3. -d 判断文件是否存在且为目录3. -s 判断文件是否存在且不为空4. -r 判断文件是否存在且可读5. -w 判断文件是否存在且可写6. -x 判断文件是否存在且可执行 前言 Shell 编程能提升我们工作效率&#…...
第六年到第十年是分水岭
我今年懈怠了,觉得就这样了,看到知乎上有个大神的帖子,深受触动,前五年都差不多,第六年到第十年才是分水岭,是否愿意继续努力,才是关键。拷贝如下: 作者:技术王 来源&…...
关于标准库中的string类 - c++
目录 关于string类 string类的常用接口 string类常用接口的简单模拟实现 关于string类 string类在cplusplus.com的文档介绍 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 3. string在…...
Chrome添加扩展程序
Crx4Chrome 下载crx 打开扩展程序 如果拖动crx文件到扩展程序提示只能通过Chrome应用商店添加此项内容 修改crx文件后缀为zip并解压,再拖动到扩展程序 Vue.js devtools...
C++单调向量算法:132模式枚举1简洁版
本题不同解法 包括题目及代码C二分查找算法:132 模式解法一枚举3C二分查找算法:132 模式解法二枚举2代码简洁C二分查找算法:132 模式解法三枚举1性能最佳C单调向量算法:132 模式解法三枚举1代码更简洁C二分查找算法:1…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
