Arduino를 사용하여 자체 추진 로봇을 조립합니다. Arduino를 사용하여 자체 추진 로봇 조립 Arduino를 사용하여 조립할 수 있는 로봇

안녕하세요 여러분. 이 기사는 방법에 대한 짧은 이야기입니다. 하다기계 인간 그들의 소유. 왜 이야기인가요? 이는 그러한 제품의 제조를 위해 공예상당한 양의 지식을 사용해야 하는데, 이는 하나의 기사에 제시하기가 매우 어렵습니다. 우리는 빌드 프로세스를 살펴보고 코드를 살펴보고 궁극적으로 Silicon Valley 창작물에 생명을 불어넣을 것입니다. 무엇을 끝내야할지 아이디어를 얻으려면 비디오를 시청하는 것이 좋습니다.

계속 진행하기 전에 다음 사항에 유의하십시오. 제조 중 공예레이저 커터가 사용되었습니다. 손으로 작업한 경험이 충분하다면 레이저 커터 사용을 피할 수 있습니다. 정확성은 프로젝트를 성공적으로 완료하는 열쇠입니다!

1단계: 어떻게 작동하나요?

로봇에는 4개의 다리가 있고 각 다리에는 3개의 서보가 있어 팔다리를 3자유도로 움직일 수 있습니다. 그는 "기어가는 걸음걸이"로 움직인다. 느릴 수도 있지만 가장 부드러운 것 중 하나입니다.

먼저 로봇이 앞으로, 뒤로, 왼쪽, 오른쪽으로 이동하도록 가르친 다음 장애물/장애물을 감지하는 데 도움이 되는 초음파 센서를 추가하고 로봇 제어가 새로운 수준에 도달할 수 있는 Bluetooth 모듈을 추가해야 합니다. .

2단계: 필요한 부품

해골 2mm 두께의 플렉시 유리로 만들어졌습니다.

수제 제품의 전자 부품은 다음으로 구성됩니다.

  • 서보 12개;
  • arduino nano(다른 arduino 보드로 교체 가능)

  • 서보 제어용 실드;
  • 전원 공급 장치(프로젝트에서는 5V 4A 전원 공급 장치가 사용됨)

  • 초음파 센서;
  • hc 05 블루투스 모듈;

방패를 만들려면 다음이 필요합니다.

  • 회로 기판(바람직하게는 전원 및 접지의 공통 라인(버스) 포함);
  • 보드 간 핀 커넥터 - 30개;
  • 보드당 소켓 – 36개;

  • 전선.

도구:

  • 레이저 절단기(또는 숙련된 손);
  • 초강력 접착제;
  • 핫멜트 접착제.

3단계: 뼈대

그래픽 프로그램을 사용하여 뼈대의 구성 요소를 그려 봅시다.

이 이후에는 언제든지 저렴한 방법미래 로봇의 30개 부분을 잘라내세요.

4단계: 조립

절단 후 플렉시글래스에서 보호 종이 덮개를 제거합니다.

다음으로 다리 조립을 시작합니다. 뼈대 부분에 패스너가 내장되어 있습니다. 이제 남은 일은 부품을 서로 연결하는 것입니다. 연결은 매우 단단하지만 안정성을 높이기 위해 패스너에 순간접착제 한 방울을 바를 수 있습니다.

그런 다음 서보를 수정해야 합니다(서보 샤프트 반대편에 나사를 붙입니다).

이 수정을 통해 우리는 로봇을 더욱 안정적으로 만들 것입니다. 서보 8개만 수정하면 되며 나머지 4개는 본체에 직접 부착됩니다.

다리를 연결 요소(곡선 부분)에 연결하고 이를 다시 본체의 서보 드라이브에 연결합니다.

5단계: 방패 만들기

단계에 제시된 사진을 따르면 보드를 만드는 것은 매우 간단합니다.

6단계: 전자제품

서보 드라이브 핀을 아두이노 보드에 연결해 보겠습니다. 결론은 다음과 연결되어야 한다 올바른 순서, 그렇지 않으면 아무것도 작동하지 않습니다!

7단계: 프로그래밍

이제 프랑켄슈타인에 생명을 불어넣을 시간입니다. 먼저 Legs_init 프로그램을 로딩하여 로봇이 그림과 같은 위치에 있는지 확인해보자. 다음으로 quattro_test를 로드하여 로봇이 전진, 후진, 좌회전, 우회전 등 기본적인 움직임에 반응하는지 확인해 보겠습니다.

중요: Arduino IDE에 추가 ​​라이브러리를 추가해야 합니다. 라이브러리 링크는 아래와 같습니다.

로봇은 앞으로 5보, 뒤로 5보, 왼쪽으로 90도 회전, 오른쪽으로 90도 회전해야 합니다. 프랑켄슈타인이 모든 일을 올바르게 수행한다면 우리는 올바른 방향으로 나아가고 있는 것입니다.

. 에스: 로봇을 스탠드처럼 컵 위에 올려 놓으면 매번 시작점에 놓을 필요가 없습니다. 테스트 결과가 나오자마자 정상적인 일로봇을 지상/바닥에 놓아 테스트를 계속할 수 있습니다.

8단계: 역기구학

역운동학은 로봇을 실제로 구동하는 것입니다(이 프로젝트의 수학적인 측면에 관심이 없고 프로젝트를 서둘러 완료하는 경우 이 단계를 건너뛸 수 있지만 로봇을 구동하는 것이 무엇인지 아는 것은 항상 유용합니다).

간단히 말해서 역운동학, 줄여서 IR은 다리의 날카로운 끝 위치, 각 서보의 각도 등을 결정하는 삼각 방정식의 "일부"이며 궁극적으로 몇 가지 예비 설정을 결정합니다. 예를 들어, 로봇의 각 단계의 길이 또는 이동/휴식 중에 신체가 위치하게 될 높이 등입니다. 이러한 사전 정의된 매개변수를 사용하여 시스템은 주어진 명령을 사용하여 로봇을 제어하기 위해 각 서보가 이동해야 하는 양을 추출합니다.

기사의 마지막 부분은 플라스틱 식품 용기의 뚜껑인 섀시에 조립하는 작은 로봇에 관한 것입니다. 우리 로봇의 두뇌는 Arduino UNO 보드이고, 모터와 서보 드라이브는 Driver Motor Shield 보드에 의해 제어되며, 장애물 센서는 초음파 소나입니다. (만화에 나오는 Valli의 눈과 같은) "HC-SR04 초음파 센서"입니다. , . Arduino에서 로봇을 만드는 방법은 무엇입니까?

9. 배터리와 모터 연결

배터리를 연결할 때 극성이 올바른지 절대적으로 확인해야 합니다. 7번 측정하고 한 번 연결하십시오. 이 규칙을 따르십시오. 빨간색 선은 항상 + 전원에 연결되고 검정색 선은 접지되며 마이너스라고도 하며 GND라고도 합니다. 제조업체는 동일한 규칙을 따르려고 노력합니다. 따라서 배터리실에서 나오는 전선을 모터 제어 보드의 +M 및 GND 블록에 연결합니다. 작동 중인 모터의 와이어를 모터 제어 보드의 M1, M2 블록에 연결합니다. 이동 방향의 왼쪽은 블록 M1에 연결되고 오른쪽은 블록 M2에 연결됩니다. 아직은 모터 극성에 대해 걱정할 필요가 없습니다. 테스트 중에 문제가 발생하면 모터 극성을 변경할 수 있습니다.

10. 모듈의 극성과 올바른 연결을 확인하십시오.

마이크로 로봇 조립에서 매우 중요하고 결정적인 순간은 블록 다이어그램에 따라 올바른 설치, 연결, 모듈을 확인하고, 보드의 표시를 확인하고, 테스터가 있는 테스터로 전원 공급 장치의 극성을 확인하는 것입니다.

11. Arduino 프로그래밍 단계

