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

직렬 대화로 제어되는 스테퍼 기반 회전 스탠드

구성품 및 소모품

28BYJ48 스테퍼 모터
× 1
X113647 스테퍼 모터 드라이버
× 1
5mm 샤프트용 Pololu 범용 알루미늄 장착 허브
× 1
Arduino UNO
× 1
나무 받침대 15cm x 15cm
× 1
고무 패드
× 4

필요한 도구 및 기계

프렛쏘
6mm 목재용 드릴

이 프로젝트 정보

전체 이야기:http://www.cesarebrizio.it/Arduino/Turntable.html

이 프로젝트는 스테퍼 모터를 기반으로 한 회전 플랫폼에 관한 것입니다.

스테퍼 모델은 28BYJ48이며 일반적으로 스테퍼와 함께 구입하는 X113647 스테퍼 모터 드라이버(ULN2003A IC 기반)를 통해 제어됩니다.

플랫폼은 양방향으로 회전할 수 있으며 직렬 모니터 또는 Tera Term을 통해 제어됩니다.

다음 명령이 구현됩니다.

<울>
  • R =시계 방향으로 계속 회전(의미:몇 턴 동안)
  • r =360도 회전 시계 방향
  • =시계 반대 방향으로 계속 회전(의미:몇 턴 동안)
  • =360도 회전 시계 반대 방향
  • S =회전 중지
  • 기계적 관점에서 조립은 매우 간단합니다. 기본 테이블에 약 15cmx15cm 크기의 정사각형 합판 또는 이와 유사한 재료만 있으면 됩니다.

    테이블의 중심은 대각선이 교차하는 지점에서 찾을 수 있습니다. 해당 지점에 정확히 6mm 구멍이 뚫립니다.

    스테퍼 허브가 중심에서 벗어났습니다. 허브를 6mm 구멍에 붙이면 연필로 스테퍼의 윤곽을 그릴 수 있습니다.

    그런 다음 스테퍼 윤곽 주위에 가능한 한 단단한 둥근 구멍이 프렛쏘로 절단되어 스테퍼의 두 고정 구멍이 테이블의 나무에 단단히 고정되어 스테퍼를 고정하는 데 사용할 수 있습니다. 테이블.

    필요한 공간을 확보하려면 10mm 높이의 고무 패드가 필요합니다(스테퍼가 테이블 아래에 약간 붙어 있음).

    회전판은 5mm 샤프트용 Pololu 범용 알루미늄 장착 허브 덕분에 스테퍼에 고정됩니다.

    정보 출처:

    작은 스테퍼 컨트롤:http://arduino-info.wikispaces.com/SmallSteppers

    실제로 4개의 다른 핀을 사용했지만 아래 회로 그림은 연결을 정확하게 재현합니다. 위 사진을 보면(Arduino의 빨간색 선이 "분홍색"을 대체함):

    #define motorPin1 4 // 파란색 - 28BYJ-48 핀 1#define motorPin2 5 // 분홍색 - 28BYJ-48 핀 2#define motorPin3 6 // 노란색 - 28BYJ-48 핀 3#define motorPin4 7 / / 주황색 - 28BYJ-48 핀 4 // 빨간색 - 28BYJ-48 핀 5(VCC) // 파란색 - 28BYJ-48 핀 GND #define STEPS_PER_TURN 2048 // 360deg의 단계 수; 

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

    코드

    <울>
  • Arduino의 전체 스케치
  • ArduinoArduino의 전체 스케치
    설명이 있는 소프트웨어에 대한 전체 설명
    /* 직렬 대화로 제어되는 스테퍼 기반 회전 스탠드회로 및 설명:http://www.cesarebrizio.it/Arduino/Turntable.html참조 회로는 다음과 같습니다. https:// www.tdegypt.com/wp-content/uploads/2017/08/stepper-motor-wiring.png스케치가 디지털 출력 4 - 5 - 6 - 7을 사용한다는 유일한 예외는 Fritzing 다이어그램이 2017년 12월 23일 수정된 동안 생성된 것입니다 --- - Cesare Brizio 작성 이 예제 코드는 공개 도메인입니다. 이 스케치는 스테퍼 모터를 기반으로 하는 회전 플랫폼을 제어합니다. 스테퍼 모델은 28BYJ48이며 일반적으로 스테퍼와 함께 구입하는 X113647 스테퍼 모터 드라이버(ULN2003A IC 기반)를 통해 제어됩니다. 플랫폼은 양방향으로 회전할 수 있으며 직렬 모니터 또는 Tera Term을 통해 제어됩니다. 다음 명령이 구현됩니다. R =시계 방향으로 계속 회전(의미:여러 차례)r =360도 회전 시계 방향L =시계 반대 방향으로 계속 회전(의미:여러 번 회전)l =360도 회전; 반시계 방향S =회전 중지 정보 출처:작은 스테퍼 제어:http://arduino-info.wikispaces.com/SmallSteppers*//*-----( 필요한 라이브러리 가져오기 )-----*/#include /*-----( 상수 및 핀 번호 선언 )-----*//* NEVER PUT; AFTER A #define 문!!!! */// 모터 핀#define motorPin1 4 // 파란색 - 28BYJ-48 핀 1#define motorPin2 5 // 분홍색 - 28BYJ-48 핀 2#define motorPin3 6 // 노란색 - 28BYJ-48 핀 3#define motorPin4 7 / / 주황색 - 28BYJ-48 핀 4 // 빨간색 - 28BYJ-48 핀 5(VCC) // 파란색 - 28BYJ-48 핀 GND #define STEPS_PER_TURN 2048 // 360deg;int의 단계 수 motorSpeed ​​=500; // 고속(800 이상)은 28BYJ-48int에서 불규칙한 동작을 유발할 수 있습니다. motorAccel =400; // 위와 같이:극단적인 가속을 피하는 것이 좋습니다.sint myPos =0; // 360deg의 시작점을 정의하는 데 사용됩니다. rotationsint LeftTurnUp =0; // 회전 방향을 결정하기 위한 플래그 쌍int RightTurnDown =0; // 회전 방향을 결정하기 위한 플래그 쌍int Continuous =0; // 아래에서 단일 회전 명령을 구별하는 데 사용됩니다.int IncomingByte =0; // 들어오는 직렬 데이터용/*-----( 스테퍼 제어용 개체 )-----*/// 핀 4,5,6,7//에서 스테퍼를 4와이어 바이폴라로 설정합니다. 참고:시퀀스 1-3-2-4는 28BYJ48AccelStepper 스테퍼(4,motorPin1,motorPin3,motorPin2,motorPin4)의 적절한 시퀀싱에 필요합니다. 무효 설정(){ Serial.begin(9600); 스테퍼.setMinPulseWidth(20); // Arduino의 펄스를 방지하기 위한 권장 설정 // 너무 빨라서 디코딩할 수 없습니다. stepper.setMaxSpeed(motorSpeed); 스테퍼.setSpeed(모터 속도); 스테퍼.setAcceleration(motorAccel); // 다음 두 줄은 "0단계"를 현재 위치로 재설정합니다. stepper.setCurrentPosition(stepper.currentPosition()); 스테퍼.runToPosition(); Serial.println("사용 가능한 명령:"); Serial.println("R =시계 방향 연속 회전"); Serial.println("r =360deg; 시계 방향 회전"); Serial.println("L =시계 반대 방향 연속 회전"); Serial.println("l =360deg; 시계 반대 방향 회전"); Serial.println("S =회전 중지");}void 루프(){ if (Serial.available()> 0) {incomingByte =Serial.read(); { if (incomingByte =='R') { Serial.println(" «R» 수신 - 연속 시계 방향 회전 활성화"); // 다음 두 줄은 명령을 순서에 상관없이 보낼 수 있습니다. // 실행 전에 빠른 중지가 수행됩니다. stepper.stop(); // 최대한 빨리 중지:새 대상을 설정합니다. stepper.runToPosition(); // 이제 빠른 정지 후 중지됨 // 다음 두 플래그는 회전 방향을 결정합니다. LeftTurnUp =1; 우회전 =0; 연속 =1; // 단일 회전 명령을 구별하기 위해 아래에 사용 stepper.setCurrentPosition(stepper.currentPosition()); // "여기"에 0단계를 설정합니다. stepper.setSpeed(motorSpeed); // 이전 명령은 속도를 재설정했습니다. } if (incomingByte =='L') { Serial.println("received «L» - 지속적인 반시계 방향 회전 활성화"); // 다음 두 줄은 명령을 순서에 상관없이 보낼 수 있습니다. // 실행 전에 빠른 중지가 수행됩니다. stepper.stop(); // 최대한 빨리 중지:새 대상을 설정합니다. stepper.runToPosition(); // 이제 빠른 정지 후 중지됨 // 다음 두 플래그는 회전 방향을 결정합니다. RightTurnDown =1; 좌회전 =0; 연속 =1; // 단일 회전 명령을 구별하기 위해 아래에 사용 stepper.setCurrentPosition(stepper.currentPosition()); // "여기"에 0단계를 설정합니다. stepper.setSpeed(motorSpeed); // 이전 명령은 속도를 재설정했습니다. } if (incomingByte =='r') { Serial.println("received «r» - 단일 시계 방향 회전 활성화"); // 다음 두 줄은 명령을 순서에 상관없이 보낼 수 있습니다. // 실행 전에 빠른 중지가 수행됩니다. stepper.stop(); // 최대한 빨리 중지:새 대상을 설정합니다. stepper.runToPosition(); // 이제 빠른 정지 후 중지됨 // 다음 두 플래그는 회전 방향을 결정합니다. LeftTurnUp =1; 우회전 =0; 연속 =0; // 단일 회전 명령을 구별하기 위해 아래에 사용 stepper.setCurrentPosition(stepper.currentPosition()); // "여기"에 0단계를 설정합니다. stepper.setSpeed(motorSpeed); // 이전 명령은 속도를 재설정했습니다. // 2047 단계 앞으로 이동해야 하므로 현재 위치를 // 회전 시작점으로 저장합니다. myPos=stepper.currentPosition(); } if (incomingByte =='l') { Serial.println(" «l» 수신 - 단일 반시계 방향 회전 활성화"); // 다음 두 줄은 명령을 순서에 상관없이 보낼 수 있습니다. // 실행 전에 빠른 중지가 수행됩니다. stepper.stop(); // 최대한 빨리 중지:새 대상을 설정합니다. stepper.runToPosition(); // 이제 빠른 정지 후 중지됨 // 다음 두 플래그는 회전 방향을 결정합니다. RightTurnDown =1; 좌회전 =0; 연속 =0; // 단일 회전 명령을 구별하기 위해 아래에 사용 stepper.setCurrentPosition(stepper.currentPosition()); // "여기"에 0단계를 설정합니다. stepper.setSpeed(motorSpeed); // 이전 명령으로 속도가 재설정되었습니다. // 2047 단계 뒤로 이동해야 하므로 현재 위치를 // 회전 시작점으로 저장합니다. myPos=stepper.currentPosition(); } if (incomingByte =='S') { Serial.println("«S» 수신 - 회전 중지"); // 회전 방향을 결정하는 플래그를 재설정합니다. LeftTurnUp =0; 우회전 =0; 스테퍼.스톱(); // 최대한 빨리 중지:새 대상을 설정합니다. stepper.runToPosition(); // 이제 빠른 정지 후 멈춤 } } } if (Continuous ==1) // 연속 회전 { if (LeftTurnUp ==1) //좌회전 { stepper.moveTo(10000); //많은 단계를 이동 - 기계적으로 더 많이 필요함 } if (RightTurnDown ==1) //우회전 { stepper.moveTo(-10000); //많은 단계를 이동 - 기계적으로 필요한 것보다 더 많이 } stepper.run(); } if (Continuous ==0) // 연속 회전 { if (LeftTurnUp ==1) //좌회전 { stepper.moveTo(myPos+STEPS_PER_TURN); // 1턴 =2048 step } if (RightTurnDown ==1) //우회전 { stepper.moveTo(myPos-STEPS_PER_TURN); // 1턴 =2048 단계 } } stepper.run();} 

    회로도

    Fritzing에서 만든 전체 회로

    제조공정

    1. 스테퍼 모터
    2. 통합 드라이버는 스테퍼 모터 설계를 용이하게 합니다
    3. 온도 제어 팬
    4. Raspoulette 프로토타입
    5. 자율 너프 보초 포탑
    6. 바이폴라 스테퍼 ​​모터 라이브러리
    7. Raspberry Motor Shield를 사용한 Android 제어 장난감
    8. Swiper - 자동 Tinder/Bumble Swiper
    9. 리니어 모터란?
    10. 서보 모터 란 무엇입니까?