이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.
Wall-E 로봇 복제품
Wall-E 복제 로봇을 위한 로봇 및 컨트롤러 코드. 로봇에 대한 자세한 정보는 https://wired.chillibasket.com/3d-printed-wall-e/ 를 방문하세요.
<br />
<br />
1. Arduino 코드 (wall-e)
- 애니메이션 큐: 로봇이 수행해야 할 다음 서보 움직임을 추적합니다.
- 무작위 움직임 생성기: 로봇이 자율적으로 움직이고 생동감 있게 보이도록 합니다.
- 모든 서보 모터의 속도 제어: 부드러운 가속 및 감속을 가능하게 합니다.
- 비차단 직렬 파싱: 로봇의 움직임을 원격으로 제어할 수 있습니다.
- 전압 분배기 회로를 사용한 배터리 잔량 모니터링.
로봇의 모터와 서보를 제어하는 메인 프로그램. 기능은 다음과 같습니다:
<br />
2. Raspberry Pi 웹 서버 (web_interface)
- JavaScript 조이스틱: 로봇의 움직임을 쉽게 제어할 수 있습니다.
- 모든 서보 모터의 수동 제어.
- 로봇이 수행할 수 있는 움직임 애니메이션 목록.
- 재생할 수 있는 사운드 목록.
- 설정 페이지: 모터 매개변수, 사운드 볼륨 및 비디오 옵션을 수정할 수 있습니다.
- 게임패드 지원: 최신 브라우저에서 Xbox 또는 PlayStation 컨트롤러를 연결하여 로봇을 제어할 수 있습니다.
- 간단한 로그인 페이지: 모든 사람이 제어에 접근하는 것을 방지합니다 (참고: 완전한 접근 제어 시스템이 아니므로 신뢰할 수 없거나 공용 네트워크에서는 이 웹 인터페이스를 사용하지 마십시오).
- [신규] 텍스트 음성 변환 지원.
- [신규] 브라우저 내에서 CodeBlocks 드래그 앤 드롭 편집기를 사용하여 로봇 동작 프로그래밍.
웹 인터페이스는 Python으로 프로그래밍되었으며 Flask를 사용하여 서버를 생성합니다. Raspberry Pi는 USB를 통해 Arduino 마이크로컨트롤러에 연결됩니다. 주요 기능은 다음과 같습니다:
웹 인터페이스 및 로봇 이미지
<br />
<br />
설정 지침
1. Arduino
[a] 기본 설치
- 전자 부품의 배선이 아래 다이어그램과 일치하는지 확인하십시오.
- GitHub 저장소에서 "wall-e" 폴더를 다운로드/클론하십시오.
- Arduino IDE에서
wall-e.ino를 엽니다. animations.ino, MotorController.hpp 및 Queue.hpp 파일이 IDE의 별도 탭에서 자동으로 열려야 합니다.
Adafruit_PWMServoDriver.h 라이브러리를 설치하십시오.
- Sketch -> Include Library -> Manage Libraries...로 이동합니다.
- Adafruit Servo를 검색합니다.
- 최신 버전의 라이브러리를 설치합니다.
- 컴퓨터를 USB 케이블로 마이크로컨트롤러에 연결합니다. Tools 메뉴에서 올바른 Board와 Port가 선택되었는지 확인하십시오.
- 스케치를 마이크로컨트롤러에 업로드합니다.
로봇 전자 부품의 배선 다이어그램
<br />
<br />
[b] 메인 프로그램 테스트
- 스케치가 Arduino에 업로드된 후, 마이크로컨트롤러가 여전히 컴퓨터에 연결된 상태에서 12V 배터리를 켭니다.
- 시리얼 모니터를 엽니다 (Arduino IDE 오른쪽 상단 버튼). 전송 속도를 115200으로 설정합니다.
- 로봇의 움직임을 제어하려면 문자 'w', 'a', 's', 'd'를 보내 각각 앞으로, 왼쪽, 뒤로, 오른쪽으로 이동합니다. 'q'를 보내면 모든 움직임을 중지합니다.
- 머리를 움직이려면 문자 'j', 'l', 'i', 'k'를 보내 머리를 왼쪽이나 오른쪽으로 기울이고 눈을 위나 아래로 움직입니다. 이 단계에서는 서보가 예상보다 더 움직이려고 하거나 조정되지 않을 수 있습니다. 이는 아래 서보 모터 보정 단계를 수행하면 해결됩니다.
<br />
[c] 서보 모터 보정
- GitHub 저장소에서 "wall-e_calibration" 폴더를 다운로드/클론하십시오.
- Arduino IDE에서
wall-e_calibration.ino를 엽니다.
- 스케치를 마이크로컨트롤러에 업로드하고 시리얼 모니터를 열고 전송 속도를 115200으로 설정합니다.
- 이 스케치는 각 서보 모터를 원하는 운동 범위로 움직이는 데 필요한 최대 및 최소 PWM 펄스 길이를 보정하는 데 사용됩니다. 각 서보의 표준 LOW 및 HIGH 위치는 내 웹사이트의 다이어그램에서 확인할 수 있습니다.
- 스케치를 시작하고 시리얼 모니터를 열면 2-3초 후에 첫 번째 서보 모터(머리 회전)의 LOW 위치를 보정할 준비가 되었다는 메시지가 나타납니다.
- 문자 'a'와 'd'를 보내 모터를 -10 및 +10만큼 앞뒤로 움직입니다. 더 세밀한 제어를 위해 문자 'z'와 'c'를 사용하여 모터를 -1 및 +1만큼 움직입니다.
- 모터가 올바른 위치에 있으면 문자 'n'을 보내 보정 단계로 진행합니다. 동일한 서보의 HIGH 위치로 이동한 후, 로봇의 7개 서보 각각에 대해 이 과정이 반복됩니다.
- 모든 관절이 보정되면 스케치는 보정 값을 포함하는 배열을 시리얼 모니터에 출력합니다.
- 배열을 복사하여 프로그램 wall-e.ino의 144행에서 150행에 붙여넣습니다. 배열은 다음과 유사해야 합니다:
int preset[][2] = {{410,120}, // 머리 회전
{532,178}, // 목 상단
{120,310}, // 목 하단
{465,271}, // 오른쪽 눈
{278,479}, // 왼쪽 눈
{340,135}, // 왼쪽 팔
{150,360}}; // 오른쪽 팔
<br />
[d] 배터리 잔량 감지 (선택 사항)
- Arduino에서 배터리 잔량 감지 기능을 사용하려면 아래 이미지와 같이 다음 저항과 배선을 연결하십시오. 저항(전압 분배기)은 12V 전압을 5V 미만으로 낮추어 Arduino가 아날로그 핀을 사용하여 안전하게 측정할 수 있도록 합니다. 권장 저항 값은
R1 = 100kΩ 및 R2 = 47kΩ입니다.
- 메인 Arduino 스케치 wall-e.ino에서 54행
#define BAT_L의 주석을 해제하십시오.
- 다른 저항 값을 사용하는 경우 스케치의 54행에서 전압 분배기 이득 계수 값을 공식
POT_DIV = R2 / (R1 + R2)에 따라 변경하십시오.
- 이제 프로그램이 10초마다 자동으로 배터리 잔량을 확인하며, 이 잔량은 Raspberry Pi 웹 인터페이스의 "Status" 섹션에 표시됩니다.
배터리로 로봇을 구동할 때 남은 전력을 추적하는 것이 중요합니다. 일부 배터리는 과방전 시 손상될 수 있으며, Raspberry Pi의 SD 카드는 충분한 전력이 공급되지 않으면 손상될 수 있습니다.
<br />
배터리 잔량 감지 회로 배선 다이어그램
<br />
[e] oLed 디스플레이 (선택 사항) (hpkevertje 기여)
- Arduino에서 oLed 디스플레이 기능을 사용하려면 i2c oLed 디스플레이를 서보 모터 모듈의 i2c 버스에 연결하십시오 (다이어그램 참조).
- Arduino 라이브러리 관리자에서 U8g2 라이브러리를 설치하십시오:
- Sketch -> Include Library -> Manage Libraries...로 이동합니다.
- U8gt를 검색합니다. 라이브러리 게시자는 "oliver"입니다.
- 최신 버전의 라이브러리를 설치합니다.
- 메인 Arduino 스케치 wall-e.ino에서 74행
#define OLED의 주석을 해제하십시오.
- 라이브러리에서 지원하는 다른 디스플레이를 사용하는 경우 78행의 생성자를 라이브러리 참조 페이지에 설명된 대로 변경할 수 있습니다. 기본값은 SH1106128X64NONAME 디스플레이입니다.
작은 oLed 디스플레이를 통합하여 로봇의 전면 배터리 표시 패널에 배터리 잔량을 표시할 수 있습니다. 이 기능을 사용하려면 이전 섹션의 배터리 잔량 감지 회로가 활성화되어 있어야 하며, 배터리 잔량이 계산될 때마다 화면이 업데이트됩니다. 이 기능은 페이지 모드에서 u8g2 디스플레이 라이브러리를 사용합니다. Arduino UNO에서는 메모리 사용량이 높다는 경고가 표시될 수 있지만 무시해도 됩니다.
<br />
oLed 디스플레이 배선 다이어그램
<br />
[f] 나만의 서보 애니메이션 추가 (선택 사항)
- 메인 Arduino 스케치와 같은 폴더에 있는
animations.ino 파일을 엽니다.
- 각 애니메이션 명령은 모든 서보 모터가 이동할 위치와 다음 명령으로 넘어갈 때까지 애니메이션이 대기해야 하는 시간으로 구성됩니다.
- switch 문에 추가
case 섹션을 삽입하여 새 애니메이션을 추가할 수 있습니다. default 섹션 위의 공간에 추가 코드를 넣어야 합니다. 예:
내 코드에는 영화의 장면을 재현하는 두 가지 애니메이션이 포함되어 있습니다: Wall-E가 부팅할 때의 눈 움직임과 Wall-E가 호기심을 가지고 주변을 둘러보는 동작 시퀀스입니다. 코드 버전 2.7부터는 나만의 서보 모터 애니메이션을 더 쉽게 추가하여 Wall-E가 다른 동작을 하도록 만들 수 있습니다...
case 3:
// --- 새 동작 시퀀스의 제목 ---
// 시간,머리,목상,목하,오른눈,왼눈,왼팔,오른팔
queue.push({ 12, 48, 40, 0, 35, 45, 60, 59});
queue.push({1500, 48, 40, 20, 100, 0, 80, 80});
// 애니메이션을 완료하는 데 필요한 추가 동작을 여기에 추가
// queue.push({시간, 머리 회전, 목 상단, 목 하단, 오른쪽 눈, 왼쪽 눈, 왼쪽 팔, 오른쪽 팔})
break;
- 시간은 밀리초 단위의 숫자여야 합니다 (예: 3.5초 = 3500).
- 서보 모터 위치 명령은 0에서 100 사이의 정수여야 하며, 여기서
0 = LOW 및 100 = HIGH 서보 위치는 wall-e_calibration.ino 스케치에서 보정된 값입니다.
- 특정 동작에서 모터를 비활성화하려면 -1을 사용할 수 있습니다.
<br />
<br />
2. Raspberry Pi 웹 서버
[a] 하드웨어 설정
- Raspberry Pi의 전원 케이블을 12V-5V 벅 컨버터의 USB 전원 출력 포트에 연결하십시오.
- Arduino의 USB 데이터 케이블을 Raspberry Pi에 연결하십시오.
- Raspberry Pi 카메라가 있으면 리본 케이블을 CSI 카메라 커넥터에 연결하십시오.
- 설정 및 설치를 위해 HDMI 포트에 모니터를 연결하고 USB 키보드와 마우스를 연결할 수 있습니다. 또는 SSH를 사용하여 다른 컴퓨터에서 Raspberry Pi에 연결하고 구성할 수 있습니다.
<br />
[b] 기본 설치
- Raspberry Pi OS Desktop 최신 버전을 실행하도록 Raspberry Pi를 설정하십시오. 설정 지침은 Raspberry Pi 웹사이트에서 찾을 수 있습니다. Raspberry Pi가 인터넷에 연결되어 있는지 확인하십시오.
- Raspberry Pi에서 "터미널" 명령줄을 엽니다.
- 저장소를 Raspberry Pi의 홈 디렉토리에 클론합니다:
cd ~
git clone https://github.com/chillibasket/walle-replica.git
<br />
[!NOTE]
"config.py" 파일을 편집하여 웹 인터페이스 설정을 구성할 수 있습니다:
* 구성 파일 열기: nano ~/walle-replica/web_interface/config.py
* 14행에서 웹 인터페이스의 비밀번호를 변경할 수 있습니다. 기본 비밀번호는 "walle"입니다.
* 15행에서 Arduino에 연결하는 데 사용되는 기본 직렬 포트를 설정할 수 있습니다. dmseg | grep tty 명령을 사용하여 연결된 모든 직렬 포트 목록을 찾을 수 있습니다.
* 16행 및 17행에서 웹 서버 시작 시 Arduino와 카메라가 자동으로 연결되어야 하는지 구성할 수 있습니다.
<br />
- 완료되면...