프로그램 아두이노 마이크로컨트롤러 USB 케이블과 특수 프로그램을 사용하여 컴퓨터에서 업로드 - 프로그래밍 및 스케치 편집 환경(프로그램) - Arduino IDE. arduino.cc 웹사이트의 다운로드 섹션에서 프로그램을 다운로드할 수 있습니다. 여기에서 언제든지 최신 버전의 프로그램을 다운로드할 수 있습니다. 프로그래밍 환경이 설치된 후 남은 것은 드라이버 프로그램 메뉴에서 사용하려는 보드(이 경우 Arduino UNO 및 USB 에뮬레이션을 통해 Arduino가 연결되는 COM 포트)를 선택하는 것입니다. 이 주제에 대한 다양한 매뉴얼이 있으므로 이 단계를 건너뜁니다(만일의 경우 - 메뉴 도구 > 직렬 포트).

마이크로 로봇용 프로그램은 당사 웹사이트에서 찾을 수 있지만 등록 후에만 Arduino의 미니 로봇을 농담할 수 있습니다. 프로그램이 작동하려면 AFMotor.h, Sevo.h, NewPing.h와 같은 추가 라이브러리가 필요합니다. 모두 아카이브에 있으므로 설치된 Arduino IDE 프로그램 폴더에 아카이브의 압축을 풀어야 합니다. 나에게 이것은 c:Program Files (x86)Arduino 디렉터리이고, 라이브러리는 c:Program Files (x86)Arduinolibraries 폴더에 배치되어야 합니다. 그런 다음 c:Program Files (x86)ArduinolibrariesAPC_4_ROBOT 디렉토리를 입력하고 APC_4_ROBOT.ino를 두 번 클릭합니다. 이는 스케치 자체입니다. 그러면 프로그래밍 환경이 시작됩니다. 베어보드 연결하기 아두이노 우노(연결된 모듈이 없음을 의미) USB 케이블을 통해 컴퓨터에 연결하고 오른쪽 화살표가 있는 버튼을 누르면 프로그램이 컨트롤러에 업로드되기 시작합니다. 전체 과정은 몇 초 정도 걸리며 모든 것이 올바르게 연결되면 빨간색 표시가 켜지지 않고 오른쪽 하단에 있는 표시기가 100%로 이동을 완료합니다. Arduino 프로그램은 Atmega328 컨트롤러에 설치됩니다.

12. 로봇 시작

Arduino의 미니 로봇 - 움직일 준비가 되었습니다. 로봇 월리

우리 로봇의 첫 번째 테스트 실행을 수행할 수 있습니다. 우리 로봇은 올바르게 운전하지 않았습니다. 한 바퀴는 올바르게 회전하고 다른 바퀴는 반대 방향으로 회전했습니다. M2 블록의 모터 와이어 극성을 바꿔야 했습니다. 그런데 그러면 우리 것 작은 로봇방의 모든 구석과 장애물에 명예롭게 대처했습니다.

Arduino를 배우기로 결정한 모든 초보자에게 이 기사를 바칩니다. 첫 번째 수업인 LED 깜박임부터 추가 학습을 계속할 수 있습니다. 로봇에 대한 소재가 매우 흥미롭고, 여러분의 관심을 끌기 위해 장애물을 피하는 로봇을 만드는 방법부터 시작하기로 했습니다. 다음에 일어날 일은 훨씬 쉬울 것이며 시계처럼 진행될 것입니다. 이 로봇은 정말 작동합니다. 모두들 행운을 빌어요!

추신 그것은 오래 전에 인터넷의 광대 한 영역에서 발견 된 기사의 상당히 무료 번역이었습니다. 물론 개그에 가깝습니다. 모든 것이 새로 이루어졌고 그림이 수정되었으며 소스에 대한 링크가 없었기 때문입니다. 문서는 Word였습니다.

로봇에 대해 조금. 우선, 프로젝트는 가능한 한 저렴해야 했습니다. 몸체는 계산이나 균형 조정 없이 만들어졌으며 몸체의 주요 요구 사항은 최소 치수였습니다. 그럼 이 로봇을 조립해 볼까요?

부품 목록:
1. 1.5mm 플렉시글라스로 제작된 신체 부위와 발 세트입니다.
2. Arduino Mega 또는 Uno (Mega 사용) - 1개
3. 마이크로 서보 드라이브(TowerPro SG90 사용) - 8개
4. 초음파 거리계 HC-SR04 - 1개
5. 배터리 크기 18560, 3.7V (TrustFire 2400mAh 사용) - 2개
6. 배터리 홀더 사이즈 18560 (컨테이너-포장 개조 사용) - 1개.
7. 지지하다 인쇄 회로 기판 25mm. (해당 스탠드가 사용됨) - 4개
8. 브레드보드의 일부.
9. 점퍼선.
10. DIN 7985 M2, 8mm 나사를 조입니다. - 18개
11. 너트 DIN 934 M2 - 18개

Z-RoboDog 로봇 조립:

1. 로봇 본체는 두께 1.5mm의 투명한 플렉시글라스로 만들어졌습니다. 모든 부품은 CorelDraw에서 만든 도면에 따라 레이저 절단됩니다.

2. 몸체를 붙인다 두 번째 접착제. 접착체의 강도는 상당히 충분합니다. 조립할 때 하단 덮개에 있는 구멍의 위치를 ​​고려하거나(사진 참조) 더 좋은 방법은 보드를 부착하고 모든 것이 일치하는지 확인하는 것입니다. 전선 구멍이 더 가까워 지도록 측벽을 부착하십시오. 뒷벽. 뒷벽에 있는 더 넓은 구멍은 USB 케이블용이므로 조립 시 이 점을 고려하시기 바랍니다.


3. 구멍을 표시하고 뚫습니다(2mm 드릴 비트). 볼트와 너트(목록의 항목 10, 11)를 사용하여 서보를 하우징에 고정합니다. 전면 서보 샤프트는 전면 벽에 더 가까워야 합니다. 후면 서보 구동 샤프트는 후면 벽에 더 가깝습니다.




4.1. 발을 모으십시오. 발의 윗부분(구멍 2개 있음)을 가져옵니다. 부품의 중간을 표시하십시오. 서보 드라이브 로커를 배치한 후 나사와 드릴 구멍(1.5mm 드릴)으로 장착 지점을 표시합니다. 나사 머리가 시트 측면에 오도록 로커를 고정합니다. 로커를 다른 측면에 고정하고 좌석이전의 샤프트는 반대 방향이었습니다.


4.2. 서보(2mm 드릴 비트)를 장착하기 위한 구멍을 표시하고 드릴합니다. 부착된 서보의 샤프트는 발의 좁은 가장자리에 더 가까워야 합니다.


4.3. 예를 들어 발이 미끄러지는 것을 방지하려면 발에 고무를 붙이십시오. 하지만 개가 밟을 때 발의 앞부분을 붙이면 안 됩니다. 발이 걸려서 걸릴 수 있습니다. 나는 차에서 끈끈한 매트 조각을 붙였습니다.

5. 초음파 거리 측정기(2mm 드릴)를 장착하기 위한 구멍을 표시하고 뚫습니다. 접촉 다리가 위쪽을 향하도록 거리 측정기를 설치합니다.

6. 배터리 홀더를 케이스 중앙에 위치하도록 설치합니다. Arduino 보드를 고정하고 모든 구성요소를 연결합니다. 브레드보드의 일부는 전력 분배에 사용되었습니다.

Z-RoboDog 로봇 설정 및 시작:

이 시점에서 계단을 보정할 수 있도록 발을 직접 설치해야 합니다. 주요 문제는 특정 위치에서만 샤프트에 부착되는 로커입니다. 또한 서보 자체의 작동 정도가 다를 수 있습니다.

우리 강아지 발은 이렇게 생겼어요 극한점서보 각도(변수 zs1, zs2, zs3 등). 사진과 같이 발의 위치를 ​​잡아보세요. 시각적으로 볼 때 발은 같은 위치에 있어야 합니다.

기본 자세에서는 발을 내밀 수도 있습니다. 그런 다음 로커를 서보 샤프트에 나사로 고정하는 것을 잊지 마십시오.


Z-RoboDog의 소프트웨어 부분:

코드는 매우 간단하며 주석이 곳곳에 추가됩니다. 모든 동작은 배열로 되어 있어서 숫자가 헷갈리지 않도록 각 서보마다 변수를 사용했습니다. 예를 들어, s1은 서보 1이고, s2는 서보 2입니다. 더 쉽게 이해할 수 있도록 이 다이어그램을 제공합니다.

