이 튜토리얼에서는 힘 센서, Arduino Uno 및 서보 모터를 사용하여 회로를 개발합니다. 힘 센서에있는 무게에 의해 서보 샤프트 위치가 결정되는 서보 제어 시스템이됩니다. 더 진행하기 전에 서보 및 기타 구성 요소에 대해 이야기하겠습니다.
서보 모터는 정확한 샤프트 이동이나 위치가 필요한 곳에 사용됩니다. 고속 애플리케이션에는 제안되지 않습니다. 이는 저속, 중간 토크 및 정확한 위치 적용을 위해 제안됩니다. 이 모터는 로봇 팔 기계, 비행 제어 및 제어 시스템에 사용됩니다. 서보 모터는 일부 프린터 및 팩스 기계에도 사용됩니다.
서보 모터는 다양한 모양과 크기로 제공됩니다. 서보 모터에는 주로 전선이 있으며, 하나는 양 전압 용이고 다른 하나는 접지 용이고 마지막 하나는 위치 설정 용입니다. 적색선은 전원, 흑색 선은 접지, 황색 선은 신호에 연결됩니다.
서보 모터는 DC 모터, 위치 제어 시스템, 기어의 조합입니다. DC 모터의 샤프트 위치는 PWM 신호 인 SIGNAL 핀의 듀티 비를 기반으로 서보의 제어 전자 장치에 의해 조정됩니다. 간단히 말해서 제어 전자 장치가 DC 모터를 제어하여 샤프트 위치를 조정합니다. 샤프트 위치에 관한 데이터는 SIGNAL 핀을 통해 전송됩니다. 제어 장치에 대한 위치 데이터는 서보 모터의 Signal 핀을 통해 PWM 신호 형태로 전송되어야합니다.
PWM (Pulse Width Modulated) 신호의 주파수는 서보 모터 유형에 따라 다를 수 있습니다. 여기서 중요한 것은 PWM 신호의 DUTY RATIO입니다. 이 의무에 따라 제어 전자 장치가 샤프트를 조정합니다.
아래 그림에서 볼 수 있듯이, 샤프트를 9시 시계로 이동하려면 TURN ON RATION이 1 / 18.ie 여야합니다. 18ms 신호에서 'ON 시간'의 1 밀리 초 및 'OFF 시간'의 17 밀리 초.
샤프트가 12o 클럭으로 이동하려면 신호의 ON 시간이 1.5ms이고 OFF 시간은 16.5ms 여야합니다.
이 비율은 서보의 제어 시스템에 의해 디코딩되고이를 기반으로 위치를 조정합니다.
여기에있는이 PWM은 ARDUINO UNO를 사용하여 생성됩니다.
따라서 지금은 UNO에서 생성되는 PWM 신호의 듀티 비를 변경하여 SERVO MOTOR 샤프트를 제어 할 수 있음을 알고 있습니다.
이제 힘 센서 또는 무게 센서에 대해 이야기하겠습니다.
FORCE 센서를 ARDUINO UNO와 인터페이스하기 위해 arduno uno에서 8 비트 ADC (Analog to Digital Conversion) 기능을 사용할 것입니다.
FORCE 센서는 압력이 표면에 가해지면 저항을 변경하는 변환기입니다. FORCE 센서는 다양한 크기와 모양으로 제공됩니다.
여기에서는 정확성이 많이 필요하지 않기 때문에 더 저렴한 버전 중 하나를 사용할 것입니다. FSR400 은 시장에서 가장 저렴한 힘 센서 중 하나입니다. FSR400의 그림은 아래 그림과 같습니다.
이제 FSR 400은 길이에 따라 민감하므로 그림과 같이 힘이나 무게가 센서 눈 중앙의 미로에 집중되어야합니다.
잘못된 시간에 힘을 가하면 장치가 영구적으로 손상 될 수 있습니다.
알아야 할 또 다른 중요한 점은 센서가 높은 범위의 전류를 구동 할 수 있다는 것입니다. 따라서 설치하는 동안 구동 전류를 염두에 두십시오. 또한 센서에는 10 뉴턴의 힘 제한이 있습니다. 그래서 우리는 1Kg의 무게 만 적용 할 수 있습니다. 1Kg 이상의 무게가 적용되면 센서에 약간의 편차가 나타날 수 있습니다. 3Kg 이상 증가하면. 센서가 영구적으로 손상 될 수 있습니다.
앞서 말했듯이이 센서는 압력 변화를 감지하는 데 사용됩니다. 따라서 FORCE 센서 위에 무게를 가하면 저항이 크게 변합니다. 무게에 대한 FS400의 저항은 아래 그래프에 나와 있습니다.
위 그림과 같이 센서의 두 접점 사이의 저항은 무게에 따라 감소하거나 센서의 두 접점 사이의 컨덕턴스가 증가합니다.
순수 도체의 저항은 다음과 같이 지정됩니다.
어디, p- 도체의 비저항
l = 지휘자의 길이
A = 도체 면적.
이제 저항이 "R"인 도체를 고려하십시오. 도체 위에 약간의 압력이 가해지면 도체의 면적이 감소하고 압력의 결과로 도체의 길이가 증가합니다. 따라서 공식에 따르면 저항 R은 면적에 반비례하고 길이 l에 정비례하기 때문에 도체의 저항이 증가해야합니다.
따라서 압력이나 무게를받는 도체의 경우 도체의 저항이 증가합니다. 그러나이 변화는 전반적인 저항에 비해 작습니다. 상당한 변화를 위해 많은 도체가 함께 쌓입니다.
이것은 위의 그림에 표시된 힘 센서 내부에서 일어나는 일입니다. 자세히 보면 센서 내부의 많은 선을 볼 수 있습니다. 이러한 각 선은 지휘자를 나타냅니다. 센서의 감도는 도체 번호에 있습니다.
그러나이 경우 여기에 사용 된 재료는 순수한 도체가 아니기 때문에 압력에 따라 저항이 감소합니다. 여기서 FSR은 견고한 폴리머 후막 (PTF) 장치입니다. 따라서 이들은 순수한 전도체 재료 장치가 아닙니다. 이들은 센서 표면에 가해지는 힘이 증가함에 따라 저항이 감소하는 재료로 구성됩니다.
이 재료는 FSR 그래프와 같은 특성을 보여줍니다.
저항의 이러한 변화는 우리가 읽을 수 없다면 소용이 없습니다. 가까이에있는 컨트롤러는 전압의 기회 만 읽을 수 있으며 그 이하도 아닙니다. 전압 변화에 따른 저항 변화를 유도 할 수있는 전압 분배기 회로를 사용할 것입니다.
전압 분배기는 저항성 회로이며 그림에 나와 있습니다. 이 저항 네트워크에는 하나의 일정한 저항과 다른 가변 저항이 있습니다. 그림에서 볼 수 있듯이 여기서 R1은 일정한 저항이고 R2는 저항 역할을하는 FORCE 센서입니다.
분기의 중간 점을 측정합니다. R2 변경으로 Vout에 변경이 있습니다. 그래서 이것으로 우리는 무게에 따라 변하는 전압을가집니다.
여기서 주목해야 할 중요한 점은 ADC 변환을 위해 컨트롤러가 취하는 입력이 50µAmp만큼 낮다는 것입니다. 저항 기반 전압 분배기의 이러한 부하 효과는 전압 분배기의 Vout에서 끌어온 전류가 오류 비율을 증가시키기 때문에 중요합니다. 지금은 부하 효과에 대해 걱정할 필요가 없습니다.
이제 FORCE SENSOR에 힘이 가해지면 분배기 끝의 전압이 UNO의 ADC 채널에 연결되어이 핀을 변경하면 센서에 가해지는 힘이 변할 때마다 UNO의 ADC와 다른 디지털 값을 얻게됩니다.
이 ADC 디지털 값은 PWM 신호의 듀티 비와 일치하므로 센서에 가해지는 힘과 관련하여 SERVO 위치 제어가 가능합니다.
구성품
하드웨어: UNO, 전원 공급 장치 (5v), 1000uF 커패시터, 100nF 커패시터 (3 개), 100KΩ 저항, SERVO MOTOR (SG 90), 220Ω 저항, FSR400 힘 센서.
소프트웨어: Atmel studio 6.2 또는 aurdino nightly.
회로도 및 작동 설명
힘 센서에 의해 서보 모터의 제어 회로도 도 이하에 나타낸다.
센서의 전압은 완전히 선형이 아닙니다. 시끄러울 것입니다. 노이즈를 필터링하기 위해 그림과 같이 분배기 회로의 각 저항에 커패시터가 배치됩니다.
여기서 우리는 분배기가 제공하는 전압 (무게를 선형으로 나타내는 전압)을 가져와 Arduino Uno의 ADC 채널 중 하나에 공급합니다. 변환 후 디지털 값 (무게를 나타내는)을 가져 와서 PWM 값과 연결하고이 PWM 신호를 SERVO 모터에 제공합니다.
따라서 무게와 함께 디지털 값에 따라 듀티 비를 변경하는 PWM 값이 있습니다. 디지털 값이 높을수록 PWM의 듀티 비가 높아집니다. 따라서 더 높은 듀티 비 PWM 신호를 사용하면 소개에 제공된 그림에 따라 서보 샤프트가 맨 오른쪽 또는 맨 왼쪽에 도달해야합니다.
무게가 더 낮 으면 PWM 듀티 비가 낮아지고 소개 그림에 따라 서보가 맨 오른쪽에 도달해야합니다.
이를 통해 WEIGHT 또는 FORCE에 의한 SERVO 위치 제어가 있습니다.
이를 위해서는 프로그램에서 몇 가지 지침을 설정해야하며 아래에서 자세히 설명하겠습니다.
ARDUINO에는 그림과 같이 6 개의 ADC 채널이 있습니다. 이들 중 하나 또는 모두를 아날로그 전압에 대한 입력으로 사용할 수 있습니다. UNO ADC는 10 비트 분해능입니다 (따라서 (0- (2 ^ 10) 1023)의 정수 값). 즉, 0에서 5V 사이의 입력 전압을 0에서 1023 사이의 정수 값으로 매핑합니다. (5 / 1024 = 4.9mV) 단위당.
여기서는 UNO의 A0을 사용하겠습니다. 우리는 몇 가지를 알아야합니다.
|
먼저 Arduino Uno ADC 채널의 기본 참조 값은 5V입니다. 즉, 모든 입력 채널에서 ADC 변환을 위해 최대 5V의 입력 전압을 제공 할 수 있습니다. 일부 센서는 0-2.5V의 전압을 제공하기 때문에 5V 기준으로 정확도가 떨어 지므로이 기준 값을 변경할 수있는 명령이 있습니다. 따라서 참조 값을 변경하려면 ("analogReference ();") 지금은 그대로 둡니다.
기본적으로 최대 보드 ADC 분해능은 10 비트이며,이 분해능은 명령어 (“analogReadResolution (bits);”)를 사용하여 변경할 수 있습니다. 이 해상도 변경은 경우에 따라 유용 할 수 있습니다. 지금은 그대로 둡니다.
이제 위의 조건을 기본값으로 설정하면“analogRead (pin);”함수를 직접 호출하여 채널 '0'의 ADC에서 값을 읽을 수 있습니다. 여기서“pin”은 아날로그 신호를 연결 한 핀을 나타냅니다.이 경우에는 "A0"이됩니다. ADC의 값은“int SENSORVALUE = analogRead (A0); ”,이 명령어에 의해 ADC 이후의 값은 정수“SENSORVALUE”에 저장됩니다.
UNO의 PWM은 PCB 보드에서 "~"로 표시된 모든 핀에서 달성 할 수 있습니다. UNO에는 6 개의 PWM 채널이 있습니다. 우리의 목적을 위해 PIN3을 사용할 것입니다.
analogWrite (3, VALUE); |
위의 조건에서 해당 핀에서 PWM 신호를 직접 얻을 수 있습니다. 괄호 안의 첫 번째 매개 변수는 PWM 신호의 핀 번호를 선택하기위한 것입니다. 두 번째 매개 변수는 듀티 비를 쓰기위한 것입니다.
Arduino Uno의 PWM 값은 0에서 255까지 변경할 수 있습니다. "0"이 가장 낮 으면 "255"가 가장 높습니다. 듀티 비로 255를 사용하면 PIN3에서 5V를 얻을 수 있습니다. 듀티 비가 125로 주어지면 PIN3에서 2.5V가됩니다.
이제 서보 모터 제어에 대해 이야기 해 봅시다. Arduino Uno에는 각도 값만 제공하여 서보 위치를 제어 할 수있는 기능이 있습니다. 서보가 30이되기를 원한다면 프로그램에서 값을 직접 나타낼 수 있습니다. SERVO 헤더 파일은 내부적으로 모든 듀티 비 계산을 처리합니다. 여기에서 arduino를 사용한 서보 모터 제어에 대해 자세히 알아볼 수 있습니다.
이제 sg90은 0-180도에서 이동할 수 있으며 ADC 결과는 0-1024입니다.
따라서 ADC는 SERVO POSITION의 약 6 배입니다. 따라서 ADC 결과를 6으로 나누면 대략적인 SERVO 손 위치를 얻을 수 있습니다. 따라서 듀티 비가 WEIGHT 또는 FORCE에 따라 선형으로 변경되는 PWM 신호가 있습니다. 이것은 서보 모터에 주어지면 힘 센서로 서보 모터를 제어 할 수 있습니다.