加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 1. 功能描述
    • 2. 结构说明
    • 3. 电子硬件
    • 4. 功能实现
    • 5. 资料清单
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

03/01 10:55
1950
阅读需 9 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. 功能描述

莲花灯是一款基于莲花形象设计的机器人,本文示例将用两种模式来实现莲花灯的亮灭功能。

自主模式:用 光强传感器 控制莲花灯的灯叶开合。暗光情况下灯叶打开,灯亮;强光情况下灯叶闭合,灯灭。

遥控模式:采用 蓝牙串口模块 控制灯叶开合。灯叶打开,灯亮;灯叶闭合,灯灭。

2. 结构说明

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

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

3. 电子硬件

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

主控板 Basra主控板(兼容Arduino Uno)‍
扩展板 Bigfish2.1扩展板‍
传感器 光强传感器
通信 蓝牙串口模块
电池 7.4V锂电池

电路连接:

① 灯带:连在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 at

https://opensource.org/licenses/MIT

by 机器谱 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);   //OPEN

break;

case '3':

Serial.println("CLOSE");

ServoGo(1550);   //CLOSE

break;

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: CLOSE

if(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文件

资料下载链接 莲花灯

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ADAU1467WBCPZ300RL 1 Analog Devices Inc Sigma DSP, Digital Audio Processor with Extended Internal Memory and I/O Functionality

ECAD模型

下载ECAD模型
暂无数据 查看
NCT7904D 1 Nuvoton Technology Corp Consumer Circuit, PQFP48, 7 X 7 MM, 1.40 MM HEIGHT, HALOGEN FREE AND ROHS COMPLIANT, LQFP-48
暂无数据 查看
LM386M-1/NOPB 1 National Semiconductor Corporation IC 0.325 W, 1 CHANNEL, AUDIO AMPLIFIER, PDSO8, SOIC-8, Audio/Video Amplifier
$1.32 查看

相关推荐

电子产业图谱

机器人开源项目分享~

微信公众号
TA的热门作品