발에는 번호가 매겨져 있으며 발의 각 부분은 발을 움직이는 서보 드라이브와 연결되어 있습니다. 또한 각 발에 대해 이동 방향이 표시됩니다. 플러스 및 마이너스 기호는 각도가 증가하거나 감소할 때 발이 움직이는 위치를 나타냅니다. 시작 각도는 메인 포스트(s1, s2, s3 등)의 모서리였습니다. 예를 들어 두 번째 발을 확장해야 하는 경우 각도 s3 및 s4를 늘려야 합니다. 배열에서는 다음과 같습니다(s1, s2, s3+100, s4+50, s5, s6, s7, s8). . 전체 스케치는 다음과 같습니다. 코드는 제가 알고 있는 내용을 바탕으로 작성되었습니다. 구현 경로를 잘못 선택했다면 알려주세요.

동영상:


아카이브에 스케치: 귀하는 당사 서버에서 파일을 다운로드할 수 있는 권한이 없습니다.

Arduino로 다양한 기계를 만드는 것은 매우 쉽습니다. 원격 제어, 간단한 센서 및 논리. 이것이 바로 이 라인이 엄청난 인기를 누리는 이유입니다. 호환 가능한 센서와 확장 보드가 많이 판매됩니다. 인터넷은 모든 경우에 사용할 수 있는 기성 소프트웨어 라이브러리와 오픈 소스 프로젝트로 가득 차 있습니다. Arduino를 마스터하는 과정에서 갖게 될 거의 모든 질문은 이미 누군가가 질문한 것이며 항상 답을 찾을 수 있습니다.

어딘가에서 시작해볼까요? 주요 질문은 컨트롤러 선택입니다. Arduino에는 많은 개정판이 있으며 이러한 버전을 기반으로 구축된 타사 클론도 있습니다. 아마도 우리에게 가장 흥미로운 두 가지 수업은 다음과 같습니다.

  • 아두이노 우노 - 최선의 선택초보자용, 가장 단순하고 예산이 저렴하며 가장 일반적인 보드입니다. 이는 16MHz의 클록 주파수, 32KB의 플래시 메모리, 2KB의 RAM 및 1KB의 EEPROM을 갖춘 ATmega328 칩을 기반으로 합니다. Uno에는 센서, 서보 및 기타 장치를 제어하는 ​​데 사용할 수 있는 14개의 디지털 입력/출력이 있습니다.
  • Arduino Mega / Mega 2560은 프로젝트가 복잡할 것이라는 점을 미리 알고 있을 때 적합한 보드입니다. 주요 차이점은 입력/출력 수가 더 많다는 것입니다(Mega 48개, Mega 2560 54개). 또한 훨씬 더 많은 메모리가 있습니다: 8KB RAM, 4KB EEPROM, 플래시 메모리 128 및 256KB(각각 Mega 및 Mega 2560). 또한 보드는 칩, USB 속도 및 기타 특성이 서로 다릅니다.

물론 Arduino Pro, Arduino LilyPad 등도 있습니다. 하지만 지금은 처음 두 모델에 중점을 두겠습니다. 우리의 경우 모든 것이 매우 간단합니다. 다리가 많은 로봇에는 Mega가 필요합니다.

첫 번째 코드

먼저 Arduino IDE(arduino.cc)를 설치해 보겠습니다. 이는 크로스 플랫폼 무료 개발 환경입니다. 이제 Arduino를 연결하면 실제로 첫 번째 코드를 작성할 수 있습니다. 간단한 예: LED 점멸 프로그램입니다. 대부분의 Arduino 컨트롤러에는 이 기능이 있으며 핀 13에 연결되어 있습니다. 그런데 Arduino 세계에서는 프로그램을 일반적으로 스케치라고 합니다. 다음은 주석이 포함된 스케치의 텍스트입니다.

// 이 핀에 LED라는 이름을 지정하겠습니다. const int LED = 13; void setup() ( // 출력을 위해 // 디지털 핀 초기화: pinMode(LED, OUTPUT); ) void loop() ( // 논리 1레벨을 // 핀 13에 적용(LED 켜기): digitalWrite(LED , HIGH) ; // 잠시 동안 스케치 실행을 일시 중지합니다. Delay(1000); // 논리 0 레벨을 // 핀 13에 적용합니다(LED 끄기): digitalWrite(LED, LOW); / 스케치 실행을 // 잠시 일시 중지합니다. Delay(1000);

설정 및 루프 기능에 주의하세요. 모든 Arduino 스케치에 있어야 합니다. Setup은 전원을 켤 때나 컨트롤러를 다시 시작한 후에 한 번 호출됩니다. 코드를 한 번만 실행하려면 여기에 코드를 배치해야 합니다. 대부분 이것은 무언가를 초기화하기 위한 모든 종류의 절차입니다. 우리의 스케치도 예외는 아닙니다. Arduino 디지털 핀은 입력과 출력 모두로 작동할 수 있습니다. 설정 기능에서는 핀 13이 컨트롤러의 디지털 출력 역할을 한다고 말합니다.

설정 기능이 작업을 완료한 후 폐쇄 루프가 자동으로 시작되고, 그 안에서 루프 기능이 호출됩니다. 거기에 우리가 하고 싶은 일을 적어야 합니다. 그리고 우리는 핀 13에 논리적 1레벨(5V)을 적용하고 싶습니다. 즉, LED를 켜고 1초(밀리초 단위로 1000)를 기다린 다음 논리적 0레벨(0V)을 적용하고 다시 1초를 기다리려고 합니다. 다음 루프 호출은 모든 것을 반복합니다.

이제 스케치를 컨트롤러에 업로드합니다. 아니요, 프로그래머는 필요하지 않습니다. Arduino 컨트롤러에는 스케치 외에도 특히 컴퓨터에서 코드 로드를 제어하는 ​​특수 프로그램인 부트로더가 포함되어 있습니다. 따라서 스케치를 업로드하려면 USB 케이블과 Arduino IDE의 파일 → 업로드(Ctrl + U) 메뉴 항목만 필요합니다.

핵심 질문

실제로 우리에게 필요한 다리는 몇 개일까요? 걷는 로봇의 다양한 구성을 정의해 보겠습니다. 다리 수에 따라:

  • Biped - Biped(프로토타입 - 인간);
  • 네 발 달린 동물 - 다리가 네 개인 (시제품 - 대부분의 포유류)
  • 육족류 - 다리가 6개 달린 것(시제품 - 대부분의 곤충);
  • 문어 - 다리가 8개 있는 것(시제품 - 거미, 전갈, 게 및 기타 절지동물).

다리의 개수뿐만 아니라 각각의 구성도 중요합니다. 다리의 주요 특징은 자유도(DOF)의 수입니다. 자유도는 하나의 축을 중심으로 회전하거나 구부릴 수 있는 능력입니다(드물게 축을 따라 앞으로 이동하는 경우). 분명히 자유도가 하나뿐이라면 그런 다리로는 멀리 가지 않을 것입니다. 2DOF(2자유도) 다리는 이미 다리가 여러 개인 로봇이 움직일 수 있도록 허용하지만, 2DOF는 다리 끝 부분만 한 평면에서 자유롭게 움직일 수 있도록 허용합니다. 그리고 3DOF 다리는 3D 공간에서 "발"을 움직입니다(물론 세 축이 모두 평행하지 않은 경우). 다리의 유연성과 운동 범위를 단순히 증가시키는 4DOF 다리도 있습니다. 곤충은 대부분 4DOF 다리를 가지고 있습니다.

이것이 우리에게 무엇을 의미합니까? 값싼 아마추어 로봇에서 각 자유도는 하나의 모터, 더 정확하게는 서보 드라이브 또는 서버에 의해 실현됩니다. 다리의 구성에 따라 필요한 서보 수가 고유하게 결정됩니다. 따라서 3DOF 헥사포드에는 18개의 서보가 필요하고, 4DOF 스파이더에는 32개의 서보가 필요합니다. 수량에 놀라지 마세요. 아마추어에서 사용되는 소형 서보입니다. 무선 제어 모델, 매우 저렴합니다. 마이크로 서보를 검색하여 온라인 상점에서 찾을 수 있습니다.

