亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

巫师步行法杖

组件和用品

Arduino 101
× 1
$4 Pololu 稳压器
× 1
3x AA 电池座,带开关
× 1
AA 电池
任何类型都可以。你需要3个。
× 1
M 桶形千斤顶适配器
$1.95 这些使连接和断开电源变得容易
× 1
F 桶形千斤顶适配器
$1.95 这些使连接和断开电源变得容易
× 1
可寻址 LED 灯条
该示例适用于任何与 NeoPixel 兼容的 LED,60 像素条。
× 1
运动胶带
任何种类的布带。这用于将电子设备固定在工作人员上并进行良好的抓握。
× 1
橡皮筋
帮助将零件固定在工作人员上,直到您可以使用胶带。
× 1
一名职员。 (扫帚、洒水管、天然手杖等)
× 1

应用和在线服务

Arduino IDE

关于这个项目

该项目使用 Arduino 101、电池和 LED 灯条来制作手势控制的向导步行杖。我们将定义三种不同的光显示“法术”,您可以通过以三种手势之一移动法杖来召唤。

技术:

该代码使用 Arduino 101 中的惯性测量单元来读取 G 力,但不使用模式匹配引擎(例如,使用 PME,请查看 Kitty Yeung 的 PME 项目)。相反,此代码会计算 X、Y 和 Z 方向的快速脉冲,并在您在短时间内执行特定组合时召唤法术。

施法:

两次快速垂直点击开始一个咒语,然后您可以向前、向左/向右快速移动工作人员,或者第三次点击以选择三个咒语中的一个,然后最后一次点击施放咒语。

视觉反馈:

为了帮助您了解您在手势中的位置,示例代码包括来自 LED 灯条的视觉反馈。当您第一次执行双击时,灯会快速闪烁白色,告诉您法术开始。您将获得每一步的视觉反馈,以便您知道将选择哪个法术。

施法法术(详细):

拿着 Arduino 101 面对你的工作人员。首先双击地面上的工作人员(轻轻地!),或者在空中快速垂直脉冲两次。当您看到白闪光灯时,将员工急剧前进或返回选择法术1,或向左或向右倾斜员工以选择拼写2,或者垂直移动第三次选择法术3.选择咒语时,灯光将发出稳定的绿色(咒语 1)、蓝色(咒语 2)或红色(咒语 3)。一旦灯亮起,用最后的垂直点击召唤咒语。灯光会以选定的颜色闪烁。

手势是时间敏感的!手势的每一步之间只有 1 秒的时间,否则法术将重置。 这意味着如果您搞砸了或选择了错误的咒语,您只需稍等片刻即可重新开始。准确地召唤法术有点难掌握,但好消息是,当你和工作人员一起走动时,法术不会被意外调用。

构建电子设备:

这基本上只是一个 Arduino 101、一块电池和一条 NeoPixel LED。

有多种配置电源的方法。最快的方法是使用 9v 电池并在 Arduino 101 上运行 LED,但电池寿命会很短。您也可以使用 LiPo 电池来最大化功率/重量以获得更“专业”的构建 - 但您需要一种安全的方法来为电池充电。对我来说,电池寿命和简单性之间的良好平衡是使用 3 节 AA 电池和 4 美元的电压调节器。这与皮影戏和万花筒无限镜中的电子设置相同。

第 1 步

从灯的末端切割约 1 厘米,从 LED 灯带收集末端线束。剥去电线末端。

第 2 步

拆开稳压器随附的弯曲插头引脚,并将其中两个焊接到绿色和黄色电线的末端。这将使您轻松地将它们插入 Arduino 101 的引脚。

第 3 步

接下来将红线焊接到稳压器上的 VIN 端子,并将两个直头焊接到 GND 和 VOUT 引脚,如图所示。

第 4 步

现在连接桶形插孔适配器。首先剥去来自电池盒的电线末端,然后将它们安装在公桶插孔的端子中并用螺丝刀拧紧。红色到 (+) 端,黑色到 (-) 端。

接下来将母桶插孔适配器连接到 LED 灯条开头的松散电线上。 YELLOW 连接到 (-) 端子,RED 连接到 (+)。

步骤 5

现在将线束连接到 Arduino 101。绿色线连接到 PIN 6,黄色线连接到 #13 附近的 GND 引脚。使用稳压器上的两个插头引脚,GND 连接到 GND,VOUT 连接到 Arduino 101 上的“VIN”引脚。不要误会!向后插入会导致异味和灼伤。我知道这个。

上传示例代码:

第 1 步

在电池组关闭的情况下,使用 USB 电缆将 Arduino 101 连接到计算机,并使用 Arduino IDE 上传附加的示例代码。

如果您以前从未对 Arduino 101 进行过编程,Arduino 网站上有很好的说明:https://www.arduino.cc/en/Guide/Arduino101

