시작하기 전에 저는 아두이노를 사용하는 로봇을 찾을 수 있었던 것에 실망했다고 말하고 싶습니다. 3D 프린터를 소유한 이후 항상 하고 싶었던 일이었습니다. 저는 엔지니어가 아니고, 3D 설계 소프트웨어(FreeCAD)를 통해 모형을 만들는 법을 스스로 배웠습니다. 이것은 제 여가 시간에 하는 일이고, 제가 만든 것은
그 로봇의 전체 목적은 인간을 두려워하는 것이고, 인간이 그를 보는 것을 좋아하지 않기 때문에, 당신이 Sonic 센서에 가까이 접근하면, 그는 자신의 팔을 흔드며 머리를 피하는 등 '공황 상태'가 됩니다.
부품 목록 -
1- Arduino Uno
1- 중간 크기의 브레드보드
1- 소니크 세노르
1- OLED 0.96인치
1- 3ohm 미니 스피커
3- SG90 서보 모터
작은 크기의 전선들 / 몇몇 큰 전선들
로봇을 위한 코드 - (현재는 오직 팔, 머리, 그리고 소니 센서만 작동합니다)
----------------------------------------------------------------------------------------------------------
#include <Servo.h>
// 핀 정의
#define HEAD_SERVO_PIN 11 // 헤드 서보 핀
#define LEFT_ARM_PIN 9 // 왼쪽 팔 서보 핀
#define RIGHT_ARM_PIN 10 // 오른쪽 팔 서보 핀
#define TRIG_PIN 12 // 초음파 센서 트리거 핀
#define ECHO_PIN 13 // 초음파 센서의 에코 핀
머리와 팔을 위한 서보 객체
서보 헤드Servo;
서보 왼쪽 팔 서보;
서보 오른팔 서보;
// 거리 변수들
오랜 기간;
거리를 계산하려면, 우리는 두 점 사이의 거리를 계산해야 합니다.
// 팔의 위치
팔 중립 각도 = 90도;
인트 암업 = 0;
인트 암 다운 = 180;
// 머리 스캔 변수들
인트 스캔 센터 = 90; // 머리가 중심이 된 위치
현재 헤드 위치 = 스캔 센터;
// 팔 운동 속도
팔 속도 = 20; // 팔 운동의 속도
비어있는 setup() 함수:
서보들을 각자의 핀에 연결하세요.
헤드 서보.attach(HEAD_SERVO_PIN);
왼쪽 팔 서보(leftArmServo)는 LEFT_ARM_PIN에 연결되어 있습니다.
rightArmServo.attach(RIGHT_ARM_PIN);
// 초음파 센서를 초기화하세요.
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// 가운데 위치한 머리와 팔로 시작하세요.
헤드서보.write(스캔 센터); // 헤드 중심
왼쪽 팔 서보(leftArmServo)는 armNeutral을 쓰기도 한다. // 왼쪽 팔을 중간 위치로 되돌리기
rightArmServo.write(armNeutral); // 오른쪽 팔을 중간 위치로 되돌리기
delay(1000); // 서보가 정상 상태로 돌아가기를 기다립니다.
randomSeed(analogRead(0)); // 난수 생성기의 시드 설정
그것은...
비어있는 loop() 함수:
울트라소니크 센서를 사용하여 거리를 측정하세요.
거리 = getDistance();
// 5cm 내에 물체가 검출되면, 머리와 팔을 모두 움직이세요.
만약 (거리가 5미리 이하라면) {
moveHeadAndArms("frantic"); // 머리와 팔을 신나게 움직이다.
}
// 20cm 내에 물체가 검출되면, 머리와 팔을 모두 움직이세요.
그렇지 않으면 (거리 ≤ 20) {
moveHeadAndArms("frantic"); // 머리와 팔을 신나게 움직이다.
그렇지 않은 경우에는,
재설정 없이 스캔을 계속 진행하세요.
헤드서보(headServo).write
왼쪽 팔 서보(leftArmServo)는 armNeutral을 쓰기. // 팔을 중심 위치에 두기.
오른쪽 팔 서보.write(armNeutral); // 팔을 중간 위치에 두어라.
}
delay(100); // 작동을 원활하게 하기 위한 지연 시간
그것은...
초음파 센서로부터의 거리를 구하는 함수 //
거리를 구하는 함수입니다. int getDistance() {
// 센서를 트리거하기 위한 펄스를 보내기
디지털Write(TRIG_PIN, LOW);
delayMicroseconds(2);
디지털Write(TRIG_PIN, HIGH);
delayMicroseconds(10);
디지털Write(TRIG_PIN, LOW);
// παλμ의 지속 시간을 측정하세요.
기간 = pulseIn(ECHO_PIN, HIGH);
음파의 속도 = 343m/s, 혹은 0.0343cm/us이기 때문에, 거리를 厘미터로 계산해 보자.
거리
거리
그것은...
// 동작 유형에 따라 머리와 팔을 모두 움직이는 함수
동작 유형을 지정하여 머리와 팔을 움직입니다.
만일 (동작 유형이 '弗狂'이라면) {
// 물체를 감지하면 머리와 팔을 疯狂하게 움직이세요.
인트 프레네틱 모션 = 랜덤(1, 4);
만일 (franticMovement == 1)이면,
헤드서보.write(30); // 머리를 왼쪽으로 이동시키다.
leftArmServo.write(armUp); // 왼쪽 팔 올리기
오른쪽 팔 서보.write(armDown); // 오른쪽 팔 내려주기
}
그렇지 않다면, (franticMovement == 2) {
헤드서보.write(150); // 머리를 오른쪽으로 이동
leftArmServo.write(armDown); // 왼쪽 팔 내려주기
rightArmServo.write(armUp); // 오른팔 올리기
}
그렇지 않다면, (franticMovement == 3)면,
헤드서보.write(180); // 머리를 완전히 회전된 위치로 이동하세요.
leftArmServo.write(random(0, 180)); // 랜덤한 왼쪽 팔 운동
오른쪽ArmServo.write(random(0, 180)); // 랜덤한 오른쪽 팔 운동
}
그렇지 않다면 (franticMovement == 4) {
헤드서보.write(60); // 머리를 적당히 왼쪽으로 이동하게 하기
leftArmServo.write(armUp); // 왼쪽 팔 올리기
오른쪽 팔 서보.write(armDown); // 오른쪽 팔 내려주기
}
delay(500); // 팔의 위치를 바꾸기 전의 짧은 지연 시간
운동 후 팔을 중립 위치로 되돌리기
왼쪽 팔 서보(leftArmServo)는 armNeutral을 쓰습니다.
오른쪽 팔 서보(rightArmServo)는 armNeutral을 쓰입니다.
delay(200); // 다음 동작 전의 짧은 지연 시간
}
그것은...
--------------------------------------------------------------------------------------------------------------
대부분의 부분들은 완벽하게 적합하지만, 다른 부분들은 그렇지 않습니다. 다시 한번, 저는 재미를 위해 그리고 배우기 위해 이것을 합니다. 저는 얼마 전부터 '드래프트' 버전을 업로드하고 싶었습니다. 저의 목표는 다른 같은 생각을 하는 사람들이 저와 함께 이 프로젝트를 진행하고 이것을 커뮤니티 주도 로봇
----------------------------------------------------------------------------------------------------------------
일부 부분은 접착제가 필요하지만 그렇게 많지는 않습니다. 서보 모터는 제자리에 끼워집니다. 스피커와 OLED도 마찬가지입니다. 유일한 문제는 저가 스포트를 완벽하게 만들었는데, 스피커와 OLED 모두 완벽하게 장착되어야 하거나 들어가지 않을 거예요. 접착제가 필요한 유일한 부분은 다리와 몸체를 연결
----------------------------------------------------------------------------------------------------------------
태그
모델 소스