서보를 프로그래밍하려면 주요 작업을 수행하는 컨트롤러가 이미 있다는 것을 아는 것으로 충분합니다. 그리고 필요한 것은 구동축을 어떤 위치로 회전시키려는지 컨트롤러에 알려주는 전원과 디지털 신호를 공급하는 것뿐입니다. 디자인에 대한 정보는 쉽게 찾을 수 있습니다. 해당 프로토콜은 모든 디지털 통신 프로토콜 중 가장 간단한 펄스 폭 변조 - PWM(영어로 PWM)입니다. 모든 단순 서보에는 접지, +5V(전압은 크기와 전력에 따라 달라질 수 있음) 및 신호 입력의 세 가지 핀이 있는 커넥터가 있습니다. Arduino 컨트롤러에는 두 가지가 있습니다. 다양한 방법으로그런 신호를 발생시킵니다. 첫 번째는 칩 자체가 여러 디지털 I/O 핀에서 출력할 수 있는 하드웨어 PWM입니다. 두 번째는 소프트웨어입니다. 소프트웨어를 사용하면 하드웨어보다 더 다양한 PWM 신호를 동시에 수신할 수 있습니다. Arduino에는 이를 위한 편리한 래퍼인 서보 라이브러리가 제공됩니다. 대부분의 소형 컨트롤러(Uno, Due, Nano)에서는 12개의 서보를 동시에 사용할 수 있고 Arduino Mega 등에서는 48개의 서보를 동시에 사용할 수 있습니다. 서보 신호 핀은 Arduino 디지털 핀에 연결됩니다. 접지 및 전원 - 분명히 접지 및 전원에 해당하며 이는 모든 서비스에 공통될 수 있습니다. 3선 서보 루프에서는 검정색 또는 갈색이 접지되고 중간은 일반적으로 빨간색 +5V이며 마지막으로 흰색 또는 노란색은 신호입니다. 소프트웨어 관점에서 볼 때 제어는 매우 간단합니다.

서보 마이서보; // Arduino myservo.attach(9)의 핀 9에 서보를 연결합니다. // 90° 위치로 회전 myservo.write(90);

대부분의 서보는 샤프트를 180° 회전할 수 있으며, 90°가 평균 위치입니다. Arduino 보드에 대한 서보 연결을 단순화하기 위한 다양한 솔루션이 있습니다. 가장 일반적인 것은 Sensors Shield입니다. Uno에 설치하고 서보용 터미널에 전원을 공급하면 해당 커넥터를 Uno에 직접 연결할 수 있습니다.

배터리

또 다른 중요한 문제는 영양입니다. 하나의 전력선을 통해 전체 시스템에 전원을 공급할 수 있는 고급 보드가 있고 서보 모터가 컨트롤러의 작동을 방해하지 않는다면 하나의 소스로 해결할 수 있습니다. 선택의 폭이 넓습니다. 물론 가장 좋은 것은 무선 모델용 Li-Ion/Li-Po 연탄입니다. 그러나 그들은 또한 적절한 것이 필요합니다 충전기. 더 간단한 컨트롤러(Uno/Due/Nano)가 있는 경우 9V "Krona"와 같이 별도로 전원을 공급하고 서보를 강력한 주 배터리에 연결할 수 있습니다. 이렇게 하면 서보는 확실히 충분한 전력을 갖게 됩니다. 경우에 리튬 배터리과방전이 발생하지 않도록 평소보다 더욱 주의 깊게 전압을 모니터링해야 합니다(허용 전압을 명확히 해야 함). 특정 유형배터리). 이를 위해 나중에 설명할 슬레이프니르(Sleipnir) 로봇에도 작은 디지털 전압계가 부착되어 있습니다.

DIY 로봇 딱정벌레

전부

  • Arduino Uno 컨트롤러: 1150 문지름
  • 세 개의 서보 모터. 나는 HXT500, 200 문지름을 사용했습니다. 조각당
  • 스위치가 있는 크로나용 배터리 칸: 50 문지름.
  • 배터리 "크로나": 145 문지름.
  • IR 수신기: 90 문지름.
  • 직경이 약 1.5mm인 강철 와이어. 예를 들어 깨진 거품기를 사용하여 달걀을 휘저었습니다.

합계 : 2035 문지름

드미트리Dzz: Arduino Uno 컨트롤러를 기반으로 원격 조종이 가능한 작은 다리 6개 달린 로봇 버그를 만들어 보도록 여러분을 초대하고 싶습니다. 다리는 1 자유도를 가지며 일반 TV 리모콘을 사용하여 제어됩니다.

이것은 값 비싼 모스크바 상점의 가격이라고 말해야합니다. 중국 온라인 상점에서는 이 모든 비용이 절반 정도입니다. 배달을 계산합니다. 내 경험상 2주에서 3개월 정도 기다려야 하는 것은 사실이다.

더 쉬운 방법은 생성자 세트를 사용하는 것입니다. 왜냐하면 첫 번째 단계에서는 하나의 컨트롤러만으로는 충분하지 않기 때문입니다. 이제 많은 상점에서 이러한 세트를 제공합니다. 예를 들어, 멋진 온라인 상점인 "Amperka"가 있습니다. 여기에서는 내용과 가격이 다른 여러 유사한 구성 세트가 제공됩니다. 가장 간단한 것만으로도 충분했습니다 - "Matryoshka X". Arduino Uno 컨트롤러, 컴퓨터 연결용 USB 케이블, 프로토타이핑 보드( 대체불가한 것!), 점퍼, LED, 저항기 및 기타 작은 것들 세트.

같은 상점에는 러시아어로 번역된 멋진 짧은 비디오 튜토리얼도 볼 수 있는 "Wiki" 섹션이 있습니다. 꼭 확인해 보세요. 물론, 그들이 당신을 도와주려고 노력할 포럼도 있습니다.

필요한 도구:

  • 납땜 인두 및 납땜에 필요한 모든 것. 납땜을 많이 할 필요도 없고 특별한 기술도 필요하지 않습니다.
  • 뜨거운 글루건과 막대;
  • 와이어 작업용 펜치.

다 모았다면 시작해 보세요!

제어

첫 번째 단계로 넘어가겠습니다. 리모콘과 상호 작용하는 방법을 배우고 일부 버튼을 누르는 코드를 찾아야 합니다. 이 코드는 나중에 로봇 제어 스케치에 유용하게 사용됩니다.

이 단계에서는 IR 수신기도 필요하며 프로토타이핑 보드가 있으면 좋을 것입니다. 대부분의 IR 리모컨은 36kHz, 38kHz 또는 40kHz(Panasonic, Sony)의 반송파 주파수에서 작동합니다. Sharp(56kHz), Bang & Olufsen(455kHz)의 리모콘 및 더 이국적인 제품은 예외입니다. 그러므로 우리는 꽤 누구라도 그럴 것이다 36, 38 또는 40kHz의 IR 수신기. 주파수는 신호의 반송파 주파수와 정확하게 일치하지 않을 수 있습니다. 이 경우 수신기의 감도가 감소하지만 실제로 TSOP2136 IR 수신기(36kHz - 마지막 두 자리는 주파수)와 Sony 리모컨(40kHz)을 사용하여 불편함을 느끼지 못했습니다.

따라서 IR 수신기 TSOP21xx, TSOP22xx, TSOP312xx는 대부분의 리모콘에 적합합니다. 마지막 두 자리는 36, 37, 38 또는 40이 될 수 있습니다. IR 수신기를 켜기 전에 접점 배선을 확인하십시오. +5V(전원), GND(접지), Vs(출력) 세 개만 있습니다. 그림과 같이 회로를 조립해 보겠습니다(TSOP2136의 경우 배선).


보시다시피 IR 수신기의 출력을 컨트롤러 A0의 아날로그 입력에 연결했습니다.

스케치 코드는 다음과 같습니다.