成功加载示例代码后,您可以断开 USB 连接,并通过打开电池组并在 Arduino 101 上的 USB 端口朝下、针脚朝向您的情况下尝试一些拼写手势来测试代码。尝试垂直移动棋盘四次以调用红色法术。

代码讨论:

(如果您只想按原样使用示例代码,您可以跳到构建员工。)

示例代码使用 Arduino 101 的冲击检测功能来计算冲击次数,同时运行一个计时器,在没有新冲击的情况下短时间内将冲击计数重置为零。如果您在计时器到期之前击中了正确的组合,则会调用“拼写”函数。

因为在地面上用力敲击实际上会记录初始冲击加上工作人员振动产生的几个“噪音”冲击,循环中的第一个代码只是试图从每批冲击中找到主导脉冲,并将其简单地归类为垂直、左/右或前/后。我使用一个名为“手势”的变量来保持每个主导脉冲:1 =垂直脉冲,2 =前/后脉冲,3 =左/右脉冲。

然后为了跟踪组合,代码使用“switch”语句,并随着手势的积累而移动。这有点像一本“选择你自己的冒险”书,其中每一步都说“如果下一个脉冲是左/右,继续第 2 步,如果计时器超时,回到零。”

拼写:

您可以在此处轻松更改每个法术的作用。这些目前只是运行不同颜色的“剧院追逐”示例代码。您可以在此处轻松添加更多、更改颜色或编写自己的灯光功能。 TheatreChase 函数中的前三个变量是红色、绿色和蓝色的值。最后一个数字是速度(数字越大=越慢)。

//////////////////////////////////////////// /////spells//////////////////// void tapspell() { ///红色剧院灯 theatreChase(strip.Color(127, 20, 0) ), 20);剧院追逐(带状颜色(127、20、50)、55);带.show(); } void leftspell() { theatreChase(strip.Color(0, 0, 100), 20);剧院追逐(strip.Color(0、30、120)、75);带.show(); } void forwardspell() { TheaterChase(strip.Color(0, 127, 0), 30);剧院追逐(strip.Color(0、127、90)、55);带.show(); }  

培养员工:

这里有很大的创意空间!我将专注于基本的技术构建,但制作独特的员工会很有趣。 LED 上的薄纱、薄纸或塑料瓶等光漫射器可以制作非常酷的灯光显示!

第 1 步:寻找登山杖/工作人员

您可以使用扫帚、洒水管或找一根天然木棍。迈克尔的工艺品店也有卖不错的。 (在杆部分 - 真的。)我喜欢用运动胶带包裹一个部分,以便为电子设备提供一个干净的工作区,但这是可选的。

在工作人员上放一些橡皮筋,以便更容易地连接东西。

第 2 步:将 Arduino 101 放在 Staff 上,USB 端口朝下

使用橡皮筋将 Arduino 101 固定到位。

第 3 步:使用橡皮筋帮助两端,包裹 LED

第 4 步:包裹运动胶带以固定 Arduino 101 和电池组

确保可以使用电池组上的开/关开关。您希望电池组能够安全地防止碰撞/敲击,但请记住,您最终需要更换这些电池。

第 5 步:漫射 LED 灯并进行装饰

代码

  • Wizard Walking Staff 示例代码
