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

자율 너프 보초 포탑

구성품 및 소모품

OpenBuilds NEMA 17 스테퍼 모터
× 1
기어박스가 있는 DFRobot 스테퍼 모터
× 1
DFRobot 스테퍼 모터 드라이버
× 1
DFRobot Pixy 2 캠
× 1
Arduino Mega 2560
× 1
초음파 센서 - HC-SR04(일반)
× 1
너프 니트론 건
× 1

필요한 도구 및 기계

3D 프린터(일반)
납땜 인두(일반)
CNC 라우터

앱 및 온라인 서비스

Arduino IDE
오토데스크 퓨전 360

이 프로젝트 정보

아이디어

몇 년 전, 한 번 조준하면 스스로 발사할 수 있는 반자동 포탑을 선보인 프로젝트를 본 적이 있습니다. 그것은 나에게 Pixy 2 카메라를 사용하여 목표를 획득한 다음 자동으로 너프 건을 조준하는 아이디어를 주었습니다. 그러면 자동으로 잠그고 발사할 수 있습니다.

구성 요소

이 프로젝트의 경우 총에는 눈이 필요하므로 메인보드와 인터페이스하기가 매우 쉬운 Pixy 2를 사용하기로 결정했습니다. 그런 다음 마이크로 컨트롤러가 필요했기 때문에 핀이 몇 개인 Arduino Mega 2560을 선택했습니다.

총에는 2개의 축, 즉 요(yaw)와 피치(pitch)가 필요하기 때문에 2개의 스테퍼 모터가 필요합니다. 그 때문에 DFRobot은 저에게 듀얼 DRV8825 모터 드라이버 보드를 보냈습니다.

CAD

나는 Fusion 360을 로드하고 너프 건의 부착된 캔버스를 삽입하는 것으로 시작했습니다. 그런 다음 그 캔버스에서 솔리드 바디를 만들었습니다. 총을 설계한 후 총이 왼쪽에서 오른쪽으로 회전할 수 있도록 몇 가지 베어링 기반 지지대가 있는 플랫폼을 만들었습니다. 나는 그것을 구동하기 위해 회전하는 플랫폼 옆에 스테퍼 모터를 배치했습니다.

그러나 더 큰 문제는 총의 피치를 위아래로 만드는 방법입니다. 이를 위해 이동 가능한 블록에 한 지점이 연결되고 총 뒤에 다른 지점이 있는 선형 구동 시스템이 필요했습니다. 막대는 두 지점을 연결하여 총이 중심축을 따라 회전할 수 있도록 합니다.

부품 제조

제 디자인의 거의 모든 부품은 3D로 인쇄되어야 하므로 두 대의 프린터를 사용하여 만들었습니다. 그런 다음 먼저 Fusion 360을 사용하여 CNC 라우터에 필요한 도구 경로를 생성하여 이동식 플랫폼을 만든 다음 합판에서 디스크를 잘라냈습니다.

어셈블리

모든 부품이 생성되면 조립할 차례입니다. 베어링 지지대를 회전 디스크에 연결하는 것으로 시작했습니다. 그런 다음 6mm 알루미늄 막대와 나사산 막대를 조각에 통과시켜 선형 피치 어셈블리를 조립했습니다.

마지막으로 강철 막대와 알루미늄 압출재로 만든 두 개의 기둥으로 너프 건 자체를 부착했습니다.

프로그래밍

이제 프로젝트의 가장 어려운 부분인 프로그래밍입니다. 발사체 발사 기계는 매우 복잡하고 그 이면의 수학은 혼란스러울 수 있습니다. 먼저 프로그램 흐름과 논리를 단계별로 작성하여 각 기계 상태에서 어떤 일이 일어날지 자세히 설명했습니다. 다른 상태는 다음과 같습니다.

