Arduino MKR IoT 套件打造智能密码盒:Blynk 远程设密、舵机开锁
元件清单(均含于 MKR IoT Bundle)
| Arduino MKR1000 / MKR WiFi 1010 | ×1 | 内置 Wi-Fi,支持 Blynk 云连接 |
| 微型舵机(SG90 或兼容) | ×1 | 充当箱盖锁扣 |
| RGB LED(共阴) | ×1 | 颜色提示解密进度 |
| 旋转电位器 10kΩ | ×3 | 三位密码输入 |
| 1602 LCD(并口/ I2C 均可) | ×1 | 实时显示当前密码位 |
| 有源蜂鸣器 | ×1 | 开箱播放《星球大战》主题曲 |
| 硬纸板 2mm / 3D 打印外壳 | ×1 | 盒体结构 |
项目逻辑
- 设密: 手机端 Blynk App 三个滑块(V1/V2/V3,范围 0-9)设定三位密码,实时同步到单片机
- 解密: 用户拨动三个电位器,LCD 显示当前值(0-9),RGB LED 指示接近度:
- 蓝 → 青 → 黄 → 红(越接近越暖)
- 开箱: 三位全对 → 蜂鸣器奏乐 + 舵机旋转 90° 弹开盖盖
- 复位: 三电位器全归零 → 重新上锁,等待下一次挑战

Blynk 快速入门
- 安装 Blynk App(iOS/Android),注册账号
- New Project → 选择 MKR1000 → 获得 Auth Token(邮件同步)
- 添加 3 个 Slider 控件,分别绑定 Virtual Pin V1、V2、V3,范围 0-9
- Arduino IDE 安装
Blynk与WiFi101库
分步实现指南
1. LCD 显示电位器值
#include <LiquidCrystal.h>
const int rs=12, en=11, d4=2, d5=3, d6=4, d7=5;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
void setup() {
analogWrite(A3, 0); // 背光最亮(A3 控制对比度/背光)
lcd.begin(16,2);
}
void loop() {
int v1 = map(analogRead(A0), 0, 1023, 0, 9);
int v2 = map(analogRead(A1), 0, 1023, 0, 9);
int v3 = map(analogRead(A2), 0, 1023, 0, 9);
lcd.setCursor(0,0); lcd.print(v1); lcd.print(' '); lcd.print(v2); lcd.print(' '); lcd.print(v3);
}
2. RGB LED 颜色反馈
int rPin=6, gPin=8, bPin=7;
void setColor(int r,int g,int b){ analogWrite(rPin,r); analogWrite(gPin,g); analogWrite(bPin,b); }
void giveFeedback(int p1,int p2,int p3, int t1,int t2,int t3) {
int d1=abs(p1-t1), d2=abs(p2-t2), d3=abs(p3-t3);
if(d1<=1 && d2<=1 && d3<=1) setColor(255,0,0); // 红:极近
else if(d1<=3 && d2<=3 && d3<=3) setColor(255,255,0); // 黄:较近
else if(d1<=4 && d2<=4 && d3<=4) setColor(0,255,255); // 青:一般
else setColor(0,0,255); // 蓝:远
}
3. 蜂鸣器播放《星球大战》主题
#define BUZZER 1
const int NOTE_C4=262, NOTE_D4=294, NOTE_E4=330, NOTE_F4=349, NOTE_G4=392;
const int NOTE_G4S=415, NOTE_A4=440, NOTE_AS4=466, NOTE_B4=494, NOTE_C5=523;
// ... 更多音符定义 ...
void beep(int note, int dur) { tone(BUZZER, note, dur); delay(dur+50); noTone(BUZZER); }
void playStarWars() {
beep(NOTE_A4,500); beep(NOTE_A4,500); beep(NOTE_A4,500);
beep(NOTE_F4,350); beep(NOTE_C5,150);
beep(NOTE_A4,500); beep(NOTE_F4,350); beep(NOTE_C5,150);
beep(NOTE_A4,650); delay(500);
beep(NOTE_E5,500); beep(NOTE_E5,500); beep(NOTE_E5,500);
beep(NOTE_F5,350); beep(NOTE_C5,150);
beep(NOTE_GS4,500); beep(NOTE_F4,350); beep(NOTE_C5,150);
beep(NOTE_A4,650);
}
4. 舵机开锁/上锁
#include <Servo.h>
Servo lockServo;
void openLock() { for(int pos=0; pos<=90; pos++){ lockServo.write(pos); delay(15); } }
void closeLock() { for(int pos=90; pos>=0; pos--){ lockServo.write(pos); delay(15); } }
5. 完整融合代码框架
#include <SPI.h> #include <WiFi101.h> #include <BlynkSimpleWiFiShield101.h>
#include <LiquidCrystal.h> #include <Servo.h>
char auth[] = "YOUR_BLYNK_TOKEN";
char ssid[] = "YOUR_WIFI_SSID";
char pass[] = "YOUR_WIFI_PASS";
// Blynk 虚拟引脚写入回调
BLYNK_WRITE(V1){ target[0] = param.asInt(); }
BLYNK_WRITE(V2){ target[1] = param.asInt(); }
BLYNK_WRITE(V3){ target[2] = param.asInt(); }
int target[3] = {1,1,1}; // 默认密码 111
bool unlocked = false;
void setup() {
// 初始化 LCD、RGB、舵机、蜂鸣器、Blynk WiFi
Blynk.begin(auth, ssid, pass);
lockServo.attach(9); lockServo.write(0); // 上锁位
}
void loop() {
Blynk.run();
int current[3];
for(int i=0;i<3;i++) current[i] = map(analogRead(A0+i), 0, 1023, 0, 9);
lcd.setCursor(0,0); lcd.print(current[0]); lcd.print(' '); lcd.print(current[1]); lcd.print(' '); lcd.print(current[2]);
if(!unlocked) {
giveFeedback(current[0],current[1],current[2], target[0],target[1],target[2]);
if(current[0]==target[0] && current[1]==target[1] && current[2]==target[2]) {
playStarWars(); openLock(); unlocked = true;
}
} else {
// 已解锁:全零则复位
if(current[0]==0 && current[1]==0 && current[2]==0) { closeLock(); unlocked = false; }
}
}
外壳制作
下载 box.dxf 激光切割 2mm 硬纸板,或参考尺寸 3D 打印。舵机臂连接箱盖锁舌,预留 LCD、电位器、USB 编程口开孔。
原理图
完整接线图见附件 schematic.png,包含电源、LCD 对比度电路、RGB LED 限流电阻、舵机供电去耦电容等细节。
学习要点总结
- Blynk 物联网快速开发:虚拟引脚双向通信
- 并口 LCD 多线控制与背光调节
- 蜂鸣器 PWM 合成音乐(音符频率表查找)
- 舵机脉宽控制与机械连杆设计
- 模拟量映射、绝对值判断、状态机编程
制造工艺
- 集成电路 (IC):微观世界里的算力引擎与制造极限
- 树莓派 Zero 配合 Node‑RED 融合 TI SensorTag 与 Blynk 物联网平台
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 多位置温度传感器系统,助力智能家居集成
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- MotionSense:基于 Arduino 与 ESP8266 的智能入侵检测系统
- 3D 打印机防火卫士:智能传感器安全系统
- MOSMusic 套件:MOSFET + Arduino 打造音乐同步灯光控制系统
- 钻床核心部件解析:从底座到主轴的完整拆解
- 内燃机核心零部件详解
- 掌握 SPICE 网表语法:元件命名、无源/有源元件与源定义
- 微电子学详解:微型电子器件的科学与制造