Arduino公寓对讲机





准备工作:
材料:







- Arduino Nano RP2040 连接
- 跳线
- 迷你面包板
- SG90
- 螺丝刀
- #6-32 螺丝(如果当前螺丝不够长)
- 可以访问 Arduino IDE 程序的计算机
- 3D打印机和灯丝
- Wi-Fi 控制智能插座和 USB 电源块(可选)
工具:
为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;
}
设计和打印

我在 Fusion 360 中通过测量面包板和伺服电机的尺寸设计了外壳。对讲机的孔对于 6 号螺丝来说有点紧,但可以正常工作,它们的间距大约为 83 毫米。
如果您希望无线连接,我保留了打印件顶部的曲线,以便使用普通的 USB 充电电池。但是,当我使用电池时,舵机耗电过多,导致 Arduino 崩溃。我相信可以使用正确尺寸的电容器,但我选择将其直接插入 Wi-Fi 控制的插座,这样我就可以远程开关它,而不必担心充电问题。
组装

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




将代码上传到 Arduino,棕色线接地,红色线接 +5V,橙色线接数字引脚 9,然后将 USB 插入墙上插座供电。如果指示灯亮起 3 次,即可进行测试。我可以在附近吹口哨,以达到测试所需的噪音限值。然后将伺服器附带的小臂放到正确位置,按下按钮。
只需按您选择的模式按下对讲按钮即可进入公寓,而无需拿出钥匙。
请在此查看 YouTube 上的实际操作视频。
https://youtube.com/shorts/6c5FZWNPJTU