<울>
  • 대상 획득
  • 총 위치
  • 모터 스풀링
  • 총 발사
  • 모터의 긴장 완화
  • 목표물을 획득하려면 먼저 Pixy를 설정하여 네온 분홍색 물체를 목표물로 추적하도록 설정해야 합니다. 그런 다음 총은 목표물이 Pixy의 보기 중앙에 올 때까지 이동하고 총신에서 목표물까지의 거리가 측정됩니다. 이 거리를 사용하여 몇 가지 기본 삼각 함수를 사용하여 수평 및 수직 거리를 찾을 수 있습니다. 내 코드에는 이 두 거리를 사용하여 해당 대상을 맞추는 데 필요한 각도를 계산하는 get_angle()이라는 함수가 있습니다.

    그런 다음 건이 이 위치로 이동하고 MOSFET을 통해 모터를 켭니다. 5초 동안 감긴 후 서보 모터를 움직여 방아쇠를 당깁니다. 그런 다음 MOSFET이 모터를 끄고 너프 건이 목표물 찾기로 돌아갑니다.

    재미

    나는 총의 정확도를 테스트하기 위해 네온 핑크색 색인 카드를 벽에 붙였습니다. 내 프로그램이 측정된 거리에 대한 각도를 보정하고 조정하므로 잘 작동했습니다. 다음은 총이 작동하는 모습을 보여주는 동영상입니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 도식
  • 도식C/C++
    Arduino Mega에 업로드
    #include #include #include "BasicStepperDriver.h#include #include //X는 피치, Y는 yawconst int 핀[] ={6,7,8,5,4,12}; //MX STEP, DIR, EN, MY STEP, DIR, ENconst int limit_switch =26, laser_pin =11, spool_pin =10, servo_pin =13, distance_trig =29, distance_echo =30;double velocity_squared =21.336;double velocity_5.2254;5 float current_angle =0.0; float hyp_distance; //총에서 목표물까지의 거리(미터)#define X_MID 164#define Y_MID 150#define G 9.8#define STP_PER_DEG_YAW 3.333#define STP_PER_DEG_PITCH 184859#define RPM_12MICROST /17.7777 단계 / degreeBasicStepperDriver 피치_스테퍼(MOTOR_STEPS_X, 핀[1], 핀[0]);BasicStepperDriver yaw_stepper(MOTOR_STEPS_X, 핀[4], 핀[3]);서보 트리거;Pixy2I2C pixy;SPOOL 상태 { ACQUIRE , FIRE, WIND_DOWN, RETURN}; 상태 상태 =ACQUIRE; 무효 설정() { Serial.begin(115200); init_pins(); 지연(1000); //home_pitch(); pixy.init(); Serial.println("준비...");}void loop() { switch(state){ case ACQUIRE:acquire_target(); 상태 =위치; 디지털 쓰기(레이저 핀, 높음); 부서지다; 케이스 위치:Serial.println("포지셔닝"); position_gun(); 상태 =스풀; 부서지다; 케이스 SPOOL:Serial.println("스풀링"); digitalWrite(spool_pin,HIGH); 지연(5000); 상태 =화재; 부서지다; 경우 화재:fire_gun(); 상태 =WIND_DOWN; 부서지다; case WIND_DOWN:Serial.println("감기"); digitalWrite(spool_pin,LOW); 지연(2000); 상태 =반환; 디지털 쓰기(레이저 핀, LOW); 상태 =획득; 부서지다; }}fire_gun(){ Serial.println("총 발사!"); trigger.write(108); 지연(400); trigger.write(90); 지연(2000);} 무효 position_gun(){ float x, y; hyp_distance =핑(); hyp_distance /=100; 동안(!hyp_distance){ hyp_distance =ping(); hyp_distance /=100; } 직렬.println(hyp_distance); x =cos(current_angle) * hyp_distance; y =sin(current_angle) * hyp_distance; float target_angle =get_angle(x,y); target_angle // 100; Serial.println(target_angle); move_pitch(목표 각도 - 현재 각도); current_angle =target_angle;}quire_target() 무효{ int x=0, y=0; 긴 steps_taken=0; 부울 잠금 =거짓; 동안(! 잠금){ pixy.ccc.getBlocks(); if(pixy.ccc.numBlocks){ x =pixy.ccc.blocks[0].m_x; y =pixy.ccc.blocks[0].m_y; Serial.print("X 위치에 표시된 대상:");Serial.print(x);Serial.print(", Y:");Serial.println(y); if(x <=(X_MID - DEADZONE)){ //너무 왼쪽이면 총을 왼쪽으로 이동합니다. move_yaw(1); } else if(x>=(X_MID + DEADZONE)){ move_yaw(-1); } else if(y <=(Y_MID - DEADZONE)){ // 너무 멀리 위로 총을 이동합니다. pitch_stepper.move(33152); 걸음 수 +=33152; } else if(y>=(Y_MID + DEADZONE)){ pitch_stepper.move(33152); 걸음 수 +=33152; } else{ 잠금 =참; Serial.print("X 위치에 잠긴 대상:");Serial.print(x);Serial.print(", Y:");Serial.println(y); Serial.print("취한 단계:");Serial.println(steps_taken); } } } current_angle =steps_taken / STP_PER_DEG_PITCH; Serial.print("현재 각도:");Serial.println(current_angle);}void init_pins(){ pinMode(pins[2],OUTPUT); 핀모드(핀[5], 출력); 핀모드(limit_switch, INPUT_PULLUP); 핀모드(레이저 핀, 출력); 핀모드(스풀핀, 출력); 핀모드(distance_echo, INPUT); 핀모드(distance_trig, OUTPUT); 디지털 쓰기(핀[2], 낮음); 디지털 쓰기(핀[5], 낮음); 디지털 쓰기(레이저 핀, LOW); digitalWrite(spool_pin,LOW); trigger.attach(servo_pin); pitch_stepper.begin(RPM, MICROSTEPS); yaw_stepper.begin(5, MICROSTEPS); trigger.write(90);} 무효 move_yaw(부동 각도){ yaw_stepper.move(도*STP_PER_DEG_YAW*32);} 무효 move_pitch(부동 각도){ current_angle +=도; pitch_stepper.move(도*STP_PER_DEG_PITCH);}float get_angle(부동 거리, 부동 높이){ float i =2 * 높이 * 455.225; float j =G * 거리 * 거리; 나는 +=j; j =9.8 * 나; i =sqrt(pow(velocity_squared,2) - j); return atan((velocity_squared-i) / (G * 거리))*(180/PI);}float ping(){ Serial.println("거리 가져오기..."); 장기간; digitalWrite(distance_trig, LOW); 지연 마이크로초(5); digitalWrite(distance_trig, HIGH); 지연마이크로초(10); digitalWrite(distance_trig, LOW); 지속 시간 =pulseIn(distance_echo, HIGH); 반환 기간 / 2 / 29.1; //미터 단위의 거리}void home_pitch(){ Serial.println(digitalRead(limit_switch)); if(!digitalRead(limit_switch)){ //스위치가 활성화된 경우 pitch_stepper.rotate(720); } while(digitalRead(limit_switch)){ //Serial.println(digitalRead(limit_switch)); pitch_stepper.move(-32); } pitch_stepper.rotate(2880*2);}

    맞춤형 부품 및 인클로저

    Thingiverse 저장소
    thingiverse.com의 CAD 파일

    회로도


    제조공정

    1. 스테퍼 모터
    2. 통합 드라이버는 스테퍼 모터 설계를 용이하게 합니다
    3. Raspoulette 프로토타입
    4. 간단한 파이 로봇
    5. 바이폴라 스테퍼 ​​모터 라이브러리
    6. Swiper - 자동 Tinder/Bumble Swiper
    7. 자율 홈 어시스턴트 로봇
    8. 서보 모터와 스테퍼 모터 사이의 회색 영역
    9. 리니어 모터란?
    10. 서보 모터 란 무엇입니까?