查看: 3697|回复: 16

[项目] 【FireBeetle】MatrixEW-将电磁波可视化

[复制链接]
本帖最后由 nicho 于 2017-6-22 10:00 编辑

MatrixEW是瞎起的名字,分别由Matrix+Electromagnetic+Wave,看起来酷一点



中心主题就是使用电子元件将现实中的各种电磁波捕捉,并通过FireBeetle的LEDMatrix将其可视化
IMG_20170621_120701.jpg

视频~
[flash]static.hdslb.com/miniloader.swf?aid=11516619&page=1[/flash]
1.在视频中忘了解释了,中间的杂音就是电磁波的声音,(靠近不同的物体,声音会发生变化),使用的时候,将耳机插入装置的3.5mm的音频接口就可以听到了~
2.LEDMatrix上的LED数量体现的是不同的电磁波的收集情况,每条光柱(竖直)代表一种电磁波

这个就是成品图啦~,用FireBeetle的原型板制作
IMG_20170618_200136.jpg

材料清单:
FireBeetle主控板
FireBeetle I/O拓展版
FireBeetle 原型拓展版1
FireBeetle 原型拓展版2
FireBeetle MatrixLED阵列板

电阻100k*2
电阻390k*1
电阻1k*1
瓷片电容2.2uf*2
电解电容100uf*2
直插电感4.7mH*1(大小不同效果不同,酌情而定)
音频运放NE5532
8PinIC座
3.5mm音频插座
9V电池(withDC05插头)
排针排母若干
-----------------------------------------------------------------------
电路图.jpg

按照电路图焊接好电路,然后就可以插上耳机测试啦~
确认可以听到电磁波之后,就可以进行下一步了(靠近不同的电子设备声音会变化)

FireBeetle主控板连接
IMG_20170621_120742.jpg



IMG_20170621_120954.jpg

如图所示叠起来(注意方向)

IMG_20170621_121024.jpg


使用完整图示
IMG_20170621_121232.jpg


1.使用USB给FireBeetle主控板供电
2.使用9V电池给运放供电
3.插上耳机,就可以听到电磁波的声音啦

------------------------------------------------

来分析一下为什么会有这种现象吧~
关键的是电路中的电感

将导线绕成螺旋状的线圈便可形成一个电感:
当电流流经线圈时,会在线圈内形成磁场。
若是电流随着时间发生改变,则线圈内的磁场也会因而发生变化。



当线圈内的磁通量 将 发生变化前,便会在线圈上形成感应电动势(未卜先知?)
(感应电动势 = 沿着线圈感应电场与路径向量内积 的总和)。
感应电动势的产生,是由于自然界(空间)的另外一种『惯性』:不希望 磁通量 发生变化的特性。
因此当 磁通量将会有较最大的变化量时,也会产生较大的 感应电动势,想要抵销磁通量的变化。
简单的说 感应电动势 正比于 磁通量的变化量。
电感 等于 单位时间内 想有单位电流的变化时,所产生的感应电动势。
好厉害!当线圈的电流将要发生改变前,电感便会形成感应电动势来减缓电流的变化。
可不是电流已经发生改变了以后,才形成感应电动势来减缓其变化。
因此 我们说 电感两端电压的变化 超前电流的变化。

对于 交流正弦的磁通量变化,所产生的 感应电动势 也会是 正弦函数,不过相差了 90度 相角(馀弦)。
至于感应电动势(电场) 的方向如何决定呢?它的存在是为了想要阻止电感上的电流发生变化,因此必然与电感上原来的电动势方向相反。
如此与原有外加的电动势相加,才能造成抵销的效果。

电磁波通过电感之后,已经变成了电流信号(并且是反向的)
下一步就是通过运算放大器,这里我们使用了NE5532,是一款应用十分广泛的音频运放IC,我们使用电阻电容等元件做出反向差分放大电路
差分.jpg

电流信号经过这里再次被反向,并且被放大,放大倍数取决于RI和Rf
经过运放后的信号已经足够推动耳机,所以插上耳机,接入到GND和运放的Vo即可~

-------------------------------------------------
运放的输出Vo和GND之间接入一个3v的稳压管,控制电压,避免烧坏MCU
维基百科关于齐纳二极管(稳压管)



-------------------------------------------------
IMG_20170621_121428.jpg

整体图

运放输出Vo连接到FireBeetle的A0,GND(运放的正向输入端)接到GND,然后就开始码代码吧~

