【R315】莲花灯
概述 |
2. 结构说明
莲花灯采用“探索者”结构件搭建、辅以外观设计而成,由曲柄摇杆机构和平行四连杆机构构成一个二级升降机构,通过杠杆来控制莲花灯的开合。
概述
莲花灯的灯叶开合主要是由膨胀机构来控制的,膨胀轮是整个结构的核心部分,这种结构的优点是可实现收缩和膨胀,从而来控制灯叶的开合。
膨胀轮
3. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
电路连接:
① 灯带:连在Bigfish扩展板的D9、D10接口上
② 舵机:连在Bigfish扩展板的D4端口上
③ 蓝牙串口模块:安装在Bigfish扩展坞上
④ 光强传感器:连在Bigfish扩展板的A0端口上
主控板 | |
扩展板 | |
传感器 | |
通信 | |
电池 | 7.4V锂电池 |
/*------------------------------------------------------------------------------------ 版权说明: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. 功能实现
4.1自主模式
编程环境:Arduino 1.8.19
下面提供一个实现暗光情况下灯叶打开,灯亮;强光情况下灯叶闭合,灯灭的参考程序(light.ino):
4.2遥控模式
APP设置:将文末资料中的“BLE_SPP_PRO.apk”安装到手机中。
① 搜索蓝牙
② 连接蓝牙
③ 模式选择
④ 按键设置
⑤ 各按键发送值
5. 资料清单
序号 | 内容 |
1 | 程序源代码 |
2 | 样机3D文件 |
【整体打包】-【R315】莲花灯-概述-资料附件.rar | 1.94MB | 下载2次 | 下载 |
|