基于ESP32的磁流体音箱

news/2024/11/17 1:30:49/

本次DIY要用到最近挺火的磁流体,制作一个酷炫音箱,效果非常的nice~

一.材料准备:

瓶装磁流体,esp32开发板,12v60kg吸力电磁铁,蓝牙功放板,运算放大模块,L298N电机模块,面包板电源,0.91寸OLED显示屏,4位数码管(TM163X驱动),12V电源适配器,喇叭,10*10洞洞板,亚克力切割外壳,亚克力专用胶水,杜邦线。(还有开关,电位器)

工具要用到电烙铁,胶布,热熔胶枪。

注意是低密度磁流体,有点贵~

电磁铁吸力太大或太小都会导致效果不好,两根线不分正负接L298N控制输出接口

考虑到音质不用esp32自带的蓝牙,5v供电,两个喇叭接口要留一个输出音频信号给开发板ADC引脚(音频信号电压值太小的话开发板检测不到,可以用个信号放大模块)

L298N用来控制电磁铁,12v供电,控制输入引脚接开发板,输出接电磁铁~

用来给各模块和开发板供电,电源输入接电源适配器~

显示屏嘿嘿,用来显示音频波形啥的,增加炫酷值~

数码管可以用来显示时间,功能+1 ~

开发板esp-wroom32,便宜又好用,(ST fu*k 油~)

喇叭选了个便宜的,有点后悔,应该买个好点的~

二.电路连接:

示意图,看个大概

实物图(飞线飞啊飞~):

三:外壳设计

用不起3d打印~,亚克力YYDS~(最后发现亚克力外壳+胶水的效果比打印件还要好看一点~)

以下是亚克力切割图

四:组装:

下面黑色盒子装电路板

乐高和热熔胶万能的~(磁流体两边是灯条)

背面

五:代码:

代码没啥好讲的,数码管,OLED屏幕,wifi都有方便的库可以调用。下面四行代码就是将音频模拟信号转换为PWM信号的过程,改变代码可以可实现不同磁流体效果。

!完整的代码放在文章最后~

六:才艺表演:(声音有点小,大家请调大音量欣赏~)

 

 

磁流体音箱

 节日快乐~