[C] 纯文本查看 复制代码
#include "DFRobot_HT1632C.h"
#if defined( ESP_PLATFORM ) || defined( ARDUINO_ARCH_FIREBEETLE8266 )  //FireBeetle-ESP32 FireBeetle-ESP8266
#define DATA D6
#define CS D2
#define WR D7
//#define RD D8
#else
#define DATA 6
#define CS 2
#define WR 7
//#define RD 8
#endif
DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR, CS);

int analogVal = 0;
int level1 = 0;
int level2 = 0;
int level3 = 0;
int level4 = 0;
int level5 = 0;
int level6 = 0;
int level7 = 0;
int change = 0;
int threshold1 = 1;
int threshold2 = 100;
int threshold3 = 200;
int threshold4 = 300;
int threshold5 = 400;
int threshold6 = 500;
int threshold7 = 600;
int threshold8 = 700;
uint8_t l1, l2, l3, l4, l5, l6, l7;
void setup()
{
  ht1632c.begin();
  ht1632c.isLedOn(true);
  ht1632c.clearScreen();
  pinMode(A0, INPUT);
  Serial.begin(115200);
  pinMode(LED_BUILTIN,OUTPUT);
  digitalWrite(LED_BUILTIN,HIGH);
  delay(500);
}


void loop()
{
  delay(2);
  analogVal = analogRead(A0);
  delay(5);
  if (analogVal >= threshold1 && analogVal < threshold2)
  {
    level1++;
    change = 1;
  }
  else if (analogVal >= threshold2 && analogVal < threshold3)
  {
    level2++; change = 1;
  }
  else if (analogVal >= threshold3 && analogVal < threshold4)
  {
    level3++; change = 1;
  }
  else if (analogVal >= threshold4 && analogVal < threshold5)
  {
    level4++; change = 1;
  }
  else if (analogVal >= threshold5 && analogVal < threshold6)
  {
    level5++; change = 1;
  }
  else if (analogVal >= threshold6 && analogVal < threshold7)
  {
    level6++; change = 1;
  }
  else if (analogVal >= threshold7 && analogVal < threshold8)
  {
    level7++; change = 1;
  }
  else
  {
    //Serial.println(analogVal);
  }
  if (change == 1)
  {
    change = 0;
    updateMatrix();
//     Serial.println(analogVal);
//    Serial.print(level1);
//    Serial.print(",");
//    Serial.print(level2);
//    Serial.print(",");
//    Serial.print(level3);
//    Serial.print(",");
//    Serial.print(level4);
//    Serial.print(",");
//    Serial.print(level5);
//    Serial.print(",");
//    Serial.print(level6);
//    Serial.print(",");
//    Serial.print(level7);
//    Serial.println(",");
  }
}


int updateMatrix()
{
  l1 = map(level1, 0, 9999, 0, 24);
  l2 = map(level2, 0, 100, 0, 24);
  l3 = map(level3, 0, 100, 0, 24);
  l4 = map(level4, 0, 100, 0, 24);
  l5 = map(level5, 0, 100, 0, 24);
  l6 = map(level6, 0, 100, 0, 24);
  l7 = map(level7, 0, 100, 0, 24);
  //  Serial.print(l1);
  //  Serial.print(",");
  //  Serial.println(level1);
  if (l1 >= 24) l1 = 23;
  if (l2 >= 24) l2 = 23;
  if (l3 >= 24) l3 = 23;
  if (l4 >= 24) l4 = 23;
  if (l5 >= 24) l5 = 23;
  if (l6 >= 24) l6 = 23;
  if (l7 >= 24) l7 = 23;
  ht1632c.setPixel(l1 - 1, 0); ht1632c.writeScreen();
  ht1632c.setPixel(l2 - 1, 1); ht1632c.writeScreen();
  ht1632c.setPixel(l3 - 1, 2); ht1632c.writeScreen();
  ht1632c.setPixel(l4 - 1, 3); ht1632c.writeScreen();
  ht1632c.setPixel(l5 - 1, 4); ht1632c.writeScreen();
  ht1632c.setPixel(l6 - 1, 5); ht1632c.writeScreen();
  ht1632c.setPixel(l7 - 1, 6); ht1632c.writeScreen();
  //test();
  delay(3);
}




注意:程序中的level可能会因为电感,电容,电阻的选值,甚至是耳机的阻抗(耳机相当于电感)有关,并且也和外部环境,供电环境有关,适当调整即可~

