자신만의 스파이더맨 웹 슈터를 갖고 싶었던 적이 있나요? 이 프로젝트에서는 Arduino Nano와 가속도계를 사용해 착용 가능하고 동작으로 작동하는 웹 슈터를 만들어 보겠습니다. 손목으로 펀치를 날리는 동작만 하면 슈터가 끈에 매달린 자석식 "웹 다트"를 자동으로 발사합니다
#include <Wire.h>
#include <Servo.h>
// --- 서보 설정 ---
Servo myServo;
const int servoPin = 8; // 핀 D8의 서보 신호
const int initialPosition = 100; // 대기 위치
const int targetPosition = 50; // 트리거되었을 때 이동할 위치
bool isServoMoved = false;
unsigned long servoTimer = 0;
const long servoDuration = 3000; // 서보 위치를 3초 동안 유지
// --- ADXL345 설정 ---
#define ADXL345_ADDRESS 0x53 // 기본 ADXL345 I2C 주소
float accelX;
// --- 동작 감지 로직 ---
unsigned long pullStartTime = 0;
const long pullInterval = 400; // 완전한 당김 동작에 허용되는 최대 시간 창(ms)
float pullThresholdStart = 1.0; // 양의 G-force 임계값
float pullThresholdEnd = -1.0; // 음의 G-force 임계값
void setup() {
Serial.begin(9600);
// 서보 초기화
myServo.attach(servoPin);
myServo.write(initialPosition);
// ADXL345용 I2C 통신 초기화
Wire.begin();
// ADXL345 활성화 (전원 제어 레지스터)
Wire.beginTransmission(ADXL345_ADDRESS);
Wire.write(0x2D); // 전원 제어 레지스터
Wire.write(8); // 측정 모드 활성화
Wire.endTransmission();
Serial.println("--- ADXL345 + 서보 제어 시스템 준비 완료 ---");
Serial.println("펀치 동작을 기다리는 중...");
}
void loop() {
unsigned long currentMillis = millis();
// 1. ADXL345에서 X축 데이터 읽기
Wire.beginTransmission(ADXL345_ADDRESS);
Wire.write(0x32); // X축 데이터 레지스터 (X0)
Wire.endTransmission(false);
Wire.requestFrom(ADXL345_ADDRESS, 2, true);
if (Wire.available() >= 2) {
int16_t rawX = Wire.read() | (Wire.read() << 8);
accelX = rawX * 0.0039; // 원시 값을 G-force로 변환
}
// 2. 펀치 동작 감지
if (accelX > pullThresholdStart) {
pullStartTime = currentMillis;
}
if (accelX < pullThresholdEnd && (pullStartTime > 0) && (currentMillis - pullStartTime < pullInterval)) {
if (!isServoMoved) {
Serial.println(">>> 펀치 감지! 웹 슈터 발사.");
myServo.write(targetPosition);
servoTimer = currentMillis;
isServoMoved = true;
pullStartTime = 0;
}
}
// 3. 3초 후 서보 자동 리셋
if (isServoMoved && (currentMillis - servoTimer >= servoDuration)) {
Serial.println(">>> 서보를 대기 위치로 리셋하는 중.");
myServo.write(initialPosition);
isServoMoved = false;
}
}
전체 제작 과정을 영상으로 확인하려면 YouTube 동영상을 참고하세요. 아래 단계에서 자세히 설명합니다.
모든 조립이 끝나면 웹 슈터 본체를 손목에 묶고 시험해 봅니다.
손목으로 빠르게 펀치를 날리는 동작을 합니다. ADXL345가 동작에서 발생하는 급격한 가속도 변화를 감지하면 Arduino가 서보를 움직입니다. 그러면 푸셔 관 안에서 다트를 고정하던 걸쇠가 풀리고, 실이 뒤를 따라가면서 웹 다트가 앞으로 발사됩니다. 마치 스파이더맨의 웹 슈터처럼 작동합니다.