로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2008/08/17
첨부#1 usb_servo.pde (3KB) (Down:1258)
Link#1 (Down:349)
ㆍ추천: 0  ㆍ조회: 5463   
  아듀이노 RC서보 제어
참조 : http://principialabs.com/arduino-serial-servo-control/
제목 : Arduino Serial Servo Control
날짜 : December 9th, 2007 
 
 

아듀이노의 멋진 특징은 다른 전자장치에서 표준 프로토콜을 사용해서 통신하는 능력이다.
개인적으로, 물리적 컴퓨팅(physical computing)의 큰 그림은,
PC에서 지루한 모니터나 프린터 보다,
오히려 실생활에서 당신에게 제한없는 영향을 주는 힘이 된다.
 
이 짧은 연습과제는 USB 케이블과 아듀이노의 직렬통신 소스를 이용하여,
PC로 아듀이노를 제어하는 하나의 방법을 보여준다.
RC 서보는 직류모터에 기구적으로 연결한 가변저항으로 구성된다.
 
PWM 신호는 위치명령을 전자서보의 내부에 있는 서보로 전송된다, 
서보명령이 rotate 일때, 직류 모터는 명령된 위치로 가도록, 
가변저항이 알맞는 값으로 될 때까지 전원을 인가한다.

표준 RC 서보에는 3 가닥의 전선이 있다.
  
 
1. 접지 (GND) = 검정색 혹은 갈색 <--- 전원과 신호의 기준선 (전기가 돌아 나오는 전선)
2. 전원 (PWR) = 적색 <--- 움직이는 동력
3. 신호 (SIG)  = 황색 <--- 제어선에 보내진 펄스를 기반으로 움직인다.
 
제어 펄스는 서보 돌출부의 각도를 정한다. (아래 그림의 0, 90, 180 도를 참조)
서보는 올바른 각도의 요청을 받으려 매 20 ms 주기의 펄스를 기다린다.
펄스폭의 위치는 직접 서보의 각도로 된다. 대부분의 서보는 40~60ms 안에 180 도를 돈다.

 


이 프로젝트는 입력전압 4.8~6V (아듀이노의 5V출력이 딱 맞는다)를 허용하는 표준 RC서보를 사용하였다.
RC서보의 갈색과 적색을 아듀이노의 GND와 5V (VCC) 전원 핀에 연결한다.
RC서보의 제어선은 아듀이노의 D2로 연결한다. 그림에서 녹색이 디지털 포트이다.
 
 

아듀이노 IDE 에서, 직렬통신으로 아래의 서보의 위치제어를 허용하는 코드를 기판에 업로드 한다.
서보의 min과 max 펄스폭을 선언하는 변수 minPulse와 maxPulse를 특별히 주의하라
먼저 말한대로, 대부분의 서보들은 펄스폭을 1~2ms로 제한해야 한다.

서보의 범위는 최대로 움직이려면 0.5ms ~ 2.5ms가 필요할 것이다. (펄스폭 1.5 ms는 중심)


직렬포트로 서보를 제어한다
// 키보드의 좌,우 방향 키를 서보의 돌출부를 비트는 인터페이스로 사용하도록 개조한다.
// 날짜 : Created 10 December 2007
// 저자 : Brian D. Wendt  
http://principialabs.com/
// 참조 : Tom Igoe의 코드를 적용함 : 
http://itp.nyu.edu/physcomp/Labs/Servo 
 
// 필요하다면, 당신의 서보를 위해서 이 값들을 조정하라,
int servoPin     =  2;    // control pin for servo motor 
int minPulse     =  600;  // minimum servo position 
int maxPulse     =  2400; // maximum servo position 
int turnRate     =  100;  // servo turn rate increment (larger value, faster rate) 
int refreshTime  =  20;   // time (ms) between pulses (50Hz) 
  
// 아듀이노는 당신을 위해서 아래의 값들을 계산한다.
int centerServo;         // center servo position 
int pulseWidth;          // servo pulse width 
int moveServo;          // raw user input 
long lastPulse   = 0;   // recorded time (ms) of the last pulse
 
void setup()              // 기판의 초기화 (처음 한번만 실행됨)

  pinMode(servoPin, OUTPUT);  // Set servo pin as an output pin 
  centerServo = maxPulse - ((maxPulse - minPulse)/2); 
  pulseWidth = centerServo;   // Give the servo a starting point (or it floats) 
  Serial.begin(9600);  
  Serial.println("      Arduino Serial Servo Control"); 
  Serial.println("Press < or > to move, spacebar to center"); 
  Serial.println(); 

  
