보스프로그램 언어 및 키트 활용에 관한 교육용 ppt (3차 수정)
목차 1부. 보드 운영체제와 MCU 보드의 포트 2부. 전압과 전류 그리고 모터 드라이버 3부. 초음파 센서 4부. BOS Script 프로그래밍 5부. W2R -1 소개
1부. 보드 운영 체제 와 MCU 보드의 포트
1-1.보드 운영 체제 (BOS :Board Operating System) 임베디드 보드를 위한 운영 체제 ( vs DOS : Disk Operating System ) 코어프로그램, 명령어처리기, 파일시스템 으로 구성 스크립트 파일을 카피 혹은 다운로드. 스크립트 파일을 명령어 처리기가 로드 하고 실행
1-2 핀(Pin)과 포트(Port) 전원 핀 (VCC, GND) 핀(Pin) = 한가닥의 선. 시리얼 통신 핀 (UART) 일반 목적 입출력(GPIO) General Purpose Input / Output Pins 포트(Port) = 항구... 이런 핀들을 모아 놓은 것. PORTA ( 16 Pins ) PORTB ( 16 Pins )
1-3 메인보드의 외부 PORT-M/T 외부 포트 M 외부 포트 T 녹색 LED : $portc 0번째 bit PC0
1-4 GPIO PORTC의 Pin0 제어 전압 3.3V 전압 0V $portc = 0x0001 혹은, setbit $portc 0 setbit $portc 0 3.3V GND PC0 미션 1. LED를 꺼보자. resetbit $portc 0 Q. PC0 모터 GND를 연결하면 작동할까? 녹색 LED : 켜짐
2부. 전압과 전류 그리고 모터 드라이버
2-1 전압과 전류의 개념 전압 (V) : 단위 : V (볼트) 전류 (I) : 단위 : A (암페아) 전력 (P) = I*V 물 물 높이 = 전압 (V:볼트) 순간적으로 흐르는 물의 양 (전류 - A:암페아) 높이 = 전압 (V:볼트)
2-2 MCU의 GPIO포트의 전류와 배터리 전류 MCU GPIO Pin BAT 3.3V GPIO핀의 출력 전류는 작다(수십mA) 수 ~ 수십mA 3.3V 배터리가 순간적으로 쏟아낼 수 전류는 크다 (수백mA) 수백 ma
2-3 MCU의 GPIO포트의 전류와 배터리 전류 MCU GPIO Pin BAT 3.3V GPIO핀의 출력 전류는 작다(수십mA) 수 ~ 수십mA 3.3V 배터리가 순간적으로 쏟아낼 수 전류는 크다 (수백mA) 수백 ma
2-4 모터 드라이버 보드 (DRV 8833) GPIO핀의 출력 전류는 작다(수십mA) BATT: 4.5V GPIO 포트 제어 H- Bridge 모터 드라이브 칩 (DRV 8833)
2-5 모터 드라이버 보드 제어 PortC 4,5,6,7 PortC:0000 0000 0101 0000 => 0x0050 (Forward) (2) (1)
2-6 모터 드라이버 작동 실습 미션 1. 두 바퀴를 모두 전진 시켜 보자 $portc = 0x50 ( 0101 ) 미션 2. 두 바퀴를 모두 후진 시켜 보자 $portc = 0xA0 ( 1010 ) 미션 3. 로봇을 왼쪽으로 회전 시켜 보자 (오른쪽바퀴만 구동) $portc = 0x10 ( 0001 ) 미션 4. 로봇을 오른쪽으로 회전 시켜 보자 (왼쪽 바퀴만 구동) $portc = 0x40 ( 0100 ) 미션 5. 로봇을 왼쪽으로 회전시켜 보자 (두바퀴 다 구동) $portc = 0x90 ( 1001 ) 미션 6. 로봇을 오른쪽으로 회전 시켜 보자 (두바퀴 다 구동) $portc = 0x60 ( 0110 )
3부. 초음파 센서
그림: http://www.devicemart.co.kr/ NT-TS601 초음파 센서 참조 3-1 초음파 센서 Trigger Trigger Echo Echo 물 체 Trigger -Echo 시간 짧다 (가깝다) 물 체 Burst Pulse Trigger -Echo 시간 길다 (멀다)
3-2 초음파 센서 사용 초음파 거리 환산 공식 리턴값 = 거리(cm) * 20 +10 ex> 50 = 2cm ( 최소 인식거리) 90 = 4cm 170 = 8cm 330 = 16cm 주) 초음파는 오차가 5-10%정도 발생합니다. VCC5 GND PA0 PA1 : : : : VCC (1) GND (4) Trigger (2) Echo (3) Trig Echo 외부 포트 T $x = usonic $porta 0 1 Print $x
3-3 초음파 센서 작동 실습 미션 1. 초음파 센서 의 값을 읽어 프린트(println) 해보자. $x = usonic $porta 0 1 Print $x 미션 2. 초음파 센서의 값을 찍어보니, 한번만 찍힌다. 프로그램을 짜서 계속 값을 확인해 볼 수는 없을까? => 이후 스크립트 제어문 학습 (loop_start loop_end)
4부. BOS Script 프로그래밍
4-1 보스 스크립트 문법 변수 : $a~$z 처럼 '$'로 시작 키워드: #if 함수: print 처럼 영문으로 시작. #then 처럼 '#'로 시작 ex1.변수사용 예 $x=10 $y=20 $z=$x+$y Print $z ex2.포트 변수 $portc=1 ex3.16진수 사용 $portc=0x00ff
4-2 보스 스크립트 문법 - 제어문 판단문 : #if ~ #then ~ #endif 반복문 : #loop_start ~ #loop_end, #break 호출문 : #call, #function, #return ex1.판단문 ex2.반복문 $x = usonic porta 0 1 #if $x<300 #then Print 장애물 #else Print 길 #endif $x<300 '참' Print 장애물 '거짓' Print 길 $x =0 #loop_start $x = usonic porta 0 1 Print $x #if $x > 100 #then #break #endif #loop_end ex3.호출문 $x = 10 #call x_pow Print $x #quit #function x_pow $x = $x * $x #return
4-3 보스 스크립트 함수 포트제어: setbit, resetbit, getbit 입출력 : print, println, putch, printx, printxln, getch 초음파 센서 : usonic 아날로그 입출력 : readadc / writeadc LCD 제어 : lcddata, lcdcmd 문자열 : strcmp, strncmp 파일관련 : fopen, fclose, fread, fwrite 시간 : clock, clockset, delay Delay 함수의 시간 1sec = 500000 ex> delay 50000 => 100ms 딜레이 ex> #define SEC 500000 $d = SEC * 3 delay $d => 3초 딜레이 SPI : spisend, spiinit 자세한 함수 설명은 http://www.boardos.co.kr/manual.html 참고
4-4 시계 프로그램 실습 0:0:0 0:0:1 0:0:2 12:32:58 12:32:59 12:33:00 // // // // =============================== BOS Script Sample Clock code =============================== #loop_start $t = clock $h = $t / 3600 $m = $t % 3600 $m = $m / 60 $s = $t % 60 //-------------------println $h ":" $m ":" $s //--------------------#loop_end #quit 주) clock함수는 부팅 이후 지나간 '초'(sec)를 반환합니다.
// // // // 4-5 구구단 프로그램 실습 $x $y $z =============================== BOS Script Sample GuGuDan 구구단 =============================== $x =1 한 단 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*2=4 2*3=6 2*4=8...... 8*8=64 8*9=72 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 #loop_start $y=1 1단 ~ 9단 ($x) 한단 수행 #loop_start $y = $y+1 $z = $x * $y PRINTLN $x "*" $y "=" $z #if $y >= 9 #then #break #endif #loop_end $x = $x+1 #if $x >=10 #then #break #endif #loop_end #quit
4-6 스크립트 파일 다운로드 방법 1) 메모장으로 스크립트 프로그램을 작성한후 test.sc로 저장합니다. (마지막 글자 입력후, 반드시 '엔터'키를 입력해야 합니다.! -줄바꿈) 2) [BOS] down test.sc 를 입력합니다. 3) 파일 전송 Xmodem Send를 누르고 전송할 파일( test.sc)을 선택하고 Open합니다. 4) [BOS] file 명령어로 파일이 생성되었는지 확인합니다.
4-7 유용한 BOS 명령어 1. 파일시스템 포맷하기 [BOS]format => 파일시스템에 문제가 없는 이상 명령을 수행할 필요가 없습니다. 2.기본적인 명령 스크립트 생성하기 [BOS]bscgen => 명령을 수행하면 아래 4개의 기본적인 스크립트 파일이 생성됩니다. 이미 생성되어 있을 경우 역시 수행할 필요가 없습니다. led.sc 422Bytes cat.sc 540Bytes time.sc 258Bytes speedtest.sc 562Bytes 3.파일 보기 [BOS] file 4. 파일의 내용 보기 [BOS] cat test.sc 5. 파일 삭제하기 [BOS]del test.sc 주) cat 명령어는 cat.sc라는 파일이 있어야 합니다.
4-8 autoexec.sc 파일 1. BOS 파일 중 autoexec.sc 라는 파일이 있을 경우 BOS는 부팅 후 이 스크립트를 자동으로 수행합니다. 자동으로 수행되길 원하는 스크립트가 있을 경우 다운 받을 때 다음과 같이 수행합니다. [BOS] down autoexec.sc 2. autoexec.sc 파일은 부팅 후 약 4초 이후에 수행됩니다. 3. autoexec.sc 가 수행되기를 원치 않는 경우, 부팅 후 4초 이내에 한 글자를 치면 [엔터]를 입력하면, autoexec.sc 는 수행되지 않습니다. ex> a[엔터] 4. autoexec.sc 를 완전히 삭제하기 위해서는 del 명령을 사용합니다. ex>[bos] del autoexec.sc
5부. W2R 1 소개
5-1 BOS W2R 1 (Board OS Wheel 2 Robot -1) * STM32F103VET MPU - 512K Flash. Max 72Mhz 작동 - BOS 적용 ( BOS Script 프로그래밍 구동 가능) * DRV8833 2채널 H-Bridge 모터 드라이버 - 전진. 후진. 좌/우 회전. * 4.5V (1.5V 건전지 3개) 구동 - 프로세서 및 모터 전원. * 견고한 바디 및 90 % 이상 볼트 / 너트 체결 구조. 임베디드 시스템 학습 - MPU / GPIO / LED - 모터드라이버 / 전압과 전류 - 초음파 센서 BOS 스크립트 언어는... PC 프로그래밍 - 간단한 스크립트 - 논리의 이해 - 기본적인 제어흐름 구동 로봇에 적용 - 자신만의 로봇 - 논리의 오류/실수 - 학습의 흥미 1. 기본적인 프로그래밍 언어의 요소를 갖추고 있습니다. 2. 별도의 개발환경이나, 컴파일 과정등이 필요없습니다. (text 실행 인터프리터) 3. 임베디드 시스템에 사용이 쉽도록 개발되었습니다.
5-2 BOS W2R 1 구동을 위한 BOS Script 예(1) 1.W2R 전진 $porta = 0x50 2.W2R 전진/후진 반복 #loop_start $porta = 0x50 Delay 1000 $porta = 0xA0 Delay 1000 #loop_end 3. 녹색 LED 켜기 Setbit $portc 0
5-3 BOS W2R 1 구동을 위한 BOS Script 예(2) 4.초음파 센서 입력 6. 기본적인 회피 주행 프로그램 $x = usonic $porta 0 1 Println $x #loop_start $x = usonic $porta 0 1 5.비교 / 판단 문 #if $x < 300 #then Println 장애물 #else Println 길 #endif #if $x < 300 #then $porta = 0x10 // left #else $porta = 0x50 // forward #endif #loop_end
5-4 BOS W2R 1 구동을 위한 BOS Script 예(2) 7. 좌/우 회피하며 진행하는 로봇 #define #define #define #define $d = 0 GO_LEFT 0x0010 GO_RIGHT 0x0040 GO_STRAIGHT 0x0050 MILI_SEC 100000 // turn dir #loop_start $x = usonic $porta 0 1 #if $x < 300 #then #if $d == 0 #then $portc = GO_LEFT #call till_way_on $d = 1 #else $portc = GO_RIGHT #call till_way_on $d = 0 #endif #else $portc =GO_STRAIGHT #endif delay MILI_SEC #loop_end //---------------------// usonic Sub routine // wait until way on //---------------------#function till_way_on #loop_start $x = usonic $porta 0 #if $x > 300 #then #break #endif #loop_end #return 1
5-5 BOS W2R 1 에 추가 장착 가능한 모듈들..