欢迎来到Arduino小小发明家的世界!这里精选了20个适合8岁以上儿童入门的STEM电子制作项目。 从零开始学习编程逻辑与电路原理,无需复杂的焊接,只需几块积木般的电子元件, 就可以亲手制作出呼吸灯、电子琴、倒车雷达等有趣的互动玩具。 每个项目都配有完整的C++代码和原理解析,不仅是最佳的亲子互动素材, 更是开启孩子理工科思维的启蒙钥匙。让我们一起动手,用代码点亮创意!
想象一下,Arduino 就是一个小小的电子大脑。它只有信用卡那么大,但非常聪明!
它能连接各种“感官”,比如按钮(触觉)、光敏传感器(视觉)或者温度计。
通过我们写的代码指令,它能决定做什么。比如:“如果天黑了,就...”
它能做出反应!比如点亮小灯泡、让马达转动或者发出声音。
这是你的第一个魔法!让一颗LED灯像天上的星星一样不停闪烁。
void setup() {
pinMode(13, OUTPUT); // 设置13号脚是出口
}
void loop() {
digitalWrite(13, HIGH); // 开灯!
delay(1000); // 等待1秒
digitalWrite(13, LOW); // 关灯
delay(1000); // 再等待1秒
}
按下按钮灯就亮,松开就灭。你现在不仅能看,还能控制它!
void setup() {
pinMode(13, OUTPUT); // 灯
pinMode(2, INPUT); // 按钮
}
void loop() {
// 如果按下按钮
if (digitalRead(2) == HIGH) {
digitalWrite(13, HIGH); // 开灯
} else {
digitalWrite(13, LOW); // 关灯
}
}
模拟马路上的红绿灯。红灯停,绿灯行,黄灯亮了等一等。
void setup() {
pinMode(8, OUTPUT); // 绿灯
pinMode(9, OUTPUT); // 黄灯
pinMode(10, OUTPUT); // 红灯
}
void loop() {
digitalWrite(8, HIGH); delay(3000); digitalWrite(8, LOW); // 绿灯亮3秒
digitalWrite(9, HIGH); delay(1000); digitalWrite(9, LOW); // 黄灯亮1秒
digitalWrite(10, HIGH); delay(3000); digitalWrite(10, LOW); // 红灯亮3秒
}
灯光渐渐变亮,又渐渐变暗,就像在这个灯在呼吸一样。
int brightness = 0; // 亮度
int fadeAmount = 5; // 每次变化的量
void setup() { pinMode(9, OUTPUT); }
void loop() {
analogWrite(9, brightness);
brightness = brightness + fadeAmount;
// 如果太亮或太暗,就反方向变化
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
delay(30);
}
像调节音量一样,转动旋钮来控制灯的亮度。
void setup() { pinMode(9, OUTPUT); }
void loop() {
int val = analogRead(A0); // 读取旋钮位置
// 把旋钮数值(0-1023)变成亮度数值(0-255)
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val); // 调整亮度
}
红色和蓝色灯交替闪烁,做一个属于你的小警车灯。
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(8, HIGH); digitalWrite(9, LOW);
delay(200); // 闪烁速度快一点
digitalWrite(8, LOW); digitalWrite(9, HIGH);
delay(200);
}
模仿蜡烛的火焰,忽明忽暗,非常温馨。
void setup() { pinMode(9, OUTPUT); }
void loop() {
// 随机产生一个亮度
analogWrite(9, random(100, 255));
// 随机等待一下
delay(random(30, 100));
}
天黑了自动亮灯,天亮了自动熄灭。它能看见光!
void setup() { pinMode(13, OUTPUT); }
void loop() {
int lightLevel = analogRead(A0);
if (lightLevel < 300) { // 如果光线变暗
digitalWrite(13, HIGH); // 开灯
} else {
digitalWrite(13, LOW); // 关灯
}
}
按下按钮,蜂鸣器发出声音。做一个自己的门铃吧。
void setup() {
pinMode(2, INPUT); // 按钮
pinMode(8, OUTPUT); // 蜂鸣器
}
void loop() {
if (digitalRead(2) == HIGH) {
digitalWrite(8, HIGH); // 发声
} else {
digitalWrite(8, LOW); // 安静
}
}
用手遮挡光线,就能改变声音的高低,像魔法一样演奏。
void setup() { pinMode(8, OUTPUT); }
void loop() {
int val = analogRead(A0);
// 把光线强度变成声音频率
int pitch = map(val, 0, 1023, 100, 2000);
tone(8, pitch);
delay(10);
}
让舵机像小手一样来回挥动。
#include <Servo.h>
Servo myServo;
void setup() { myServo.attach(9); }
void loop() {
myServo.write(0); delay(1000); // 转到左边
myServo.write(180); delay(1000); // 转到右边
}
转动旋钮,舵机跟着一起转动。
#include <Servo.h>
Servo myServo;
void setup() { myServo.attach(9); }
void loop() {
int val = analogRead(A0);
// 映射角度: 0到180度
int angle = map(val, 0, 1023, 0, 180);
myServo.write(angle);
delay(15);
}
如果有东西靠得太近,它就会发出警报!
const int trigPin = 9, echoPin = 10, buzzPin = 11;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzPin, OUTPUT);
}
void loop() {
digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
if (distance < 10) { // 距离小于10厘米
digitalWrite(buzzPin, HIGH);
} else {
digitalWrite(buzzPin, LOW);
}
delay(100);
}
这种特殊的LED可以变出任何颜色!试试红变绿,绿变蓝。
// 引脚 9, 10, 11 连接红绿蓝
void setRGB(int r, int g, int b) {
analogWrite(9, r); analogWrite(10, g); analogWrite(11, b);
}
void setup() {
pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT);
}
void loop() {
setRGB(255, 0, 0); delay(500); // 红
setRGB(0, 255, 0); delay(500); // 绿
setRGB(0, 0, 255); delay(500); // 蓝
}
灯亮的时候立刻按下按钮!看看谁的反应最快。
void setup() {
pinMode(13, OUTPUT); pinMode(2, INPUT); Serial.begin(9600);
}
void loop() {
digitalWrite(13, LOW);
delay(random(2000, 5000)); // 随机等待
digitalWrite(13, HIGH);
unsigned long startTime = millis();
while(digitalRead(2) == LOW); // 等待按下
unsigned long reactionTime = millis() - startTime;
Serial.println(reactionTime); // 在电脑上看时间
delay(1000);
}
把Arduino当成魔法棒,倾斜一下,灯就亮了。
void setup() { pinMode(13, OUTPUT); pinMode(2, INPUT_PULLUP); }
void loop() {
if (digitalRead(2) == HIGH) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}
用三个按钮做出哆、来、咪的琴键。
void setup() {
pinMode(8, OUTPUT);
pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT);
}
void loop() {
if (digitalRead(2)) tone(8, 262); // Do
else if (digitalRead(3)) tone(8, 294); // Re
else if (digitalRead(4)) tone(8, 330); // Mi
else noTone(8);
}
按一下按钮,灯闪几下就是几点。
void setup() { pinMode(13, OUTPUT); pinMode(2, INPUT); }
void loop() {
if (digitalRead(2) == HIGH) {
int dice = random(1, 7); // 1到6的随机数
for(int i=0; i<dice; i++) {
digitalWrite(13, HIGH); delay(200);
digitalWrite(13, LOW); delay(200);
}
delay(1000);
}
}
把这个藏在盒子里,谁偷偷打开盒子见光了,它就报警!
void setup() { pinMode(8, OUTPUT); }
void loop() {
int light = analogRead(A0);
if (light > 500) { // 如果检测到光(被打开)
tone(8, 1000); delay(100); noTone(8); delay(100);
}
}
我是小小情报员!用长短不同的声音发送秘密信号。
void setup() {
pinMode(13, OUTPUT); pinMode(8, OUTPUT); pinMode(2, INPUT);
}
void loop() {
if (digitalRead(2) == HIGH) {
digitalWrite(13, HIGH); tone(8, 1000);
} else {
digitalWrite(13, LOW); noTone(8);
}
}
如果孩子特别喜欢某个项目(比如“电子蜡烛”),你想把它做成一个永久的玩具,又不舍得把贵的 Arduino Uno 板子占用了,怎么办?这里有两个省钱绝招!
适合: 所有项目。
成本: 约 10-15 元/个。
它是 Uno 的缩小版,功能完全一样,但体积只有手指大小。可以直接焊接到洞洞板上。如果你不想折腾复杂的接线,买它最省心。
适合: 简单项目 (如 1, 2, 4, 6, 7, 9 等不需要太多引脚的项目)。
成本: 约 3-5 元/个。
这是一颗像小蜘蛛一样的黑色芯片(8个引脚)。
你需要用你的 Arduino Uno 当作“编程器”给它写入代码。
它不需要晶振,接上电池就能跑,体积极小,非常适合做在该项目列表中的大部分简单互动玩具中。
*注:对于只需要控制开关或闪烁的极简项目,还可以选择更便宜的 ATtiny13A (约 1-2元)。