音乐狂魔妖娆花

2018-07-131.3万
AI 快速预览详细 收起
本文介绍了一种通过micro:bit和Arduino对妖娆花进行改造的方法,使其能够根据音乐频率的变化进行扭动和灯光效果。所需材料包括micro:bit、电机扩展板、声音模拟传感器、电机和LED灯带等。通过编写程序,可以实现声音传感器控制电机转速,并增加灯光效果。此外,还提供了Arduino版本的改造方法,使用Romeo、MP3模块、喇叭、频谱分析器等组件。整个项目适合零基础新手和STEM教育场景,能够激发创造力和动手能力。


近几个月来,抖音风靡全国,最魔性的就是妖娆花了,妖娆花的原型长这样:
音乐狂魔妖娆花图7


于是,我也买了一个妖娆花来更紧时尚潮流。
欣赏了它妖娆风骚的表演

然而,拆机小能手并不能满足只是看着它表演,于是,我把它拆了

恩~~~的确很魔性
但我拆了以后发现,原理很简单,mp3芯片,里面烧录了很多首歌曲,扭动装置也就是一个通电的电机,完全没有技术含量所言。
于是,我想进行改造。
【目标】
   随音乐的频率大小进行扭动,有扭动速度的变化过程。


........................................
........................................micro:bit版本分割线

.............................................................................
【材料】




序号名称 数量 图片
1micro:bit 1 音乐狂魔妖娆花图9
2电机扩展板 1 音乐狂魔妖娆花图8
3声音模拟传感器 1 音乐狂魔妖娆花图3
4电机 1 音乐狂魔妖娆花图10
5LED灯带1 音乐狂魔妖娆花图11
6电池盒 1 音乐狂魔妖娆花图16
7 microUSB连接线 1 音乐狂魔妖娆花图12




【编写程序】
step1
利用声音模拟传感器获得不同的数值,并按区间分开分别赋予变量数字
音乐狂魔妖娆花图13
将声音模拟传感器连接电机扩展板上的P0管脚,对着声音模拟传感器放声音,观察micro:bit显示屏上的数字变化。
step2:
连接电机到电机扩展板的M2口,烧录程序,观察电机转速
音乐狂魔妖娆花图14
如果调试无误,应该可以观察到,当有声音的时候,电机转速会增加,显示屏上的数字也会变化,当声音频率增加时,电机转速增加,显示屏上的数字值增加。
这样,就基础的完成了声音传感器控制电机转速的目标
step3
增加灯光效果,想达到随着声音频率的增加,灯带亮灯速度增加。灯带连接p2引脚
音乐狂魔妖娆花图15
通过改变亮灯的延迟时间,来控制亮灯的速度
【内部结构】


音乐狂魔妖娆花图17

【实物效果】[flash]%5Bflash%5D[/flash][/flash]






--------------------------------
---------------------------------Arduino版本分割线
----------------------------------
音乐狂魔妖娆花也可以用arduino来实现
【所需材料】



序号名称 数量 图片
1 Romeo 1 音乐狂魔妖娆花图18
2 MP3 1 音乐狂魔妖娆花图1
3喇叭 1 音乐狂魔妖娆花图19
4 频谱分析器 1 音乐狂魔妖娆花图2
5声音模拟传感器 1
6 电机 1 音乐狂魔妖娆花图4
7 电源 1 音乐狂魔妖娆花图6
8 按钮 1 音乐狂魔妖娆花图20






【内部结构图】
音乐狂魔妖娆花图5


【代码】
#include <AudioAnalyzer.h>
#include <SoftwareSerial.h>
#include <Romeo_m.h>
#include <math.h>
#include <Adafruit_NeoPixel.h>


#define PIN 12
#define LED_COUNT 7
SoftwareSerial mySerial(10, 11);
int ledPin = 12;
Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);
unsigned char order[4] = {0xAA, 0x06, 0x00, 0xB0};
unsigned char stopmusic[4] = {0xAA, 0x10, 0x00, 0xBA};
int E1 = 5;
int M1 = 4;
unsigned char pre[4] = {0xAA, 0x05, 0x00, 0xAF};
Analyzer Audio = Analyzer(8, 7, 5);
int FreqVal[7];
int test;
int test1;
void setup() {
  pinMode(ledPin, OUTPUT);
  mySerial.begin(9600);
  Serial.begin(115200);
  leds.begin();
  clearLEDs();
  leds.show();
  Audio.Init();
  volume(0x1E);//音量设置0x00-0x1E
  attachInterrupt(0, turn, RISING);
}




void loop() {
  mySerial.write(order, 4);
  analogWrite (E1, 150);
  digitalWrite(M1, HIGH);
  delay(30000);


}
void M(int a)
{
  analogWrite (E1, 50 * a); //PWM调速
  digitalWrite(M1, HIGH);
  delay(1000);
}




void play(unsigned char Track)
{
  unsigned char play[6] = {0xAA, 0x07, 0x02, 0x00, Track, Track + 0xB3};
  mySerial.write(play, 6);
}
void volume( unsigned char vol)
{
  unsigned char volume[5] = {0xAA, 0x13, 0x01, vol, vol + 0xBE};
  mySerial.write(volume, 5);
}


void turn ()
{
  mySerial.write(stopmusic, 4);
  while (1)
  {
    Audio.ReadFreq(FreqVal);//返回7个带通滤波器过滤出的的7个对应值
    test1 = max((FreqVal[3] - 250), 0);
    Serial.print("test");
    test = test1 - 50;
    Serial.print(test);
    int flag;
    if (test < 100)
    {
      flag = 1;
    }
    else if (test < 200)
    {
      flag = 2;
    }
    else if (test < 300)
    {
      flag = 3;
    }
    else if (test < 400)
    {
      flag = 4;
    }
    else
      flag = 5;
    M(flag);
    rainbow(flag);
  }
}


void rainbow(int k)
{ int i, j;
  int h;
  i = random (7) ;
  j = random(1, 7);
  h = 600 / k;
  leds.setPixelColor(i , rainbowOrder(j));
  delay(h);
  leds.show();
  clearLEDs();
}


uint32_t rainbowOrder(byte position)
{
  if (position < 2)
  {
    return leds.Color(0xFF, position * 8, 0);
  }
  else if (position < 3)
  {
    return leds.Color(0xFF - position * 8, 0xFF, 0);
  }
  else if (position < 4)
  {
    return leds.Color(0, 0xFF, position * 8);
  }
  else if (position < 5)
  {
    return leds.Color(0, 0xFF - position * 8, 0xFF);
  }
  else if (position < 6)
  {
    return leds.Color(position * 8, 0, 0xFF);
  }
  else
  {
    return leds.Color(0xFF, 0x00, 0xFF - position * 8);
  }
}




void clearLEDs()
{
  for (int i = 0; i < LED_COUNT; i++)
  {
    leds.setPixelColor(i, 0);
  }
}












创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(8)
yoyojacky
yoyojacky
哈哈, 妹纸的一脸不屑。。。看来已经看透了一切。。。
许培享
许培享
越折腾,技术越高
DI玩
DI玩
好玩是最要紧的!
dt
dt
会折腾 折腾的好
跑跑武
跑跑武
:Q
喜羊羊
喜羊羊
6666666666666666666666666666666666666666666666666666666666666666666666666666666666666
gray6666
gray6666
赞》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
chinazmde
chinazmde
6666666666
- 没有更多了 -