最后再来一张~
QQ截图20170622094431.jpg
一些文件:
音频运放ne5532.pdf (922.15 KB, 下载次数: 5)

dexin  中级技师

发表于 2017-6-22 10:08:49

占沙发!!一直想用运放做点东西,超棒的思路!!
回复 支持 反对

使用道具 举报

nicho  版主
 楼主|

发表于 2017-6-22 11:12:00

dexin 发表于 2017-6-22 10:08
占沙发!!一直想用运放做点东西,超棒的思路!!

运放很好玩~
回复 支持 反对

使用道具 举报

luna  管理员

发表于 2017-6-22 17:29:07

超级好玩!!原来电磁波可以玩这么酷的项目!! 可视效果可以再炫酷一点吗?比如可以把视觉改成一棵葱、两棵葱……十棵葱(别打我)
回复 支持 反对

使用道具 举报

nicho  版主
 楼主|

发表于 2017-6-22 17:39:58

luna 发表于 2017-6-22 17:29
超级好玩!!原来电磁波可以玩这么酷的项目!! 可视效果可以再炫酷一点吗?比如可以把视觉改成一棵葱、两棵 ...

葱!!!!啊啊啊  这个会更酷也!!!!
回复 支持 反对

使用道具 举报

dbc0301  初级技匠

发表于 2017-6-22 18:02:12

这个厉害了666
回复 支持 反对

使用道具 举报

dbc0301  初级技匠

发表于 2017-6-22 18:24:55

看完视频我在想假如把电感伸进易拉罐内是不是就能屏蔽掉大部分电磁波呢?
回复 支持 反对

使用道具 举报

nicho  版主
 楼主|

发表于 2017-6-23 13:21:34

dbc0301 发表于 2017-6-22 18:24
看完视频我在想假如把电感伸进易拉罐内是不是就能屏蔽掉大部分电磁波呢? ...

易拉罐再接一下地就完美屏蔽了
回复 支持 反对

使用道具 举报

bobo  NPC

发表于 2017-6-23 14:07:30


楼主的项目很有意思。
回复 支持 反对

使用道具 举报

Nana  见习技师

发表于 2017-6-23 17:23:01

中间的那段电感超前什么的,有原理文章吗?想看看。
回复 支持 反对

使用道具 举报

好奇吖斌  高级技师 来自手机

发表于 2017-6-24 15:17:34

nicho 发表于 2017-6-22 17:39
葱!!!!啊啊啊  这个会更酷也!!!!

有空教下我,学习一些电路的知识
回复 支持 反对

使用道具 举报

iooops  版主

发表于 2017-6-26 03:19:17

感觉上了一节什么也没看懂的物理课 = = ……
回复 支持 反对

使用道具 举报

nicho  版主
 楼主|

发表于 2017-6-26 23:57:08

Nana 发表于 2017-6-23 17:23
中间的那段电感超前什么的,有原理文章吗?想看看。

电感是一个线圈,会阻止电流的变化,因此电流滞后电压,又叫电压超前电流。

http://www.phy.ntnu.edu.tw/demolab/phpBB/viewtopic.php?topic=8511
上面这个的讨论很有意思~~
回复 支持 反对

使用道具 举报

nicho  版主
 楼主|

发表于 2017-6-26 23:57:19

Nana 发表于 2017-6-23 17:23
中间的那段电感超前什么的,有原理文章吗?想看看。

电感是一个线圈,会阻止电流的变化,因此电流滞后电压,又叫电压超前电流。

http://www.phy.ntnu.edu.tw/demolab/phpBB/viewtopic.php?topic=8511
上面这个的讨论很有意思~~
回复 支持 反对

使用道具 举报

nicho  版主
 楼主|

发表于 2017-6-27 00:00:02

好奇吖斌 发表于 2017-6-24 15:17
有空教下我,学习一些电路的知识

大神出现了~~开心~   电路好好玩~~~
回复 支持 反对

使用道具 举报

xiaohe9527  高级技师

发表于 2017-6-28 13:29:15

看不出来啊,难道我眼睛不对?只听到一些声音啊
回复 支持 反对

使用道具 举报

Nana  见习技师

发表于 2017-8-9 14:47:14

nicho 发表于 2017-6-26 23:57
电感是一个线圈,会阻止电流的变化,因此电流滞后电压,又叫电压超前电流。

http://www.phy.ntnu.edu.tw ...

好的呀~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail