브로클리프롭 로봇카 프로그래밍
Link
Contents
브로클리프롭 로봇카 프로그래밍 실습 세부목차
※ 본 페이지의 내용은 패럴렉스(Learn.Parallax.com)사의 공식 홈페이지에서 제공되는 자료를 참고하여 작성되었습니다.
브로클리프롭(BlocklyProp) 프로그래밍 방법으로 프로펠러 로봇카를 이용하여 실습할 수 있습니다. 로봇카와 브로클리프롭(BlocklyProp) 비주얼 프로그래밍으로 로봇공학, 그래픽 프로그래밍, 전자 공학을 익혀 보십시오!
이 페이지는 적외선 센서로 로봇카를 주행하는 방법에 관한 것입니다. 많은 TV 및 기타 장비는 적외선 리모컨으로 제어됩니다. 리모컨을 TV로 향하게 하고 채널 업 버튼을 누르면 채널이 변경됩니다. 버튼을 누르면 TV에서 적외선 빛의 원격 플래시 패턴이 만들어 집니다. 적외선은 사람에게는 보이지 않지만 TV의 적외선 수신기는 깜박이는 빛의 패턴을 감지합니다. TV의 마이크로 컨트롤러는 이 패턴을 해독하고 해당 정보를 사용하여 채널을 변경합니다.
아래 세부 내용들을 살펴볼 수 있습니다.
1) 적외선(IR) 센서 회로 만들기
2) 적외선(IR) 센서 회로 테스트
3) 적외선 손전등으로 로봇카 주행하기
적외선 (IR LED)과 수신기는 로봇카의 "손전등"과 "눈"으로 잘 작동합니다. IR LED가 전방에서 빛나면, IR 수신기는 근처의 장애물로부터 반사된 빛을 잘 감지합니다.
프로펠러 마이크로 컨트롤러는 IR 수신기에서 반사 데이터를 수신하여 주행 결정에 사용합니다. 이런 식으로 로봇카는 먼저 장애물에 부딪히지 않고 장애물 주위를 돌아다닐 수 있습니다.
이 작업에서는 적외선 객체 센서시스템을 구축하고 테스트하여 로봇카 앞에 있는 객체를 감지하는지 확인합니다. 더듬이 회로와 마찬가지로, 오른쪽에 하나가 있고 왼쪽에 하나가 있으므로 로봇카는 장애물과 관련된 방향을 결정할 수 있습니다.
이 경우 각 면에는 두 개의 전자 부품 즉, 적외선을 빠르게 깜박이는 LED와 근처의 물체로부터 반사되는 적외선의 반사를 감지하는 LED가 필요합니다.
필요한 부품들
(2) IR LED
(2) IR 수신기
(2) 1 k 옴 저항 (갈색 - 검정 - 빨강)
(2) 220 옴 저항 (적 - 적 - 갈색)
- 키트에 있는 두 개의 IR LED를 찾으십시오. 이 LED는 돔 모양 (평면이 아님)의 상단이 있는 명확한 LED입니다.
손전등처럼 IR LED의 빛을 지시하기 위해 IR LED 스탠드 오프 (긴 튜브)와 보호 장치 (짧은 튜브)를 사용합니다.
- IR LED의 리드를 스탠드 오프 튜브에 삽입하고 스탠드오프의 하단에 있는 두 개의 구멍을 통해 빠져 나오십시오.
- 단단히 눌러서 IR LED가 제자리에 끼워져야 합니다. 그렇지 않다면 꺼내서 반 바퀴 돌려주고 다시 시도하십시오.
- 스탠드오프에 LED 차폐를 장착하십시오.
참고: 쉴드가 스탠드오프와 마찰을 맞추기는 하지만 튜브를 단단히 고정시켜 튜브를 단단히 고정시키는 것이 좋습니다. 테이프가 튜브 끝에 닿지 않거나 IR LED를 덮지않도록 하십시오.
- 키트에 IR 수신기를 찾으십시오. 두 가지 종류가 있는 경우 이 활동을 위해 은색 금속 상자가 있는 것을 사용하십시오.
IR LED의 음극은 D / A0 및 D / A1에 연결됩니다. 물체 감지를 위해 D / A 출력은 0V = GND로 설정됩니다. IR LED가 더 밝아지도록 전압을 높이면 더 가까운 범위를 감지할 수 있습니다. (그들은 오브젝트의 거리에 대한 대략적인 아이디어를 얻기 위해 다양한 전압 레벨에서 테스트할 수 있습니다. 하지만 그것은 다른 활동을 위한 것입니다 ...)
- 이 결선 다이어그램과 회로도를 사용하여 적외선 감지기를 구축하십시오.
- 긴 IR LED 양극 핀이 결선도에 표시된 행에 꽂혀 있는지 확인하십시오.
- IR 수신기가 검은색 플라스틱 케이스가 아닌 은색 케이스인지 확인하십시오 (검은 색 플라스틱 케이스가 아님).
테스트 코드는 각 IR 감지기의 상태를 표시합니다. 1 = 적외선 반사 감지 안 함, 0 = 예, 대상에서 반사된 적외선 감지됨.
코드 테스트
- 브로클리프롭(BlocklyProp) 계정에 로그인하여 Test IR Detectors라는 새 프로젝트를 만듭니다.
- 아래에 표시된 프로젝트를 빌드하고 저장하십시오.
- Run Once 버튼을 클릭하십시오.
- 로봇카 두 개의 IR 탐지기가 어떤 물체를 가리키고 있는지 확인하고 두 탐지기 모두가 보고하는지 확인하십시오.
- 약 10cm (4 인치) 정도 떨어진 곳의 적외선 탐지기 앞에 손을 대면합니다. 아래와 같이 irLeft = 1 및 irRight = 0 이 표시되어야 합니다.
- 왼쪽 IR 검출기에 대해 반복하고 디스플레이가 irLeft = 0 및 irRight = 1로 업데이트되는지 확인합니다.
- 두 가지 모두에 대해 반복하고 두 가지 모두가 0으로 표시되는지 확인하십시오.
- 모든 테스트가 완료되면 다음 섹션으로 진행할 준비가 된 것입니다. 그렇지 않은 경우 아래 문제 해결 목록으로 이동하십시오.
문제 해결
계속하기 전에 두 IR 감지기가 제대로 작동하는지 확인하는 것이 중요합니다.
- IR 출력이 1 또는 0으로 고정되어 있으면 대개 배선 문제가 있음을 나타냅니다. 돌아가서 배선을 점검하십시오.
- 범위 안의 물체가 없으므로 적외선이 0으로 깜박이면 근처의 형광등을 끄고 다시 시도하십시오.
- 오브젝트가 정면에 있을 때 IR이 산발적으로만 감지하면 P11 및 P1에 연결된 저항의 색상 코드를 확인하십시오. 1kΩ의 경우 갈색 – 검정색이어야 합니다. 또한 로봇카가 직사 광선이 비치지 않는지 확인하십시오.
- 두 개의 IR 센서가 잘 작동하는지 확인한 후에 다음 활동을 계속하십시오.
참고: IR 센서가 볼 수없는 것
기억하십시오, IR 센서시스템은 반사된 적외선을 찾고 있습니다. 반짝이는 밝은 색상의 물체는 적외선을 잘 반사하지만 어두운 색의 물체는 반사하지 않고 적외선을 흡수합니다. 따라서 IR 센서가 검은색 신발이나 검은색 플라스틱 휴지통을 볼 수 없다면 걱정하지 마십시오. 정상입니다!
어떻게 동작하는가?
먼저, 프로그램은 I / O 핀 P26과 P27을 로우 (0V)로 출력합니다. 이 기능은 P26 및 P27 LED를 끄는 것뿐만 아니라 D / A0 및 D / A1 소켓을 0V에 연결합니다. IR LED 음극은 접지 연결을 위해 이 소켓에 연결됩니다. (이후 활동에서 왜 에 대해 설명할 것입니다!)
나머지 코드는 repeat forever 루프 안에 있습니다. 먼저 주파수 출력 블록은 1 밀리 초 동안 P11에서 38000 Hz 신호를 생성합니다. P11은 IR LED에 연결되어 있어 1ms 버스트 동안 매우 빠르게 점멸합니다.
이 블록 바로 다음에 irLeft 라는 변수에 P10의 입력 상태를 저장하는 check PIN 블록이 옵니다. P10은 왼쪽 IR 수신기 회로에 연결됩니다. 이 IR 수신기는 적외선 광의 존재를 감지할뿐만 아니라 38kHz (38000Hz)에서 매우 신속하게 켜고 / 끄는 적외선 광선에 가장 민감합니다. IR 검출기는 반사된 38kHz IR 신호가 검출될 때 로우(low) 신호 (0V)를 송신하고, 그러한 신호가 검출되지 않을 때 하이(high) 신호를 송신합니다.
이 프로세스는 IR 수신기의 출력을 irRight 변수에 저장하고 다른 frequency PIN + check PIN 블록 쌍을 사용하여 오른쪽 IR 회로에 대해 복제됩니다.
다음 여섯 줄은 이제 익숙해져야 합니다! 네 개의 터미널 인쇄 블록은 irLeft 및 irRight 변수 의 레이블과 값을 표시합니다. pause (150) 블록은 최적의 디스플레이용 루프로 속도를 느리게 하고, 마지막으로 terminal clear screen 블록은 루프를 통한 다음 실행 이전에 이전 데이터를 지웁니다.
알고 계셨습니까?
적외선 - "적색 이하"를 의미하며, 빛의 주파수가 색상 스펙트럼에서 적색의 주파수보다 낮다는 것을 의미합니다.
필터링 - IR 수신기에는 38000 회 / 초 (38 kHz)로 깜박이는 적외선을 찾는 필터가 내장되어 있습니다. 이를 통해 TV 리모컨에서 나오는 적외선과 할로겐 및 백열등과 같은 기타 IR 소스는 물론 근처의 창을 통해 들어오는 햇빛을 구별할 수 있습니다.
햇빛 - IR 수신기가 햇빛을 필터링하더라도 직사광선은 종종 IR LED의 신호를 어둡게 합니다. 창문을 통해 들어오는 햇빛을 피하고 실내에서 진행하십시오.
시도해 보세요!
P26 및 P27 라인은 현재 IR LED 음극에 0V를 공급하는 용도로 사용되고 있으므로, 우리는 더듬이를 사용할 때처럼 IR 검출기 상태를 나타내는데 LED를 사용할 수 없습니다. 따라서 "객체 감지" 표시기 목적으로 브레드 보드에 몇개 LED를 만들 것입니다.
- 키트에서 2 개의 빨간색 LED, 2 개의 220 Ω 저항 (적 - 적 - 갈색) 및 2 개의 검은 색 점퍼 전선을 수집하십시오.
- 여기에 표시된 두 개의 LED 표시기 회로를 추가로 구성하십시오.
다음으로, IR 수신기가 0을 반환하면 주어진 조명을 켜고, 1을 반환하면 꺼지도록 코드를 수정해야 합니다.
- 다른 이름으로 프로젝트 저장 버튼을 사용하여 프로젝트의 복사본을 Test IR Detectors Try와 같은 새 이름으로 만드십시오.
- 아래에 표시된 두 개의 if ... else 블록을 pause 블록 바로 앞에 있는 repeat forever 루프에 추가하십시오.
- 프로그램을 실행하고 옆에 있는 적외선 감지기 앞에 장애물을 놓으면 각 적색 LED가 켜지는지 확인하십시오.
당신 차례 !
적외선 리모콘이 있는 경우 IR 감지 코드를 추가로 수정할 수 있으므로 환경에서 IR 간섭을 감지하면 경보가 울립니다. 주변의 형광등이나 기타 장치가 로봇의 동작에 영향을 줄 수 있는 신호를 보내는지 알아내는 데 유용한 테스트입니다. 열쇠는 IR LED로 적외선을 방출하지 않는 것입니다. 수신기가 여전히 낮은 신호를 보내면 다른 소스에서 오는 IR 간섭이 있어야 합니다.
간섭이 감지되면 피에조 스피커가 50ms 간격으로 6 회 반복된 6 개의 50ms, 6 개의 50ms pause 로 분리된 4kHz 초음파으로 주의를 환기시키십시오. TV 리모콘을 사용하여 이를 테스트할 수 있습니다.
- 다른 이름으로 프로젝트 저장 버튼을 사용하여 새 사본을 만들고 이름을 IR Detectors Your Test라는 이름을 지정하십시오.
- 적외선 리모컨 (예 : TV 리모컨)을 IR 수신기에 지정하고 단추를 누르고 있습니다. 표시등이 켜지는지 확인하십시오.
- irLeft 또는 irRight 가 0을 유지하는 경우 여섯 개의 50ms pause 로 구분된 일련의 6 개의 50ms, 4khz 반복을 재생하는 if ... 블록을 추가하십시오.
- 프로그램을 EEPROM에 저장하십시오.
이제 로봇을 컴퓨터에서 분리하고 작업 공간을 걸을 수 있습니다. 로봇을 다른 광원으로 향하게 하십시오. 경고음이 들리면 38 kHz 적외선 신호가 감지됩니다. 형광등 조명의 일부 스타일의 안정기는 이러한 종류의 적외선 간섭을 유발하는 것으로 유명합니다.
귀하의 IR 객체 센서를 구축하고 테스트하면 로봇카를 로밍하고 장애물이 부딪히지 않고 피할 수 있습니다.
IR 로밍 예제 코드
IR 로밍 코드 예제는 장애물을 감지할 때까지 로봇카를 앞으로 진행시킵니다. 왼쪽에 장애물이 보이면 오른쪽으로 돌 것입니다. 마찬가지로 오른쪽에 하나가 있으면 왼쪽으로 돌고 왼쪽과 오른쪽에 장애물이 있으면 백업합니다.
참고: 이 적외선 시스템에서 모든 장애물을 볼 수 있는 것은 아닙니다.
많은 어두운 색상의 물체는 반사하는 대신 적외선을 흡수합니다. 의심스러운 경우 이전 페이지의 LED 표시기 프로그램을 사용하십시오. 브레드 보드의 빨간색 LED는 물체가 IR 개체 탐지기에 표시되는지 여부를 보여줍니다.
- 브로클리프롭(BlocklyProp) 계정에서 새로운 Propeller C 프로그램을 만들고 IR 로밍 이름을 지정하십시오.
- 아래에 표시된 프로젝트를 빌드하고 저장하십시오.
- 로봇카를 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.
- COM 포트를 설정하고 로드 및 실행 (EEPROM에 코드 저장)을 클릭하십시오.
- 로봇을 분리하고 열린 공간의 바닥에 놓습니다.
- 전원 스위치를 2로 설정하면 리셋 버튼을 길게 누릅니다.
- 로봇카가 로밍을 시작하면 양쪽의 IR LED 앞에서 손을 잡으십시오.
로봇카가 다른 장애물을 감지할 때까지 즉시 다른 방향으로 로밍해야 합니다.
IR 로밍 코드의 작동 방식
이 프로젝트는 P4에서 피에조 스피커 브라운 아웃 알람을 위한 친숙한 주파수 아웃 블록으로 시작됩니다. 다음은 필요한 Robot ActivityBot initialize 블록과 robot set acceleration 블록입니다. 이전 프로젝트에서 배운 바와 같이 600 tick / s2 는 Robot drive speed 블록의 기본값 64 와 잘맞는 적당한 가속 값입니다.
P26과 P27 을 위한 make PIN ... low 블록이 IR LED 를 접지 음극에 연결하는데 필요하다는 것을 기억하십시오.
나머지 코드 블록은 repeat forever 루프에 있습니다. 다음 4 개의 블록은 IR Detectors 프로젝트에서와 똑같습니다. 각 IR LED / 수신기 쌍에 대해 주파수 출력 블록은 38 kHz에서 적외선의 1ms 펄스를 전송하고, check PIN 블록은 IR 수신기의 응답을 변수에 즉시 저장합니다. 변수 irLeft 와 irRight 는 수신기가 객체의 적외선 반사를 감지하면 각각 0을 저장하고 객체가 감지되지 않으면 1을 저장합니다. (IR 수신기는 액티브 로우 회로로 설정됨을 기억하십시오.)
네 가지 조건을 가진 단일 if ... do 블록과 중요한 동작은 repeat forever 루프의 나머지를 이룹니다. 이러한 조건은 irLeft 및 irRight 변수의 결합된 상태를 확인합니다. 가능한 조건은 다음과 같습니다.
* 어느 센서도 물체를 감지하지 못합니다.
* 두 센서가 모두 물체를 감지합니다.
* 왼쪽 센서 만이 물체를 감지합니다.
* 올바른 센서 만이 물체를 감지합니다.
조건은 한 번에 하나씩 순서대로 테스트됩니다. true 인 첫 번째 조건은 do ... 섹션에서 코드를 실행한 다음 프로그램 흐름이 repeat forever 루프의 맨 위로 돌아갑니다.
첫 번째 if ... 조건은 부울 비교 블록을 사용하여 irLeft 및 irRight 변수가 모두 1을 저장 하는지 여부를 테스트합니다. 즉, IR 수신기가 객체를 감지하지 않았으며 로봇카가 Robot drive speed left 64, right 64 로 전진할 수 있음을 의미합니다.
두 번째 if ... 조건은 부울 비교 블록을 사용하여 irLeft 및 irRight 변수가 모두 0을 저장하고 있는지 여부를 테스트합니다. 즉, 두 IR 수신기 모두 개체를 감지하고, 로봇카가 Robot drive speed left -64, right -64 로 후진할 수 있음을 의미합니다.
처음 두 조건을 건너뛰면 두 변수가 동일한 값을 저장하지 못함을 의미합니다. 따라서 다음 두 조건은 각 변수를 단독으로 테스트하여 둘 중 하나가 객체를 감지하는지 확인합니다.
세 번째 if ... 조건은 irLeft 가 0을 저장하고 있는지 여부를 확인합니다. 즉, 왼쪽에 물체가 감지되었고 로봇카가 Robot drive speed left 64, right -64 로 오른쪽으로 회전할 수 있음을 의미합니다.
네 번째 if ... 조건은 irRight 가 0을 저장하는지 여부를 확인합니다. 즉, 오른쪽에 있는 물체가 감지되었고 로봇카가 Robot drive speed left -64, right 64 로 왼쪽으로 회전할 수 있음을 의미합니다.
알고 계셨습니까?
Conserving Conditions - 이 프로젝트는 체크할 수 있는 조건이 네 가지 뿐이므로 if ... do 루프는 네 번째 테스트를 실제로 수행할 필요가 없습니다. 논리에 따르면 처음 세 조건이 거짓이면 네 번째 조건이 참이어야 합니다. 그래서 if ... do 구문에서 마지막 else ... if 문은 Robot drive speed left -64, right 64 블록을 포함하는 else입니다.
간결하고 쉬운 읽기 - 네 가지 조건 모두를 사용하면 가능한 짧을수록 코드를 이해하기 쉽도록 코드를 작성하는 예입니다. 프로젝트를 처음 개발할 때 가능한 한 코드를 이해하기 쉽게 만드는 것이 도움이 될 수 있습니다. 그런 다음 복사본을 저장하고 실제로 필요하지 않은 블록을 제거하여 더욱 간단하게 만듭니다. 그러나 코드를 공유하거나 매우 복잡한 프로젝트인 경우 코드를 읽을 수 있도록 하는 것이 현명할 수 있습니다.
시도해 보세요!
IR 리시버에 대한 가시광선 피드백을 추가하면 로봇이 예기치 않은 방식으로 작동하는 경우 발생 상황을 이해하는데 도움이 됩니다.
- 프로젝트 사본을 저장하고 이름을 IR Roaming Try로 지정하십시오.
- 브레드 보드의 왼쪽에 있는 빨간색 LED가 왼쪽 IR 수신기가 객체를 감지했을 때만 켜지도록 프로젝트에 블록을 추가하십시오. 마찬가지로 적색 LED는 적외선 수신기가 물체를 감지했을 때만 켜져야 합니다. 힌트 : if ... do 블록의 각 do ... 섹션을 변경해야 합니다.
- 수정된 프로젝트를 저장하고 로봇카를 다시 연결한 다음 코드를 EEPROM에 로드하십시오.
- 수정된 코드를 시운전하십시오. 로봇카는 이전처럼 작동해야 하지만, 물체가 감지되고 피할 때 빨간색 LED가 깜박입니다.
당신 차례 !
센서 입력, 조명 및 모션 출력 시스템 로직이 제대로 작동하는 경우 성능을 위해 튜닝할 시간입니다. 목표는 로봇카가 이 객체를 실행하거나 코 휠리를 사용하지 않고 가능한 빨리 탐색주행하는 것입니다.
- 프로젝트의 복사본을 IR 로밍 순서로 저장하십시오.
- 로봇카가 최적으로 조정될 때까지 드라이브 속도와 가속도를 반복적으로 늘려 테스트 사이클을 반복하십시오.