산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

부품 및 소모품

부품수량
아두이노 Nano R31
HC-05 블루투스 모듈1
LM2596 벅 컨버터1
MG-90s 서보3
타입 130 DC 모터2
FR207 정류 다이오드1
RFP30N06LE MOSFET1
2.1x5.5mm 잭 플러그1
저항 10kΩ1
저항 330Ω1
저항 680Ω1
M2x10 태핑 나사30
M5x20 카운터싱크 나사4
듀폰 커넥터15
1.5mm 금속 봉1
전선1
열수축 튜브1
20mm 고무줄1
9V 파워 서플라이 (최소 2.5A)1

필요한 도구 및 장비

앱 및 온라인 서비스

프로젝트 소개

블루투스로 제어되는 너프 터렛 프로젝트를 확인해 주셔서 감사합니다. 안드로이드 기기나 PC에서 블루투스로 제어되는 너프 터렛입니다.

블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드
블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드
블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

자세한 내용: https://www.littlefrenchkev.com/bluetooth-nerf-turret

블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

작동 원리

복잡하지 않습니다. 틸트와 팬 움직임은 아두이노 Nano로 구동되는 2개의 서보가 담당합니다.

다트는 2개의 작은 DC 모터로 회전하는 2개의 롤러로 발사됩니다. 발사 명령이 내려지면 서보가 다트를 롤러로 밀어 넣습니다. 탄창에는 7발의 다트를 장전할 수 있습니다.

위에서 언급한 대로 안드로이드 기기나 PC에서 블루투스로 제어됩니다.

블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

제작 방법

조립

삼각대와 탄창은 MG-90s 서보용과 MG996r 서보용 두 가지 버전으로 제공됩니다. MG996r 서보는 전력 소모가 클 수 있으니, 이를 사용할 경우 파워 서플라이가 감당할 수 있는지 확인하세요.

삼각대
블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드
탄창
블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

배선

소프트웨어 및 테스트!

추가 사진들

블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드
블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드
블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

코드

아두이노 코드

아두이노에 업로드할 코드입니다. 안드로이드 앱으로 제어하든 PC로 제어하든 코드는 동일합니다.

#include <Servo.h> //-----서보 및 변수 선언
Servo recoil_servo;
Servo pan_servo;
Servo tilt_servo;
const byte pan_limit_1 = 0;
const byte pan_limit_2 = 180;
const byte tilt_limit_1 = 65;
const byte tilt_limit_2 = 180;
const byte recoil_rest = 180; // 정지 시 서보 각도
const byte recoil_pushed = 125; // 다트를 밀기 위해 도달해야 할 서보 각도
//-----시리얼 데이터 처리 관련 변수
byte byte_from_app;
const byte buffSize = 30;
byte inputBuffer[buffSize];
const byte startMarker = 255;
const byte endMarker = 254;
byte bytesRecvd = 0;
boolean data_received = false;
//-----모터 타이밍 및 발사 관련 변수
bool is_firing = false;
bool can_fire = false;
bool recoiling = false;
unsigned long firing_start_time = 0;
unsigned long firing_current_time = 0;
const long firing_time = 150;
unsigned long recoil_start_time = 0;
unsigned long recoil_current_time = 0;
const long recoil_time = 2 * firing_time;
const byte motor_pin = 12;
boolean motors_ON = false;

void setup() {
  pinMode(motor_pin, OUTPUT);
  digitalWrite(motor_pin, LOW);
  recoil_servo.attach(9);
  pan_servo.attach(10);
  tilt_servo.attach(11);
  recoil_servo.write(recoil_rest);
  pan_servo.write(90);
  delay(1000);
  tilt_servo.write(105);
  Serial.begin(9600);
}

void loop() {
  getDataFromPC();
  set_motor();
  if (data_received) {
    move_servo();
    set_recoil();
    set_motor();
  }
  fire();
}

void getDataFromPC() {
  // 예상 데이터 구조: [시작 바이트, 팬 양, 틸트 양, 모터 켜기, 발사 버튼 눌림, 끝 바이트]
  if (Serial.available()) {
    byte_from_app = Serial.read();
    if (byte_from_app == 255) {
      bytesRecvd = 0;
      data_received = false;
    } else if (byte_from_app == 254) {
      data_received = true;
    } else {
      inputBuffer[bytesRecvd] = byte_from_app;
      bytesRecvd++;
      if (bytesRecvd == buffSize) {
        bytesRecvd = buffSize - 1;
      }
    }
  }
}

void move_servo() {
  byte pan_servo_position = map(inputBuffer[0], 0, 253, pan_limit_2, pan_limit_1);
  pan_servo.write(pan_servo_position);
  byte tilt_servo_position = map(inputBuffer[1], 0, 253, tilt_limit_2, tilt_limit_1);
  tilt_servo.write(tilt_servo_position);
}

void set_recoil() {
  if (inputBuffer[3] == 1) {
    if (!is_firing && !recoiling) {
      can_fire = true;
    }
  } else {
    can_fire = false;
  }
}

void set_motor() {
  if (inputBuffer[2] == 1) {
    digitalWrite(motor_pin, HIGH);
    motors_ON = true;
  } else {
    digitalWrite(motor_pin, LOW);
    motors_ON = false;
  }
}

void fire() {
  if (can_fire && !is_firing && motors_ON) {
    firing_start_time = millis();
    recoil_start_time = millis();
    is_firing = true;
  }
  firing_current_time = millis();
  recoil_current_time = millis();
  if (is_firing && firing_current_time - firing_start_time < firing_time) {
    recoil_servo.write(recoil_pushed);
  } else if (is_firing && recoil_current_time - recoil_start_time < recoil_time) {
    recoil_servo.write(recoil_rest);
  } else if (is_firing && recoil_current_time - recoil_start_time > recoil_time) {
    is_firing = false;
  }
}
파이썬 파일

실행 파일과 안드로이드 앱은 여기서 다운로드 가능:

회로도

메인 배선도입니다. 배선은 듀폰 커넥터로 연결된 작은 섹션들로 나뉘어 있어 조립이 쉽습니다.

블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

HC-05 블루투스 배선입니다. 아두이노에서 나오는 5V를 HC-05 수신 핀용으로 약 3.3V로 낮추는 전압 분할 회로가 포함되어 있습니다.

블루투스 제어 너프 터렛 제작: 부품 및 조립 가이드

제조공정

  1. 저항기 기초: 종류, 특성, 실무 응용
  2. 집적 회로(IC): 현대 전자제품을 구동하는 작고 강력한 칩
  3. DIY 자율 너프 센트리 터렛 – 스테퍼 모터, 카메라, 아두이노로 스마트 너프건 만들기
  4. 아두이노 디지털 주사위: LCD 기반 랜덤 넘버 제너레이터 만들기
  5. 스마트 홈 연동을 위한 다중 위치 온도 센서 시스템
  6. RC카를 블루투스 조종 차량으로 개조하기
  7. DIY 아두이노 USB 게임 컨트롤러 - 나만의 고성능 게임패드 만들기
  8. MOSMusic 프로젝트 키트: MOSFET, 아두이노로 음악 동기화 조명 제어
  9. 드릴링 머신 필수 구성 요소 종합 개요
  10. 내연기관 핵심 부품 완벽 가이드: 구조와 기능