void loop()                    //  주함수 (무한반복하여 실행됨)

   // 입력을 기다린다
   if (Serial.available() > 0)
  { 
    // 입력된 값을 읽는다
    moveServo = Serial.read(); 
  
    // 키보드 문자값에서, ASCII '<' 는 44, ASCII '>'는 46  
    if (moveServo == 44) { pulseWidth = pulseWidth - turnRate; } 
    if (moveServo == 46) { pulseWidth = pulseWidth + turnRate; } 
    if (moveServo == 32) { pulseWidth = centerServo; } 
  
    // min 과 max에서 서보를 정지한다.
    if (pulseWidth > maxPulse) { pulseWidth = maxPulse; } 
    if (pulseWidth < minPulse) { pulseWidth = minPulse; } 
  
    // 벌레잡기용 모니터 루틴  
    Serial.print("Pulse Width: ");  // 문자열 Pulse Width:을 PC로 송신 (제목을 표시)
    Serial.print(pulseWidth);       // 변수 pulseWidth 에 저장된  값을 PC로 송신 (실값을 표시)
    Serial.println("us");              // 문자열 us 을 PC로 송신 (단위를 표시)
  } 
  
  // 서보의 펄스는 pulseWidth으로 매 20 ms 마다 갱신된다.
  // 만일 각도가 그대로 이면, 서보의 위치를 고정한다.
  if (millis() - lastPulse >= refreshTime)
 { 
    digitalWrite(servoPin, HIGH);   // start the pulse 
    delayMicroseconds(pulseWidth);  // pulse width 
    digitalWrite(servoPin, LOW);    // stop the pulse 
    lastPulse = millis();           // save the time of the last pulse 
  } 
}
   
아듀이노의 IDE에서 직렬모니터를 사용하여 직렬포트로 데이터를 보내거나 받을 수 있다.
리눅스에서는 커맨드 스크린에서 터미널을 사용할 수 있다. /dev/ttyUSB0 9600
참조 : http://principialabs.com/arduino-serial-servo-control/

----------------------------------------------------------------------------------------------------------------
서보 함수를 사용한 예
서보모터의 회전축의 위치(각도)를 아듀이노 기판에 연결된 가변저항으로 제어한다.
저자 : Michal Rinott http://people.interaction-ivrea.it/m.rinott
 
응용 소스 
#include <Servo.h> 
Servo myservo;  // 서보제어 라이브러리 명칭을 myservo로 변경
int potpin = 0;      // 서보모터의 회전축의 각도를 제어하는 명령으로 아날로그 입력핀에 가변저항을 연결
int val;               // 아날로그 입력핀에서 들어오는 서보모터를 제어할 목표 값
 
void setup()       // 초기화 함수
{
  myservo.attach(9);  // 서보모터의 제어출력(pwm)을 포트9번에서 출력한다.
}
 
void loop()         // 주 함수
{
  val = analogRead(potpin);            // 연결된 가변저항의 값을 읽는다 (0 ~ 1023)
  val = map(val, 0, 1023, 0, 179);     // 서보의 회전축 각도로 변환한다. (0 ~ 180)
  myservo.write(val);                    // 각도를 서보모터로 출력한다
  delay(15);                                 // 서보모터의 응답시간을 대기한다 (없어도 된다, 어차피 늦게 움직일 것이므로) 
}

-----------------------------------------------------------------------------------------------------------------
가변저항없이 서보모터의 각도 시험
저자 : BARRAGAN http://barraganstudio.com
제목 : Sweep Servo Motor

응용 소스 
#include <Servo.h> 
Servo myservo;  // 서보제어 라이브러리 명칭을 myservo로 변경
int potpin = 0;      // 서보모터의 회전축의 각도를 제어하는 명령으로 아날로그 입력핀에 가변저항을 연결
int val;               // 아날로그 입력핀에서 들어오는 서보모터를 제어할 목표 값
 
void setup()       // 초기화 함수
{
  myservo.attach(9);  // 서보모터의 제어출력(pwm)을 포트9번에서 출력한다.
}
 
void loop()         // 주 함수

{
  for(pos = 0; pos < 180; pos += 1)  // 0도에서 180도를 움직인다, 1도 단계로 움직인다.
  {                                 
    myservo.write(pos);                 // 단계별로 서보의 각도를 PWM으로 출력한다 
    delay(15);                               // 서보모터의 응답시간을 대기한다, 지연시간 =15 ms 
  }
  for(pos = 180; pos>=1; pos-=1)     // 이번에는 반대로 움직인다 (180도 ~ 0도) 
  {                               
    myservo.write(pos);                 // 단계별 각도를 서보모터로 출력한다 
    delay(15);                               // 서보모터의 응답시간을 대기한다, 지연시간 =15 ms 
  }
}

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
  
 AVRTOOLS™
   
윗글 아듀이노 가속도센서
아래글 아듀이노 910-ISP 만들기
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 1064 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 18167 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 3053 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 3205 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 6493 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 5270 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3796 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 3318 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3702 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 3338 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3618 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 8288 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 4364 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3773 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 5713 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 4438 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3949 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3650 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6976 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 4143 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5832 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 7478 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 8627 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4682 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 5175 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5829 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9918 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 17973 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 7024 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5744 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 5112 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 4319 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 6307 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4878 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4816 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 5139 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5686 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 4265 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13887 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9842 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 6142 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 7091 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 4344 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3633 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3404 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 5484 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 5328 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5988 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4394 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3655 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4984 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9966 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3837 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 5254 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6817 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 5132 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 5170 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 5463 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 5032 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7912 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 7054 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0