#include "IRremote.h" // IR 수신기가 연결된 // 컨트롤러의 아날로그 입력: const int IR_PIN = A0; // IR 수신기 객체 생성: IRrecv irrecv(IR_PIN); void setup() ( Serial.begin(9600); Serial.println("ready"); // IR 신호 듣기 시작: irrecv.enableIRIn(); ) void loop() ( // 결과 구조 설명, // // 수신 및 디코딩된 // IR 명령이 배치됩니다: decode_results results // IR 명령이 수신되고 // 성공적으로 디코딩된 경우 // 수신된 코드를 컨트롤러의 직렬 포트로 출력합니다. (irrecv.decode (&results)) ( Serial.println(results.value); irrecv.resume(); ) )

이 스케치는 다양한 IR 리모컨의 신호를 디코딩하는 특수 라이브러리 IRremote.h를 사용합니다. 이 도서관은 프로젝트 열기, https://github.com/shirriff/Arduino-IRremote 페이지에서 다운로드할 수 있습니다. 그리고 이를 프로젝트에 연결하려면 다음 세 단계를 수행해야 합니다.

  • 라이브러리 디렉토리를 Arduino IDE 설치 디렉토리에 있는 라이브러리 디렉토리에 복사합니다.
  • IDE를 다시 시작하십시오.
  • 스케치 시작 부분에 #include "IRremote.h" 줄을 추가하세요.

이제 스케치에는 IR 신호 디코딩 기능을 사용할 수 있습니다. 그러나 수신된 코드를 보려면 Serial 개체도 사용합니다. 도움을 받아 직렬 포트(동일한 USB 케이블)를 통해 코드를 컴퓨터로 전송합니다. 설정 함수에서 Serial 객체를 초기화합니다. "9600"은 9600보드(데이터 전송에 사용되는 속도)입니다. 초기화 후에는 println 함수를 사용하여 직렬 포트에 쓸 수 있습니다. 컴퓨터의 Arduino IDE에서 이 출력 결과를 보려면 도구 → 직렬 모니터(Ctrl + Shift + M) 메뉴 항목을 선택하세요. 9600보드로 설정되어 있는지 확인하세요.

따라서 컨트롤러는 USB 케이블을 통해 전원을 공급받고 이를 통해 데이터를 전송합니다. 스케치를 로드하고 직렬 모니터를 시작한 다음 리모컨 버튼을 누르십시오. 시리얼 모니터 창에 코드가 나타나야 합니다. 원격 제어 프로토콜은 다르며 때로는 하나의 코드일 수도 있고 때로는 여러 개일 수도 있습니다. 어떤 경우든 언제든지 각 리모컨 버튼에 고유한 코드를 선택할 수 있습니다.

13개의 리모컨 버튼이 필요합니다. 나는 다음을 사용했습니다 :

  • 1 - 왼쪽으로 부드럽게 회전합니다.
  • 2 - 전진 이동;
  • 3 - 오른쪽으로 부드럽게 회전합니다.
  • 4 - 그 자리에서 좌회전하세요.
  • 5 - 중지;
  • 6 - 그 자리에서 우회전;
  • 7 - 우회전하여 뒤로 이동;
  • 8 - 후진 이동;
  • 9 - 좌회전으로 뒤로 이동;
  • 파란색 버튼 - 매우 느림;
  • 노란색 - 느림;
  • 녹색 - 빠름;
  • 빨간색 - 매우 빠릅니다.

이 버튼의 코드를 적어 두십시오. 나중에 로봇 제어 스케치에 필요할 것입니다.

이동 알고리즘

로봇 제어 스케치는 당사 프로젝트 페이지(bit.ly/1dEwNDC)에서 확인하실 수 있습니다. 리모콘에서 누른 버튼의 코드에 대한 상수 값을 리모콘의 코드로 변경하는 것을 잊지 마십시오(ir_command_codes.h 파일의 상수 IR_COMMAND_XXX_CODES).

스케치를 자세히 살펴보지는 않겠습니다. 코드에 있는 주석만으로도 충분하다고 생각하지만, 한 가지 질문은 여전히 ​​고려해 볼 가치가 있습니다.

곤충의 움직임은 매우 흥미롭습니다. 그리고 이 딱정벌레들은 모두 땅에 떨어지기 직전이지만 어떤 이유로 항상 안정적입니다. 언제든지 적어도 세 개의 다리(한쪽에 2개, 다른쪽에 1개)가 표면에 서 있습니다. 그리고 이 다리들이 딱정벌레를 하나의 목표쪽으로 당기는 동안 다른 세 개는 이 동작을 반복하기 위해 당겨집니다. 우리의 임무는 비슷한 일을 하는 것입니다.

우리의 로봇 딱정벌레에는 움직임에 수직으로 일렬로 배열된 세 개의 서보 모터가 있습니다. 왼쪽 및 오른쪽 서보모터의 경우 샤프트 축이 위쪽을 향하고 중앙 서보모터의 경우 샤프트 축이 앞쪽을 향합니다. 예를 들어 왼쪽 서보의 작업은 왼쪽 앞과 왼쪽 뒤의 두 다리를 한 번에 펌핑하는 것입니다. 그건 그렇고, 그들은 서로 단단히 연결되어 있으며 이 서보의 로커에 붙어 있습니다. 중앙 서보의 임무는 딱정벌레의 왼쪽이나 오른쪽을 들어 올리는 것입니다. 따라서 단일 U자형 부품인 중앙 왼쪽 및 오른쪽 다리가 이 엔진의 로커에 부착됩니다.

스케치는 로봇이 전진, 후진, 부드러운 회전 및 제자리 회전을 보장해야 합니다. 딱정벌레의 속도도 조절하고 싶습니다. 이러한 움직임을 프로그래밍 방식으로 설명하려면 수학이 필요합니다. 다이어그램을보세요.


파란색 원은 표면에 서 있는 로봇 딱정벌레의 다리를 나타내고 흰색 원은 공중에 있는 다리를 나타냅니다. 전진이나 후진 시에는 왼쪽과 오른쪽 서보 모터가 정확히 동일하게 움직여야 한다는 점에 유의하세요. 그리고 제자리에서 회전할 때 엔진은 서로 다른 방향(대칭)으로 회전해야 합니다. 또 다른 흥미로운 점은 중앙 서보모터의 위상에서만 정방향 및 역방향 이동이 다르다는 것입니다.

그렇다면 이것은 어떻게 구현됩니까? 우리는 컨트롤러가 지속적으로 루프 기능을 호출한다는 것을 기억합니다. 이는 이 함수에서 서보의 현재 위치를 결정하고 이를 이 위치로 설정하는 코드를 배치해야 함을 의미합니다. 각 서보모터는 진동 운동을 수행해야 합니다. 다음 공식을 사용하여 시간 t에서 서보모터의 위치를 ​​계산할 수 있습니다.

X = 죄(2πt/T),

여기서 X는 서보모터의 원하는 위치이고, A는 진동의 진폭, T는 진동의 주기입니다.

따라서 시간 t의 순간에 따라 -A에서 +A까지의 범위에서 X 값이 변경됩니다. 서보 모터는 0°에서 180°까지 위치를 지정할 수 있습니다. 그러므로 90°의 "0" 위치를 중심으로 진동하는 것이 더 좋습니다. 그리고 진폭이 30°이고 90° 위치 주변에서 1초 주기의 진동을 제공하려는 경우 공식은 다음 형식으로 변환됩니다.

X = 90 + 30 죄(2πt/1000),

여기서 t는 진동이 시작된 이후 경과한 시간(밀리초)입니다. 로봇 딱정벌레의 속도를 제어하기 위해 진동 주기를 변경할 수 있습니다. 크기가 클수록 속도는 느려집니다.

이제 위에 작성된 공식이 아직 완성되지 않았기 때문에 다시 한 번 다이어그램으로 돌아가겠습니다. 왼쪽 및 오른쪽 서보모터의 동기 또는 역이동을 보장하는 방법은 무엇입니까? 중앙 서보 모터의 위상을 변경하는 방법은 무엇입니까? 공식에 진동 단계를 추가해야 합니다. 예를 들어, 오른쪽 엔진에 대해 사인의 인수를 π만큼 이동하면 왼쪽 엔진에 대해 역위상으로 작동하게 됩니다. 즉, 제자리에서 회전하는 데 필요한 방식입니다. 이제 공식은 다음과 같습니다.

X = 90 + 30sin(2πt/1000 + Φ),

