Arduino公寓对讲机

DOIT SUPER
转载
发布时间: 2025-07-12 15:04:44 | 阅读数 0收藏数 0评论数 0
封面
一款基于 Arduino 的公寓门对讲机开启器。按特定模式按下入口处的蜂鸣器,门就会解锁。使用 Arduino Nano RP2040 Connect 及其内置麦克风。程序会监听高于 10,000 的噪音,然后等待 1 秒;监听低于 10,000 的噪音,等待 1 秒;监听高于 10,000 的噪音,然后启动伺服器,使其转速达到 180 度,再回到 0 度,之后继续监听。

准备工作:

材料:

  1. Arduino Nano RP2040 连接
  2. 跳线
  3. 迷你面包板
  4. SG90
  5. 螺丝刀
  6. #6-32 螺丝(如果当前螺丝不够长)
  7. 可以访问 Arduino IDE 程序的计算机
  8. 3D打印机和灯丝
  9. Wi-Fi 控制智能插座和 USB 电源块(可选)


工具:


1

为Arduino编写代码

从下面的链接编写/复制代码。如果您想更改模式,只需更改 while 循环的 if 语句,添加或删除 if 语句和延迟即可。我知道这可能不是最好的代码,这是我第一次参与真正的 Arduino 项目,但它确实有效。


https://create.arduino.cc/editor/herzogshandicraft/8eb65701-9bf6-4c19-9b55-52288359c113/preview



#包括<WiFiNINA.h>

#包括 <PDM.h>

#包括<Servo.h>


伺服舵机;

bool LED_SWITCH = false;


// 默认输出通道数

静态 const char 通道 = 1;


// 默认 PCM 输出频率

静态 const int 频率 = 16000;


// 读取样本的缓冲区,每个样本为 16 位

短样本缓冲区[512];


// 读取的音频样本数量

易失性整数样本读取;


无效设置(){

串行.开始(9600);

pinMode(LEDB,输出);

延迟(100);

数字写入(LEDB,高);

延迟(3000);

数字写入(LEDB,低);

延迟(100);

// 当(!串行)时;

// 配置数据接收回调

延迟(100);

数字写入(LEDB,高);

延迟(3000);

数字写入(LEDB,低);

延迟(100);

PDM.onReceive(onPDMdata);

延迟(100);

数字写入(LEDB,高);

延迟(3000);

数字写入(LEDB,低);

延迟(100);


// 可选地设置增益

// BLE Sense 默认为 20,Portenta Vision Shields 默认为 -10

//PDM.设置增益(30);


// 使用以下方法初始化 PDM:

// - 单通道(单声道模式)

// - Arduino Nano 33 BLE Sense 的采样率为 16 kHz

// - Arduino Portenta Vision Shields 的采样率为 32 kHz 或 64 kHz

如果(!PDM.begin(通道,频率)){

Serial.println("启动PDM失败!");

当(1)时;

}

}


无效循环(){

// 等待读取样本

如果(样本读取){


// 将样本打印到串行监视器或绘图仪

对于(int i = 0;i <samplesRead;i++){

如果(通道== 2){

串行打印(“L:”);

串行打印(sampleBuffer[i]);

串行打印(“R:”);

我++;

}

串行打印(sampleBuffer[i]);


如果(sampleBuffer[i] > 10000 || sampleBuffer[i] <= -10000){

延迟(1000);//监听大噪音并等待 1 秒

如果 (sampleBuffer[i] < 10000 && sampleBuffer[i] >= -10000) {

延迟(1000);//监听小于大声的噪音并等待 1 秒

如果(sampleBuffer[i] > 10000 || sampleBuffer[i] <= -10000){

// 监听大噪音并运行伺服程序

延迟(100);

servo.attach(9);//设置arduino PWM引脚D9

延迟(100);

伺服写入(180);

延迟(3000);

伺服写入(0);

延迟(1000);

伺服.分离();

延迟(2000);

}

别的 {

延迟(100);

}

}

}

}

// 清除读取计数

样本读取=0;

}

}


/**

回调函数来处理来自 PDM 麦克风的数据。

注意:此回调作为 ISR 的一部分执行。

因此不支持使用“Serial”在该函数内打印消息。

* */

无效 onPDMdata() {

// 查询可用字节数

int bytesAvailable = PDM.available();


// 读入样本缓冲区

PDM.读取(sampleBuffer,可用字节数);


// 16 位,每个样本 2 个字节

样本读取=可用字节数/2;

}


INO
Intercom_door_opener.ino
2.63KB
JSON
sketch.json
173B
2

设计和打印

我在 Fusion 360 中通过测量面包板和伺服电机的尺寸设计了外壳。对讲机的孔对于 6 号螺丝来说有点紧,但可以正常工作,它们的间距大约为 83 毫米。


如果您希望无线连接,我保留了打印件顶部的曲线,以便使用普通的 USB 充电电池。但是,当我使用电池时,舵机耗电过多,导致 Arduino 崩溃。我相信可以使用正确尺寸的电容器,但我选择将其直接插入 Wi-Fi 控制的插座,这样我就可以远程开关它,而不必担心充电问题。


STL
Door_Opener_Intercom_Case+v6.stl
56.53KB
F3D
Door_Opener_Intercom_Case+v6.f3d
201.48KB
STEP
Door_Opener_Intercom_Case+v6.step
71.72KB
3

组装

撕掉面包板背面的胶带并组装。用螺丝将伺服电机固定在电路板上。然后,卸下并使用/更换现有对讲机上的螺丝,确保它们足够长,能够固定住3D打印部件。

4

安装程序和线路

将代码上传到 Arduino,棕色线接地,红色线接 +5V,橙色线接数字引脚 9,然后将 USB 插入墙上插座供电。如果指示灯亮起 3 次,即可进行测试。我可以在附近吹口哨,以达到测试所需的噪音限值。然后将伺服器附带的小臂放到正确位置,按下按钮。

只需按您选择的模式按下对讲按钮即可进入公寓,而无需拿出钥匙。


请在此查看 YouTube 上的实际操作视频。

https://youtube.com/shorts/6c5FZWNPJTU


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载