元器件交易网-中发网全新升级平台
关注我们:
首页 > 行情中心 > 正文

关于自制炫酷KTV 闪光球方法的解析

  这是一个电动的桌上迪斯科音乐球,既适合周末的聚会,即兴的舞蹈,也适合周二时分的下午茶。它包括华丽的外观,响亮的音乐,技术宅喜欢的Arduino,还有覆盖在泡沫塑料外层的闪亮镜面。聚会时总需要什么东西用来燃起气氛,这样一个迪斯科光球就再好不过了。在哈特福德时男孩们会每周聚会,但是我现在住在枯燥的印第安纳州,这里除了教堂联谊之外没有其它的聚会活动。为了带回聚会的好时光,我打算从自制设备开始。

  一、 工具和材料

  1、 Arduino IDE。

  2、 烙铁。

  3、 电磨。

  4、 热熔胶枪。

  5、 手套/口罩和眼部护具。

  6、 6英寸发泡塑料球。

  7、 8英寸x4英寸x2英寸聚苯乙烯泡沫塑料块(不在照片上)。

  8、 许多1英寸见方的镜子。

  9、 一些0.25英寸的小镜面。

  10、Krylong 闪亮漆,找个大瓶装的。

  11、粘合剂/胶水/环氧胶之类,最后发现热熔胶我用起来最顺手。

  12、 魔术贴。

  13、 Arduino Uno。

  14、 Adafruit Wave Shield 。

  15、 连续旋转伺服电机。

  16、 电池包或者电源适配器。

  二、装饰球体

 

  支架上的球体。准备好的纸袋,手套和衣架做的球体支架。开始喷闪亮漆。表面没有空白部分了。翻过来喷涂下边。我想要一个有光泽的反光基体,这样在没有镜子的部位也会有涂的反光效果。整个球几乎都用闪亮漆喷过。可以用铁丝做一个悬空的支架把球体支在空中,这样就可以均匀的给球体的各个表面全部喷上漆。

  三、 粘贴镜片

  看起来多闪亮!

  继续,快完了

  用碎镜片填入大小合适的空隙

  从中心线开始然后缓慢向四周铺开。滴上一点胶然后贴上镜片。不要担心间隙太大,毕竟我们在往圆球上贴方片,有些空隙在所难免。这就是之前要在球体表面喷上一层光亮漆的原因。在贴完顶部之后我不得不中断工作去睡觉。用的胶好像永远不会干,于是第二天改用了热胶。

 

  四、完成球体

  在顶端用一个螺丝刀帮助将球体定位到伺服电机的输出轮上

  标记输出轮所占的位置

  用拇指压缩发泡材料使输出轮可以嵌入其中,后来我加深了这个槽使输出轮凹进0.5cm

  现在镜子们就位了,需要用个好点的方法连接到伺服电机上。魔术贴会是种很好的材料,用它连接不会损坏伺服电机,并且可以很方便的拆除球体。

 

  五、制作基座

  记下挖槽的深度。后来我改主意了,将电机挪动了一点

  切割之后将零件嵌入看看效果

  电机槽需要加深

  绝缘用电工胶带,因为这里喷了闪亮漆

  有点像泡沫制ipod

  开始粘贴镜片

  看这反光

  最后需要布置扬声器,镜片有助于固定扬声器,因为部分镜片是压在扬声器外圈上的

  Arduino 的电源线孔和扬声器的引线孔

  背面也贴好镜片

  通过在标记好的地方下刀可以切割出自己需要形状的塑料泡沫块。像所有的切割工作一样,多测量多复核,然后再动刀。我用一把电磨磨去多余的泡沫块,可以用泡沫塑料切割机,也可以用一个打火机,还可以直接用手撕开它。无论用哪种方法,伺服电机都要牢牢固定在基座上,好让所有的扭矩和功率传递* 到球上。另外电磨磨下的泡沫塑料渣是很好的假雪,可以带来一些乐趣。但是为了你的肺着想,记得带上适当的护具。在基座周边粘上镜子,注意不要被有腐蚀性的胶水烧伤,或者被玻璃割到自己的手。

 

  六、 引线

  伺服电机是唯一需要连接导线的部件。连接5V 电源和地线,并将信号线(白线)连接到9号引脚上。我事先给LED,激光灯,按钮之类留了空间,你可以按自己的需求添加它们。安转另一个伺服电机让激光器也旋转方向,这是我希望的效果,同样你可以自行设计并实现。我没有用Arduino 自带的伺服电机控制库因为它太繁琐了。

  七、升级程序

  程序:

  #include

  #include

  #include "util.h"

  #include "wave.h"

  AF_Wave card;

  File f;

  Wavefile wave; // only one!

  uint16_t samplerate;

  void setup() {

  Serial.begin(9600); // set up Serial library at 9600 bps

  Serial.println("Wave test!");

  pinMode(2, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(5, OUTPUT);

  pinMode(9, OUTPUT);

  if (!card.init_card()) {

  putstring_nl("Card init. failed!"); return;

  }

  if (!card.open_partition()) {

  putstring_nl("No partition!"); return;

  }

  if (!card.open_filesys()) {

  putstring_nl("Couldn"t open filesys"); return;

  }

  if (!card.open_rootdir()) {

  putstring_nl("Couldn"t open dir"); return;

  }

  putstring_nl("Files found:");

  ls();

  }

  void ls() {

  char name[13];

  int ret;

  card.reset_dir();

  putstring_nl("Files found:");

  while (1) {

  ret = card.get_next_name_in_dir(name);

  if (!ret) {

  card.reset_dir();

  return;

  }

  Serial.println(name);

  }

  }

  uint8_t tracknum = 0;

  void loop() {

  uint8_t i, r;

  char c, name[15];

  card.reset_dir();

  // scroll through the files in the directory

  for (i=0; i

  r = card.get_next_name_in_dir(name);

  if (!r) {

  // ran out of tracks! start over

  tracknum = 0;

  return;

  }

  }

  putstring(" Playing "); Serial.print(name);

  // reset the directory so we can find the file

  card.reset_dir();

  playcomplete(name);

  tracknum++;

  }

  void playcomplete(char *name) {

  uint16_t potval;

  uint32_t newsamplerate;

  playfile(name);

  samplerate = wave.dwSamplesPerSec;

  while (wave.isplaying) {

  digitalWrite(9, HIGH);

  delay(1);

  digitalWrite(9, LOW);

  delay(1);

  // you can do stuff here!

  delay(50);

  }

  card.close_file(f);

  }

  void playfile(char *name) {

  f = card.open_file(name);

  if (!f) {

  putstring_nl(" Couldn"t open file"); return;

  }

  if (!wave.create(f)) {

  putstring_nl(" Not a valid WAV"); return;

  }

  // ok time to play!

  wave.play();

  }

 

  8 大功告成

  现在按下开关,开始一场自己的宴会吧!

  • 微笑
  • 流汗
  • 难过
  • 羡慕
  • 愤怒
  • 流泪