여기서 Φ는 진동 위상이고 값은 0에서 2π 사이입니다.

각 이동 유형에 대해 서보 모터의 진동 단계가 무엇인지 이해하려면 표를 참조하십시오.

집회

이제 프로토타이핑 보드에 로봇을 조립하고 제어 스케치를 업로드해 보겠습니다.

이것은 매우 중요한 단계조립 전. USB 케이블을 분리하고 크로나 배터리를 사용하여 브레드보드에 전원을 공급해 보세요. 움직임의 모든 단계를 확인하고 모든 것이 작동하는지 확인하십시오. 로봇을 조립한 후에는 무엇이든 변경(예: 작동하지 않는 서보모터 교체)하기가 더 어렵습니다.


이제 어셈블리 자체로 넘어 갑시다. 기초적인 내하중 요소- 배터리실입니다. 칸막이를 사용하는 것이 좋습니다 폐쇄형항상 스위치가 있습니다.

딱정벌레 부분을 고정하는 가장 쉬운 방법은 글루건을 사용하는 것입니다. 서보 모터로 시작하십시오. 불필요한 고정 이어를 제거하고 기계를 서로 연결하십시오. 그런 다음 세 개의 "serva" 어셈블리를 배터리실 덮개에 붙입니다. 배터리를 교체하려면 배터리함을 자유롭게 열어야 한다는 점을 잊지 마십시오.

가장 쉬운 방법은 컨트롤러를 구획에 붙이는 것이지만 Arduino Uno를 버그에 영원히 주어야 하기 때문에 이 옵션이 별로 마음에 들지 않습니다. 따라서 생활이 복잡해지고 Arduino 커넥터를 사용하여 배터리 함을 부착할 수 있습니다. 구획 바닥에 핀 사이의 간격이 2.54mm인 핀 커넥터를 붙입니다. 디지털 핀 8-11 영역의 컨트롤러 소켓에 맞도록 배치해야 합니다. 어쨌든 아직은 필요하지 않습니다. 커넥터가 없으면 U자 모양의 클립을 사용하면 됩니다.

배터리실에서 나오는 전선은 Vin 핀과 인접한 GND에 연결되어야 합니다. 극성을 혼동하지 마십시오! Vin의 플러스 "크라운", GND의 마이너스. Arduino 커넥터와 전선의 안정적인 접촉을 보장하려면 전선 끝 부분을 더 두껍게 주석 처리하면 되지만 저는 짧은 클립 조각을 플러그로 사용했습니다. 그리고 납땜 부위를 열수축 튜브로 덮었습니다.


서보 드라이브 케이블의 커넥터를 잘라내고 전원선(+5V - 일반적으로 빨간색, GND - 검정색 또는 갈색)을 결합하여 컨트롤러의 5V 소켓과 인접한 GND에 연결해야 합니다. 잠시 후에 연결하겠습니다. 제어 신호 와이어(보통 노란색)는 컨트롤러의 디지털 출력으로 출력됩니다. 왼쪽 서보 모터는 핀 2로, 중앙 서보 모터는 핀 4로, 오른쪽 서보 모터는 핀 7로 출력됩니다.

IR 수신기의 "+" 및 "-"는 Arduino 커넥터(5V 및 인접한 GND)에 간단히 연결할 수 있습니다. 사실, 반으로 구부려 두께를 두 배로 늘립니다. 이전에 연결된 서보 모터의 전원 와이어를 IR 수신기의 동일한 전원 다리에 납땜합니다. IR 수신기 신호의 출력은 A0 컨트롤러의 아날로그 입력에 도달할 가능성이 낮으며, 이를 와이어로 늘려야 합니다.

다리를 만드는 몇 가지 팁. 먼저 왼쪽 및 오른쪽 "앞뒤" 다리를 준비합니다. 대칭인지 확인하십시오(길이와 굽힘 각도 모두에 주의하십시오). 서보가 "0" 위치(90°)에 설정되어 있는지 확인한 후에만 다리 접착을 시작하십시오.

중간 다리 쌍을 마지막에 설치하는 것이 좋습니다. 먼저 가운데 다리를 길게 만든 다음, 설치 후 원하는 길이로 다듬어 주는 것이 좋습니다. "0" 위치에서는 6개 다리가 모두 표면에 있어야 합니다. 15°의 진폭으로 가운데 다리를 스윙하는 것은 전후 회전을 방해해서는 안 됩니다.

다음은 무엇입니까?

Robozhuk은 가장 인기 있고 접근하기 쉬운 컨트롤러 중 하나를 기반으로 하는 기성 모바일 플랫폼입니다. 프로젝트는 공개되어 있습니다: https://github.com/beetle-ringo/arduino. GitHub에서 포크(브랜치)를 만들고 자신만의 기능을 추가해보세요. 상상력을 자유롭게 발휘하세요. IR LED를 추가하면 로봇이 로봇 전투 준비를 완료합니다. 거리 측정기, 촉각 센서, 자이로스코프를 연결하세요. 로봇에게 장애물을 피하거나 선을 따라 걷도록 가르치고 웹캠을 설치해 보세요. 백만 가지 아이디어가 있을 수 있으며 언제든지 가장 흥미로운 아이디어를 선택할 수 있습니다.

로봇 슬레이프니르

전부

  • Arduino Uno Dagu 스파이더 로봇 컨트롤러: 2530 문지름.
  • 서보 드라이브 SG90 9g(16개) 1150 문지름
  • 배터리 LiPo 배터리 팩, 7.4V, 1800mAh RUR 490
  • 라디오 모듈 4핀 Bluetooth RF 트랜시버 RUR 270
  • 전압 표시기(옵션) DC 3.3~30V 빨간색 LED 패널 미터 RUR 100
  • 알루미늄 코너. 가장 가까운 건설 시장에서는 135 루블입니다.
  • 볼트와 너트. 가장 가까운 벼룩시장에서는 35루블입니다.

합계 : 4710 문지름.

*구성 요소는 서로 다른 시점에 구매되었으며 많은 항목을 최적화할 수 있습니다.

포코노코:비표준 구성인 다리가 8개인 2DOF 로봇을 조립해 보겠습니다. 2DOF 다리는 프로그래밍하기가 훨씬 쉽고 사용하지 않는 서보도 많이 있습니다. 그리고 가장 중요한 것은 오딘 신의 다리가 8개 달린 말인 슬레이프니르(항상 꿈꿔왔던 것입니다!)를 기리기 위해 이름을 지을 수 있다는 것입니다.

우리 슬레이프니르는 양쪽에 4개의 다리와 2개의 관절을 갖고 있습니다. 각 관절은 서보 드라이브입니다. 이는 측면당 8개의 서보를 의미합니다. 단순화를 위해 말 한쪽의 8개 관절이 모두 동일한 평면에서 회전합니다. 이것이 전혀 필요하지는 않지만. 또한 한쪽 다리가 약간 "체스판"이어서 인접한 두 다리가 서로 닿을 수 없으면 더 좋을 것이며 더 넓은 보폭과 질주를 할 수 있게 될 것입니다.


깔끔하고 기능적이지만 가장 저렴한 솔루션과는 거리가 먼 솔루션은 다수의 서보 연결에 최적화된 맞춤형 컨트롤러 보드를 사용하는 것입니다. 나는 Dagu Spider Robot Controller를 발견했습니다. 이것은 동일한 Arduino Mega이지만 미리 납땜된 3핀 핀 커넥터가 있는 보드에 있어 쉴드 없이 48개의 서보를 즉시 연결할 수 있습니다. Arduino의 다중 다리 로봇에 이상적입니다.

제어

우리는 블루투스를 통해 제어됩니다. 이를 위한 다양한 하드웨어 솔루션이 있습니다. 이는 UART 직렬 인터페이스(일반 COM 포트와 유사하며 신호 레벨이 5V만 있음)가 있는 차폐 및 별도의 카드입니다. UART 인터페이스를 갖춘 가장 작은 카드가 가장 실용적인 것 같았습니다. Arduino 포트의 해당 UART/직렬 핀에 연결합니다. 두 가지 뉘앙스에 주목해 보겠습니다. Uno/Due/Nano 등에 이러한 포트는 하나만 있으며 USB를 통한 펌웨어에도 사용됩니다. 따라서 펌웨어 업데이트 중에는 Bluetooth 모듈을 꺼야 할 수도 있습니다. 두 번째 뉘앙스 - 모듈의 RX 핀이 Arduino의 TX 핀에 연결되고 TX가 RX에 연결된다는 것을 잊지 마십시오. UART에서는 이러한 일이 발생합니다.