Wizard Walking Staff 示例代码Arduino
计算 x、y 和 z 轴上的脉冲数,某些脉冲组合会在新像素条上召唤“咒语”(灯光显示)。
/* 版权所有 (c) 2016 英特尔公司。版权所有。请参阅文件末尾的许可通知。*//* Arduino 101“Wizard's Walking Staff”。此代码使用 Adafruit Neopixel 库。此处的库安装说明:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation 确保您安装了最新的 Intel Curie Core。有关更多信息,请访问 https://www.arduino.cc/en/Guide/Arduino101*/#include "CurieIMU.h"#include #define PIN 6 //// NeoPixels 连接的是什么引脚to?Adafruit_NeoPixel strip =Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); /// 条带长 60 像素。int tr =0; //一些变量来保存颜色目标和颜色电流以进行平滑...int tg =0;int tb =0;int r =0;int g =0;int b =0;long int globaltimer =0; /// 跟踪手势与时间的计时器...例如“如果计时器没有超过 0.5 秒,并且有两次点击,则...”long intgesturetimer =0;long int ledtimer =0;int褪色 =10; /// 灯光褪色的速度有多快。用于平滑int tap =0; //垂直脉冲计数器int lr =0; //左/右脉冲计数器int fb =0; //向前/向后脉冲计数器int手势=0; // 整数状态 =0; /// 对于我们的 switch case... 这将跟踪 series.void setup() { // 把你的设置代码放在这里,运行一次: //Serial.begin(9600); globaltimer =毫秒(); // 在当前时间启动计时器gesturetimer =millis(); ledtimer =毫秒(); /* 初始化 IMU */ CurieIMU.begin(); CurieIMU.attachInterrupt(eventCallback); /* 启用冲击检测 */ CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 1500); // 1.5g =1500 毫克 CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK, 50); // 调用interupt CurieIMU.interrupts(CURIE_IMU_SHOCK)所需的尖峰毫秒数; strip.begin(); // 初始化新像素条 strip.show(); // 将所有像素初始化为 'off'}void loop() { // 将您的主要代码放在这里,重复运行: //// 基本过滤器 - IMU 记录来自反弹和反作用的多次冲击。这试图捕捉每个手势中的主要冲击。 if (millis() - globaltimer> 170) { /// 这试图找到每次冲击的主导运动轴.. 比较敲击、左右和前后运动的总和,并选择最大的。 if ((tap>
 lr) &&(tap>
 fb)) { Serial.println("tap");手势 =1;抽头 =0; lr =0; fb =0; //// 在移动分类后重置值。 } else if ((lr> fb) &&(lr> tap)) { Serial.println("lr");手势 =2;抽头 =0; lr =0; fb =0; } else if ((fb> lr) || (fb> tap)) { Serial.println("fb");手势 =3;抽头 =0; lr =0; fb =0; }////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////// if (millis() - globaltimer> 1000) { /////timeoutreset globaltimer =millis() - 170;tr =0; tg=0; tb =0;状态 =0; //手势=0; } if (millis() -gesturetimer> 1000) {gesturetimer =millis() - 350;tr =0; tg =0; tb =0;状态 =0; //手势=0; }//////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////// switch (state) { // 跟踪手势 case 0:{ /// 还没有记录手势...听水龙头。如果有,则转到情况 1。 if (millis() -gesturetimer> 350) { if (gesture ==1) { state =1;手势 =0;手势计时器 =毫秒(); } } 休息; } case 1:{ ///// 一键记录。如果发生第二次点击,播放快速闪光然后转到第 2 步。 if (millis() -gesturetimer> 350) { if (gesture ==1) { r=10;g=10;b=10; ///反馈闪光状态=2;手势 =0;手势计时器 =毫秒(); } } 休息; } case 2:{ ///////切换点 - 记录了两次点击。根据下一个手势,这三个咒语在这里发生了分歧。如果是敲击,转至情况 3。如果是 L/R,转至情况 4。如果是前/后,转至情况 5。 if (millis() -gesturetimer> 350) { if (gesture ==1) { 状态 =3;手势 =0;手势计时器 =毫秒(); } 如果(手势==2){ 状态=4;手势 =0;手势计时器 =毫秒(); } 如果(手势==3){ 状态=5;手势 =0;手势计时器 =毫秒(); } } 休息; } case 3:{ //// 记录了三个敲击声...我们在敲击法术中,将五线谱转为红色并聆听最后的“敲击”以触发咒语。 tr =20; tg =0; tb =0; globaltimer =毫秒()-250; if (millis() -gesturetimer> 350) { if (gesture ==1) { state =0; Serial.println("tappell!");点按拼写(); } } 休息; } case 4:{ ///// 两次敲击和一个 L 或 R 录音......我们在左边的咒语中,将工作人员调成蓝色并聆听最后的“敲击”以触发咒语。 tr =0; tg =0; tb =20; globaltimer =毫秒()-250;如果 (millis() - 手势计时器> 350) {;如果(手势==1){状态=0; Serial.println("leftspell!");左拼写(); } } 休息; } case 5:{ ///// //// 两次敲击和向前或向后记录......我们在向前拼写中,将工作人员调成绿色并聆听最后的“敲击”以触发咒语。 tr =0; tg =20; tb =0; globaltimer =毫秒()-250; if (millis() -gesturetimer> 350) { if (gesture ==1) { state =0; Serial.println("向前拼写!"); forwardspell(); } } 休息; }默认:{中断; } } //Serial.println(tr); if (millis()-ledtimer>fade){ /// 只每隔(淡入淡出值)毫秒定期执行下一步。与“delay()”函数不同,这允许在更新之间在程序中发生其他事情。 /// 颜色平滑。实际颜色向目标颜色移动...如果目标大于当前,则向上移动,如果小于,则向下移动。如果 (tr> r + 1) { r++; } if (tg> g + 1) { g++; } if (tb> b + 1) { b++; } if (tr  

制造工艺

  1. 感应交流电场
  2. 功率计算
  3. 使您的后处理阶段更安全的七种方法
  4. 食物颜色:使食物具有吸引力的基本成分
  5. 如何让任何物联网商业模式发挥作用——或不发挥作用?!
  6. 制作您自己的 Google Voice HAT
  7. 如何制作 Arduino+Raspberry Pi 机器人平台
  8. 如何制作玻璃纤维
  9. 如何制作注塑模具
  10. 任何一天都可以成为制造日!
  11. 使用 Arduino 制作流光溢彩监视器
  12. 如何在 Solidworks 中制作剖面动画