Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
Компоненты и материалы
- Arduino UNO — 1 шт.
- Ультразвуковой датчик HC-SR04 — 1 шт.
- MP3-модуль DFPlayer Mini — 1 шт.
- 4-канальный релейный модуль — 1 шт.
- Резистор 330 Ом — 1 шт.
- Аудиокабель (P2) — 1 шт.
- Перемычки, паяльник, клеевой пистолет
Идея
Оживляем фигурку Iron Man. При приближении человека (≤1.3 м) ультразвуковой датчик срабатывает → Arduino проигрывает случайную фразу Тони Старка через DFPlayer → включает реле (голова, грудь, руки) для анимации.
Аудиофайлы
Фразы из фильмов, переименованы в 001.mp3, 002.mp3… загружены на microSD в DFPlayer. Пример: GitHub.
Схема подключения
- HC-SR04: VCC → 5V, GND → GND, Trig → D3, Echo → D4.
- DFPlayer: RX → D6, TX → D7 (SoftwareSerial), VCC → 3.3V, GND → GND, SPK → динамик.
- Реле (активное LOW): IN1 → D13 (голова), IN2 → D12 (грудь), IN3 → D11 (левая рука), IN4 → D10 (правая рука). VCC реле → 5V, GND → GND.
Код (Homem_de_FerroV5.ino)
#include
#include
#include
SoftwareSerial mySoftwareSerial(6, 7); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
#define TRIG 3
#define ECHO 4
#define VCC_US 2
#define GND_US 5
#define RELAY_HEAD 13
#define RELAY_CHEST 12
#define RELAY_LEFT 11
#define RELAY_RIGHT 10
Ultrasonic ultra(TRIG, ECHO);
int distancia;
int x = 3;
String buf;
void setup() {
mySoftwareSerial.begin(9600);
Serial.begin(115200);
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println("DFPlayer не найден");
while (true);
}
myDFPlayer.setTimeOut(500);
myDFPlayer.volume(30);
myDFPlayer.EQ(0);
int maxSongs = myDFPlayer.readFileCounts(DFPLAYER_DEVICE_SD);
pinMode(RELAY_HEAD, OUTPUT);
pinMode(RELAY_CHEST, OUTPUT);
pinMode(RELAY_LEFT, OUTPUT);
pinMode(RELAY_RIGHT, OUTPUT);
pinMode(VCC_US, OUTPUT);
pinMode(GND_US, OUTPUT);
digitalWrite(GND_US, LOW);
digitalWrite(VCC_US, HIGH);
digitalWrite(RELAY_HEAD, HIGH);
digitalWrite(RELAY_CHEST, HIGH);
digitalWrite(RELAY_LEFT, HIGH);
distancia = ultra.Ranging(CM);
}
void loop() {
distancia = ultra.Ranging(CM);
Serial.println(String(distancia) + " cm");
if (distancia <= 150 && x == 3) {
buf = String(random(1, 19));
play();
delay(3000);
while (ultra.Ranging(CM) <= 150) {
digitalWrite(RELAY_LEFT, HIGH);
x = 2;
delay(1200);
}
} else {
digitalWrite(RELAY_RIGHT, LOW);
x = 3;
}
}
void play() {
digitalWrite(RELAY_RIGHT, HIGH);
delay(300);
digitalWrite(RELAY_RIGHT, LOW);
delay(300);
digitalWrite(RELAY_RIGHT, HIGH);
delay(300);
digitalWrite(RELAY_RIGHT, LOW);
delay(300);
if (buf.toInt() >= 1 && buf.toInt() <= maxSongs) {
myDFPlayer.play(buf.toInt());
}
}
Примечание: реле активные LOW — HIGH = выкл, LOW = вкл. Логика в коде учитывает это.
Производственный процесс
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Бесконтактный термометрический шлюз для быстрого и точного скрининга
- PiBot: Робот-пианист на Arduino для точного исполнения музыки
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- Метеостанция на Arduino и ThingSpeak: температура и влажность в облаке
- Своё рулевое управление (джойстик) для игр на Arduino
- FM-радиоприемник на Arduino и модуле TEA5767