Bluetooth 프로그래밍은 서보보다 더 복잡하지 않습니다. 데이터를 바이트 단위로 읽을 수 있으며 이를 사용합니다.

문자 cmd; Serial.begin(9600); if (Serial.available()) cmd = Serial.read();

Arduino Mega를 사용하고 Bluetooth가 두 번째 포트에 연결된 경우 Serial 대신 Serial1이 기록됩니다. 꼭 블루투스를 사용할 필요 없이 USB를 통해 로봇을 직접 제어할 수 있다는 점은 주목할 만하다. 그리고 위의 코드에서는 아무것도 바뀌지 않습니다! 이것은 단지 직렬 포트로 작동하는 것일 뿐이며, 거기에 BT 송신기가 있는지 USB 직렬 변환기가 걸려 있는지는 우리에게 중요하지 않습니다.

블루투스의 반대편

최대 편리한 방법연결은 표준 Linux 유틸리티입니다. 작업하려면 sdptool, rfcomm(Ubuntu 저장소에 있는 bluez 패키지의 일부) 유틸리티와 minicom(패키지 이름)이 필요합니다. 이러한 유틸리티 사용에 대한 지침은 인터넷에서 찾을 수 있습니다.

이동 알고리즘


육각형의 경우 가장 간단한 보행은 다음과 같습니다. 다리는 세 개의 다리로 구성된 두 그룹으로 나뉘며, 그룹 중 하나는 완전히 땅에 있고 다른 그룹은 공중에 있으며 앞으로 재배치됩니다. 이것은 가능한 유일한 보행과는 거리가 멀다. 공중에는 발 두 개만 들고 있을 수도 있고, 한 발만 들고 나머지 네 개나 다섯 개는 땅에 딛고 있을 수도 있습니다. 팔각류의 보행도 많습니다. 우리는 네 개의 다리로 구성된 두 그룹이 있는 가장 간단한 것을 선택하겠습니다.

그렇다면 16개의 서보와 선택된 보행으로 작업하려면 어떻게 해야 할까요? 정답은 역기구학(IR)에 대해 읽어보는 것입니다. 기사의 길이 때문에 주제를 폭넓게 확장할 수는 없지만 인터넷에는 많은 자료가 있습니다. 즉, IR은 우주의 시스템이 원하는 위치를 차지하도록 필요한 제어 신호를 찾는 문제를 해결합니다. 다리의 경우 이는 발이 닿아야 하는 지점의 좌표를 기반으로 이를 위해 설정해야 하는 서보의 각도가 결정되어야 함을 의미합니다. 그리고 발의 좌표를 조절함으로써 몸의 위치를 ​​조절할 수 있습니다. 2DOF 다리가 있고 축이 평행하므로 발은 항상 같은 평면에서 움직입니다. 이 경우 IR 문제는 2D 공간으로 축소되어 크게 단순화됩니다.

각 다리의 좌표 O의 로컬 원점을 상부 서보의 샤프트, 즉 엉덩이로 설정합니다. 그리고 우리는 발이 닿아야 하는 지점 A의 좌표를 가지고 있습니다. 그러면 두 원의 교차점을 찾는 문제를 해결해야 한다는 것을 쉽게 알 수 있습니다(한쪽 다리 다이어그램 참조, 바로 옆에 있음). 오른쪽 다리이 설명되어 있습니다). 원 중 하나를 선택하여 원의 교차점 B를 찾은 후 데카르트 좌표를 극좌표로 변환하여 필요한 각도를 쉽게 계산할 수 있습니다. 코드에서 이 문제에 대한 해결책은 다음과 같습니다.

부동 A = -2 * x; float B = -2 * y; float C = sqr(x) + sqr(y) + sqr(hipLength) - sqr(shinLength); float X0 = -A * C / (sqr(A) + sqr(B)); float Y0 = -B * C / (sqr(A) + sqr(B)); float D = sqrt(sqr(hipLength) - (sqr(C) / (sqr(A) + sqr(B)))); float mult = sqrt(sqr(D) / (sqr(A) + sqr(B))); float ax, ay, bx, by; 도끼 = X0 + B * 다중; bx = X0 - B * 다중; ay = Y0 - A * 다중; = Y0 + A * 다중; // 또는 다른 교차점의 경우 bx floatjoinLocalX = ax; // 또는 다른 교차점의 경우 floatjoinLocalY = ay; float hipPrimaryAngle = polarAngle(jointLocalX,jointLocalY); float hipAngle = hipPrimaryAngle - hipStartAngle; float shinPrimaryAngle = polarAngle(x -jointLocalX, y -joinLocalY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

여기서 x와 y는 발로 도달해야 하는 지점의 좌표입니다. hipStartAngle - "엉덩이"가 처음에 회전하는 각도(서보가 중간 위치에 있음), 마찬가지로 shinStartAngle. 그건 그렇고, 이 계산에서 각도는 분명히 라디안 단위이지만 서보 객체에는 각도 단위로 전송되어야 합니다. 이 부분을 포함하여 작동하는 전체 펌웨어 코드는 GitHub에 게시되어 있습니다. 기사 마지막에 있는 링크를 참조하세요. 이것은 IR의 일부이지만 모든 구간에서 이 IR을 사용하려면 좀 더 간단한 코드가 필요합니다(legReachTo(),legWrite() 함수 참조). 보행을 실제로 구현하는 코드도 필요합니다. 한 다리 세트를 "뒤로" 이동(로봇이 앞으로 이동하도록)하고, 다른 다리 세트는 올려서 다음 단계를 위해 앞으로 이동합니다. stepForward() 함수를 참조하세요. 주어진 매개변수를 사용하면 한 단계만 수행됩니다. 그런데 이러한 매개 변수를 사용하면 함수 이름에도 불구하고 한 단계 뒤로 물러날 수 있습니다. 이 함수가 루프에서 호출되면 로봇이 앞으로 나아갑니다.

이제 명령을 받고 해석합니다. 프로그램에 상태를 추가해 보겠습니다.

열거형 상태( STOP, FORWARD, BACKWARD, FORWARD_RIGHT, FORWARD_LEFT );

그리고 주 실행 루프 loop()에서 우리는 현재 상태(상태 변수)를 보고 앞으로 이동하는 경우(회전 유무에 관계없이) stepForward()를 당기고 다시 stepForward()를 가져오지만 음수 인수 xamp를 사용하여 뒤로 이동해야 하는 경우. 회전은 LegWrite()에서 처리되며, 우회전의 경우 오른쪽 다리는 그대로 서 있습니다(왼쪽 다리는 행에 있음). 여기에 그런 말 탱크가 있습니다. 잔인하지만 매우 간단하고 작동합니다. 부드러운 회전은 3DOF 다리로만 수행할 수 있으며 이에 대한 예는 buggybug 저장소에서 볼 수 있습니다.

스위치(상태) ( 케이스 FORWARD: 케이스 FORWARD_RIGHT: 케이스 FORWARD_LEFT: stepForward(h, dh, xamp, xshift); break; 케이스 BACKWARD: stepForward(h, dh, - xamp, xshift); break; )

