设为首页收藏本站

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

nicho 发表于 2017-6-22 10:01:37 | 显示全部楼层 [复制链接]
16 1338
本帖最后由 nicho 于 2017-6-22 10:00 编辑

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



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

视频~

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)
发表于 2017-6-22 10:08:49 | 显示全部楼层
占沙发!!一直想用运放做点东西,超棒的思路!!
回复 支持 反对

使用道具 举报

发表于 2017-6-22 11:12:00 | 显示全部楼层
dexin 发表于 2017-6-22 10:08
占沙发!!一直想用运放做点东西,超棒的思路!!

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

使用道具 举报

发表于 2017-6-22 17:29:07 | 显示全部楼层
超级好玩!!原来电磁波可以玩这么酷的项目!! 可视效果可以再炫酷一点吗?比如可以把视觉改成一棵葱、两棵葱……十棵葱(别打我)
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 2017-6-22 18:02:12 | 显示全部楼层
这个厉害了666
回复 支持 反对

使用道具 举报

发表于 2017-6-22 18:24:55 | 显示全部楼层
看完视频我在想假如把电感伸进易拉罐内是不是就能屏蔽掉大部分电磁波呢?
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 2017-6-23 14:07:30 | 显示全部楼层

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

使用道具 举报

发表于 2017-6-23 17:23:01 | 显示全部楼层
中间的那段电感超前什么的,有原理文章吗?想看看。
回复 支持 反对

使用道具 举报

发表于 2017-6-24 15:17:34 来自手机 | 显示全部楼层
nicho 发表于 2017-6-22 17:39
葱!!!!啊啊啊  这个会更酷也!!!!

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

使用道具 举报

发表于 2017-6-26 03:19:17 | 显示全部楼层
感觉上了一节什么也没看懂的物理课 = = ……
回复 支持 反对

使用道具 举报

发表于 2017-6-26 23:57:08 | 显示全部楼层
Nana 发表于 2017-6-23 17:23
中间的那段电感超前什么的,有原理文章吗?想看看。

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

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

使用道具 举报

发表于 2017-6-26 23:57:19 | 显示全部楼层
Nana 发表于 2017-6-23 17:23
中间的那段电感超前什么的,有原理文章吗?想看看。

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

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

使用道具 举报

发表于 2017-6-27 00:00:02 | 显示全部楼层
好奇吖斌 发表于 2017-6-24 15:17
有空教下我,学习一些电路的知识

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

使用道具 举报

发表于 2017-6-28 13:29:15 | 显示全部楼层
看不出来啊,难道我眼睛不对?只听到一些声音啊
回复 支持 反对

使用道具 举报

发表于 2017-8-9 14:47:14 | 显示全部楼层
nicho 发表于 2017-6-26 23:57
电感是一个线圈,会阻止电流的变化,因此电流滞后电压,又叫电压超前电流。

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

好的呀~
回复 支持 反对

使用道具 举报

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

本版积分规则 允许回帖同步到新浪微博  

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表