아두이노 로봇팔(robot arm) 소스 및 문제점 정리
소스의 본문에서 디지털 13번 핀의 입력값이 LOW 이어야 정상적으로 모터가 선택이 된다.
어쨋건 저항 4개를 달아 개별 작동이 되게 했다.
저항4래를 맘대로 조종할 수 있도록 스위치 문구는 뺄 것이다.
void loop() {
if (digitalRead(switchPin) == LOW) { // 의아하다. 왜 high일 경우 버튼을 누르기도 전에 계속 모터가 번갈아가면서 선택되는데 low일때 버튼을 누르면 모터가 하나씩 선택될까?
#include <Servo.h> //서보 라이브러리를 불러옵니다.
Servo servo1; Servo servo2; Servo servo3; Servo servo4;
int potentiometerPin1 = 0;//가변저항기에 연결한 아날로그 핀의 번호를 설정합니다. int potentiometerPin2 = 1;//가변저항기에 연결한 아날로그 핀의 번호를 설정합니다. int potentiometerPin3 = 2;//가변저항기에 연결한 아날로그 핀의 번호를 설정합니다. int potentiometerPin4 = 3;//가변저항기에 연결한 아날로그 핀의 번호를 설정합니다. int switchPin = 12; int buttonPresses = 0;
void setup() {
Serial.begin(9600); Serial.println("hello arduino!");
pinMode(switchPin, INPUT_PULLUP);
pinMode(potentiometerPin1, INPUT); pinMode(potentiometerPin2, INPUT); pinMode(potentiometerPin3, INPUT); pinMode(potentiometerPin4, INPUT);
servo1.attach(2); // 서보를 사용하는 핀으로 디지털 핀2번을 설정합니다. servo2.attach(3); // 서보를 사용하는 핀으로 디지털 핀2번을 설정합니다. servo3.attach(4); // 서보를 사용하는 핀으로 디지털 핀2번을 설정합니다. servo4.attach(5); // 서보를 사용하는 핀으로 디지털 핀2번을 설정합니다.
}
void loop() {
if (digitalRead(switchPin) == LOW) { // 의아하다. 왜 high일 경우 버튼을 누르기도 전에 계속 모터가 번갈아가면서 선택되는데 low일때 버튼을 누르면 모터가 하나씩 선택될까?
buttonPresses++;
Serial.println("on"); Serial.print ("버튼 수 = "); // out to serial Serial.println(buttonPresses, DEC);
delay(2000); delay(50); }
if (buttonPresses == 1) { int value = analogRead(potentiometerPin1); //가변저항의 값을 읽어들입니다. int angle = map(value, 0, 1023, 1, 175); //읽어 들인 값을 0에서 179까지 변환 합니다. servo1.write(angle); //서보의 각도를 설정합니다.
Serial.print("서보로봇1 각도="); Serial.print(angle); //각도 값 출력 delay(200); // 서보가 지정한 각도까지 움직이는 동안 대기 }
if (buttonPresses == 2) { int value = analogRead(potentiometerPin2); //가변저항의 값을 읽어들입니다. int angle = map(value, 0, 1023, 1, 175); //읽어 들인 값을 0에서 179까지 변환 합니다. servo2.write(angle); //서보의 각도를 설정합니다.
Serial.print("서보로봇2 각도="); Serial.print(angle); //각도 값 출력 delay(200); // 서보가 지정한 각도까지 움직이는 동안 대기 }
if (buttonPresses == 3) { int value = analogRead(potentiometerPin3); //가변저항의 값을 읽어들입니다. int angle = map(value, 0, 1023, 1, 175); //읽어 들인 값을 0에서 179까지 변환 합니다. servo3.write(angle); //서보의 각도를 설정합니다.
Serial.print("서보로봇3 각도="); Serial.print(angle); //각도 값 출력 delay(200); // 서보가 지정한 각도까지 움직이는 동안 대기 }
if (buttonPresses == 4) { int value = analogRead(potentiometerPin4); //가변저항의 값을 읽어들입니다. int angle = map(value, 0, 1023, 1, 175); //읽어 들인 값을 0에서 179까지 변환 합니다. servo4.write(angle); //서보의 각도를 설정합니다.
Serial.print("서보로봇4 각도="); Serial.print(angle); //각도 값 출력 delay(200); // 서보가 지정한 각도까지 움직이는 동안 대기 }
if (buttonPresses == 5) { buttonPresses = 1; } }
|
#아두이노 #로봇팔 #robot #arm #소스 #문제점 #정리