#include <U8g2lib.h>
#include "TM1637.h"
#include <WiFi.h>
#define CLK  19 //Set the CLK pin connection to the display
#define DIO  18 //Set the DIO pin connection to the display
#define ANALOG_PIN_0   32
#define NTP1  "ntp1.aliyun.com"
#define NTP2  "ntp2.aliyun.com"
#define NTP3  "ntp3.aliyun.com"TM1637 tm1637(CLK, DIO); //set up the 4-Digit Display.
int numCounter = 0;
bool dian = false;
/***********************************************/
填写WIFI入网信息
const char* ssid     = "好耶";     // WIFI账户
const char* password = "12345678"; // WIFI密码void setClock() {struct tm timeinfo;if (!getLocalTime(&timeinfo)){//如果获取失败,就开启联网模式,获取时间Serial.println("Failed to obtain time");WiFi.disconnect(false);WiFi.mode(WIFI_STA);//开启网络  WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}configTime(8 * 3600, 0, NTP1, NTP2,NTP3);return;}tm1637.display(0,timeinfo.tm_hour/10);tm1637.display(1,timeinfo.tm_hour%10);tm1637.display(2,timeinfo.tm_min/10);tm1637.display(3,timeinfo.tm_min%10 );tm1637.point(!dian);                                WiFi.disconnect(true);
}
/********************OLED******************/
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE);
const int WIDTH=128;
const int HEIGHT=32;
const int LENGTH=WIDTH;
int x;
int y[LENGTH];
void clearY(){           for(int i=0; i<LENGTH; i++){y[i] = -1;}
}
/***************波形图函数******************/
void drawY(){u8g2.drawPixel(0, y[0]);for(int i=1; i<LENGTH; i++){if(y[i]!=-1){//u8g.drawPixel(i, y[i]);u8g2.drawLine(i-1, y[i-1], i, y[i]);}else{break;}}
}     void setup(){Serial.begin(115200);/**************数码管初始化*************************/ tm1637.init();tm1637.point(1);//小数点开关,1为打开,0为关闭tm1637.set(BRIGHT_TYPICAL);
/********************************************************************/pinMode(ANALOG_PIN_0,INPUT_PULLUP);//模数转换引脚
/********pwm配置**************/  ledcSetup(0,5000,8);ledcAttachPin(2,0);
/***********oled***************/
u8g2.begin();
x = 0;
clearY();/*******************wifi初始化*****************/Serial.println();
// 设置ESP32工作模式为无线终端模式WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("WiFi connected!");configTime(8 * 3600, 0, NTP1, NTP2,NTP3);setClock();
//     从网络时间服务器上获取并设置时间
//     获取成功后芯片会使用RTC时钟保持时间的更新 WiFi.disconnect(true);WiFi.mode(WIFI_OFF);//关闭网络Serial.println("WiFi disconnected!");}void loop() {/***********输出磁场信号*********************/int analog_value = 0;analog_value = analogRead(ANALOG_PIN_0);/*******波形显示******************/y[x] = map(analog_value, 0, 4095, HEIGHT-1, 0);Serial.write(y[x]);u8g2.firstPage();  do {drawY();} while( u8g2.nextPage() );//delay(5);x++;if(x >= WIDTH){x = 0;clearY();}int PWM = map(analog_value,0,4095,0,255);digitalWrite(4,LOW);digitalWrite(15,HIGH);ledcWrite(0,PWM);/*******************数码管**************/setClock();}

http://www.ppmy.cn/news/163734.html

相关文章

绝地求生 压q python版

仅做学习交流&#xff0c;非盈利&#xff0c;侵联删&#xff08;狗头保命) 一、概述 1.1 效果 总的来说&#xff0c;这种方式是通过图像识别来完成的&#xff0c;不侵入游戏&#xff0c;不读取内存&#xff0c;安全不被检测。 1.2 前置知识 游戏中有各种不同的q械&#xf…

干货·Doherty功放设计

当今世界&#xff0c;通信技术的发展可谓日新月异&#xff08;准确来说是人类的欲望日新月异...&#xff09;&#xff0c;然而当前人类所依赖的无线通信完全借由无线电&#xff0c;频段还大都集中在C频段以下&#xff0c;相当拥挤。那么&#xff0c;为了在有限的频谱资源内增加…

喇叭发声原理

喇叭发声原理 音频设备中负责发出声音的核心部件是扬声器&#xff0c;俗称喇叭&#xff0c;无论是音响还是耳机&#xff0c;其中都少不了这个关键部件。扬声器是一种把电信号转变为声信号的换能器件。 喇叭 下面这个喇叭的侧视图能够很好的帮我们了解喇叭的基本结构。喇叭一般…

《嵌入式存储器架构、电路与应用》----学习记录(二)

第3章 嵌入式动态随机存储器 6T SRAM存储单元由六个晶体管组成&#xff0c;单元面积相对较大。为了增加存储密度&#xff0c;eDRAM是SRAM最具有潜力的替代品&#xff0c;根据存储单元不同分类&#xff1a; 传统的单晶体管单电容的(1T1C)eDRAM&#xff0c;其存储单元由一种特殊…

redis哨兵模式原理

概述 为了实现redis集群的高可用&#xff0c;redis经历了好几次迭代&#xff0c;从最开始的主从模式&#xff0c;到哨兵模式&#xff0c;再到现在的集群模式&#xff0c;可以说架构的优化越来越好&#xff0c;那本篇文章就介绍一下redis的哨兵模式&#xff0c;不过我司其实使用…

【持续集成CI/持续部署CD】二、Docker安装Maven私服Nexus

本文是关于通过 Docker 进行安装部署 Nexus3 私服的快速入门和简单使用案例。 一、安装 1. 通过 docker 获取最新版本的 nexus3 镜像 docker pull sonatype/nexus3创建 docker 镜像到宿主机的磁盘映射目录Linux:mkdir -p /home/nexus/datachmod 777 -R /home/nexus/dataWind…

2.java容器、多线程、JVM、类加载总结

Java基础知识 文章目录 Java基础知识一、容器&队列&栈1、List 容器ImmutableList&#xff1a;不可变列表&#xff0c;任何的 remove&#xff0c;add 方法都会抛出异常。2、Map 容器3、Queue 队列4、Set 容器5、Stack 栈 二、多线程1、线程管理2、同步器3、信号量4、并发…

常见硬件术语手册

一、CPU术语解释        3DNow!&#xff1a; (3D no waiting)AMD公司开发的SIMD指令集&#xff0c;可以增强浮点和多媒体运算的速度&#xff0c;它的指令数为21条。        ALU&#xff1a; (Arithmetic Logic Unit&#xff0c;算术逻辑单元)在处理器之中用于计算的…