문자 명령; while (Serial1.available()) 명령 = Serial1.read(); 스위치(명령) ( 케이스 "w": 상태 = FORWARD; 중단; 케이스 "s": 상태 = BACKWARD; 중단; 케이스 "d": 상태 = FORWARD_RIGHT; 중단; 케이스 "a": 상태 = FORWARD_LEFT; 중단; 기본값 : 상태 = 중지;

이것은 펌웨어의 주요 사항이 끝나는 곳이고 나머지는 모든 종류의 작은 것입니다. 아마 하나 더 있을 텐데도 중요한 점- 서보를 미세 조정하는 능력. 가장 조심스럽게 조립하더라도 모든 서보에 90° 회전을 명령하면 일부 서보는 여전히 약간 어긋난 각도를 갖게 됩니다. 그러므로 이를 조정할 수 있는 능력이 필요합니다. 이 작업을 수행한 방법은 hipsWrite() 및 shinsWrite() 메서드와 hipsTune 및 shinsTune 미세 조정 배열에서 볼 수 있습니다.

집회

이러한 디자인에는 특별한 것이 필요하지 않습니다. 적절한 두께의 플렉시 유리 시트 (가장 가까운 하드웨어 벼룩 시장에서 구입)와 부품을 잘라내는 퍼즐 또는 쇠톱이 적합합니다. 물론 구멍을 뚫는 드릴도 있습니다. 플렉시 유리 대신 합판을 사용할 수 있습니다. 그런 다음 최종 구조에 버너를 사용하여 기억에 남는 비문을 만들 수도 있습니다. 알루미늄 시트나 모서리를 사용할 수도 있습니다. Sleipnir에서는 1cm 리브가 있는 알루미늄 코너(건설 슈퍼마켓 어딘가에서 구입)를 사용하는 방식을 따랐습니다.


기본은 직사각형 프레임입니다. 사지 - 4cm 줄무늬. 작은 볼트와 너트를 많이 비축하는 것도 가치가 있습니다. 모서리를 필요한 부분으로 자르고, 서보용 홈을 잘라내고, 장착 볼트와 나사용 구멍을 뚫습니다. 설계 더 나은 시간설명하기보다는 보여주기. 크기는 무엇이든 가능하며 로봇은 다양해야 합니다. 하지만 기억하세요: 다리가 길수록 서보가 더 많은 레버를 밀어야 하고 더 많은 하중을 받게 됩니다. 돌이킬 수 없을 정도로, 심지어 부서지기까지. 하지만 4~5cm는 문제가 되지 않습니다.

저예산 경량 로봇의 경우 팔다리에 대한 별도의 연결 조인트를 사용하지 않고 전체 하중이 전적으로 서보 드라이브 샤프트에 전달됩니다. ~에 낮은 체중이것은 전혀 중요하지 않습니다. 그리고 언제 더 많은 무게금속 기어와 볼 베어링 샤프트가 있는 서보를 고려해 볼 가치가 있습니다.

각 서보에는 일반적으로 다양한 용도로 샤프트에 나사로 고정할 수 있는 두 개의 나사와 부착물 세트가 함께 제공됩니다. 최선의 선택은 서보에 바를 부착할 수 있는 단일 "혼"(또는 혼)입니다. 따라서 두 서보의 축이 하나의 바에 부착되고 바가 "힙"이 됩니다. 이 경우 하나의 서보는 몸체에 부착되고 다른 하나는 아래쪽 다리의 일부가 됩니다. 길이를 늘리거나 팔다리를 더 흥미롭게 만들기 위해 다른 막대를 부착하는 것이 좋습니다. 약간의 힘든 작업 - 플랫폼이 준비되었습니다(드라이버, 키, 핀셋, 와이어 절단기 등의 편리한 세트로 프로세스 속도가 크게 향상됨).

다음은 무엇입니까?

전체 프로젝트는 https://github.com/poconoco/sleipnir에서 확인할 수 있습니다. 나는 가장 비실용적인 구성 중 하나를 설명했습니다. 2DOF 다리가 많고 키가 크고 좁으며 옆으로 넘어지기 쉽습니다. 3DOF 다리를 갖춘 더 나은 로봇을 만들어 보세요. 4DOF 다리 포함. 발톱이나 턱이 있습니다. 3DOF 역기구학의 예로, buggybug 저장소를 참조할 수 있습니다. 거기에 헥사포드 펌웨어가 있습니다. 블루투스 대신 거리 센서를 장착해 제어 로봇이 아닌 지능형 로봇을 만들고, 로봇에게 벽이나 장애물을 피하도록 가르칠 수도 있다. 이런 센서를 서보 드라이브에 올려 회전시키면 거의 소나 수준으로 해당 지역을 스캔할 수 있다.

친애하는 독자 여러분, 우리는 Arduino 기반 로봇 제작에 관한 일련의 기사를 공개합니다. 독자는 초보자이고 해당 주제에 대한 기본 지식만 가지고 있다고 가정합니다. 우리는 가능한 한 상세하고 명확하게 모든 것을 제시하려고 노력할 것입니다.

문제를 소개하면 다음과 같습니다.

개념부터 시작해 보겠습니다. 우리는 길을 따라 마주치는 모든 장애물을 피하면서 방 안을 독립적으로 이동할 수 있는 로봇을 원합니다. 임무가 설정되었습니다.

이제 우리에게 필요한 것이 무엇인지 알아 보겠습니다.

  1. 플랫폼(본체). 여기에는 옵션이 있습니다. 모든 것을 직접 수행하거나, 부품을 구매하여 조립하거나, 기성품을 구매하는 것입니다. 원하는 것을 선택하세요

키트에는 일반적으로 플랫폼, 2개의 구동 휠(캐터필러)용 모터 1개, 배터리용 칸이 포함되어 있습니다. 4륜 모터를 갖춘 전륜 구동 옵션이 ​​있습니다. 초보자의 경우 탱크형 플랫폼을 사용하는 것이 좋습니다.

두 개의 구동 바퀴와 세 번째 지지 바퀴.

  1. 다음으로 거리 측정기가 필요합니다. 소나(거리 측정기, 초음파 모듈이라고도 함) 거리 측정기로서 처음에는 초음파와 적외선 중에서 선택되었습니다. 초음파 특성이 훨씬 더 좋고(최대 범위는 약 4-5미터, 대 30-60cm) 가격은 거의 동일하므로 선택은 초음파로 떨어졌습니다. 가장 일반적인 모델은 HC-SR04입니다.

  1. 모터 드라이버.

어떻게 해야 하나요? 가장 먼저 떠오르는 것은 마이크로 컨트롤러의 출력에 트랜지스터를 배치하고 여기에서 모터에 전원을 공급하는 것입니다. 이것도 물론 좋은데, 엔진을 반대 방향으로 돌리려고 하면 안 되더라구요... 그런데 H-bridge가 조금 더 복잡한 회로한 쌍의 트랜지스터보다. 하지만 이 경우 기성 집적 회로 형태로 된 것이 많기 때문에 바퀴를 다시 만들 필요가 없다고 생각합니다. 우리는 기성품을 구입할 것입니다. 게다가 가격도 2~3달러... 넘어가자. 이러한 목적을 위해 우리는 L293D 칩을 구매하거나 이를 기반으로 하는 모터 쉴드를 구매하는 것이 좋습니다.

L298N 칩의 모터 실드

  1. 사운드 생성 - 피에조 이미터

가장 간단한 옵션사운드 생성은 피에조 이미 터를 사용하는 것입니다.

피에조세라믹 이미터(피에조 이미터)는 압전 효과를 사용하는 전기음향 사운드 재생 장치입니다. (기계적 응력의 영향으로 유전 분극 발생 효과(직접 압전 효과). 또한 역 압전 효과(전기장의 영향으로 기계적 변형이 발생함)도 있습니다.

직접 압전 효과: 압전 라이터에서 스파크 갭에 걸쳐 고전압을 얻습니다.

역압전 효과: 압전 이미터에서(고주파에서 효과적이며 작은 크기를 가짐);)

피에조 이미 터는 다양한 용도로 널리 사용됩니다. 전자 기기- 알람시계, 전화기, 전자 장난감, 가전제품. 압전 세라믹 이미터는 압전 세라믹 층이 적용된 금속판으로 구성되며 외부에는 전도성 코팅이 있습니다. 플레이트와 스프레이는 두 개의 접점입니다. 압전 이미터는 압전 마이크나 센서로도 사용할 수 있습니다.

처음에는 이것이 우리에게 필요한 전부입니다. 먼저, 이러한 부품들을 개별적으로 조립하고 작동시키는 방법을 별도의 강의 형태로 살펴보겠습니다.

강의 2. 초음파 거리 측정 센서(거리 측정기)로 작업하기

3과. L298N 기반 Arduino 및 Motor Shield

레슨 4. 사운드 재생 - 피에조 이미터

Lesson 5. 로봇 조립 및 프로그램 디버깅