IoT EDU/MAKE 플랫폼인 Circulus 를 이용하여,
라즈베리파이를 개발할 때 제공되는 API 가이드라인입니다.
이 가이드에서는
LED, 초음파센서, 7세그먼트, 온습도 센서, 조도 센서, SW/HW PWM, TTS, 카메라, 사운드인식, 위치파악, 모니터링, 광학문자인식(OCR) 등에 대해 단 몇줄의 자바스크립트만으로 제어하는 예제를 다루고 있습니다. 앞으로도 지속적으로 추가될 예정입니다.
Circulus API 목록
현재사용 가능한 API 목록은 아래와 같습니다.
LED
초음파 센서
7-세그먼트
온습도 센서
조도 센서
PWM 제어
TTS
카메라
음성인식
위치파악
시스템 모니터링
OCR(Optical Character Reader/Recognition-광학문자인식)
GPIO(General Purpose Input/Output)사용하기
- GPIO란? 신호를 보내거나 받을 수 있는 핀
- 센서나 외부 장치들과 정보를 주고 받음, BCM번호로 각 핀에게 명령을 내림
- 라즈베리파이의 GPIO는 입-출력 외에 또 다른 역할을 하는 핀들이 있음
GROUND : 0V
GPIO_XX : ~3.3V
3.3V : 3.3V
5V : 5V
BCM 번호
(각 핀의 일반 적인 이름)
추가 기능을 가진 핀
LED ON(led.js)
//circulus 모듈추가
const us = require(‘circulus’);
//GPIO 초기화(GPIO 23을 LED 제어로 사용함)
us.initLED(23);
//LED 설정 (true = ON, false = OFF)
us.setLED(true);
LED를 켜보자!
GROUND
GPIO23
11.
LED ON(led2.js)
//circulus 모듈추가
const us = require(‘circulus’);
//두 번째 값(led1,2는 각각 LED를 구분해주는 값)
us.initLED(23, ‘led1’);
us.setLED(true, ‘led1’);
us.initLED(18, ‘led2’);
us.setLED(true, ‘led2’);
여러 개의 LED를 켜보자!
GROUND
GPIO23
초음파 센서 원리
초음파를통해 일정한 거리 이내에 사물이 있는지 파악
사물과의 거리가 얼마나 떨어졌는지 측정
VCC : 5V GND : Ground
Trig : 초음파 전송 Echo : 초음파 수신
14.
초음파 센서 거리측정하기(distance.js)
// circulus 모듈 추가
const us = require(‘circulus');
// 초음파 센서 초기화
// initDistance (TRIG, ECHO);
us.initDistance(23, 24);
// 1초에 한 번씩 거리 측정
setInterval(function(){
console.log(us.getDistance() + ‘cm’);
}, 1000);
5V
GROUND
GPIO14
GPIO15
1초에 한 번씩 장애물과의 거리를 측정해보자!
7-세그먼트 출력하기(7-segment.js)
const us= require('circulus');
// SPI 연결 7 Segment 초기화
us.initText();
// 4자리 숫자, 텍스트 출력. 단 문자의 경우 표현 제약이 따름
us.setText('hipi');
/*
1초에 한 번씩 다른 숫자 출력
정수.toString() = 정수를 문자열로 변경함 ex) 1 ‘1’
var i = 0;
setInterval(function(){
us.setText(i.toString() + i.toString() + i.toString() + i.toString());
i++;
if(i === 10)
i = 0;
}, 1000);
*/
글자와 숫자를 출력해보자!
PWM이란?
펄스 값을 조절하여밝기나 강도를 조절하는 방식
EX) LED 밝기, 서보 모터 움직임
※ 1에 머물러 있는 시간이 길어질수록 밝아진다.
0
1
0
1
0
1
27.
H/W PWM 방식(pwm_hard.js)
varus = require('circulus');
us.initHPWM(18);
var num = 30;
var isRight = true;
setInterval (function(){
console.log(num);
us.writeHPWM (num) ; // 1번 핀에 PWM 신호를 보낸다
if (isRight){ num += 1; }
else { num -= 1; }
if (num === 120){ isRight = false; }
if (num === 30) { isRight = true ; }
}, 100);
PWM 단계에 의해 모터가 움직입니다.
5V
Ground
GPIO18
28.
S/W PWM 방식(pwm_soft.js)
varus = require('circulus');
us.initSPWM(19);
var num = 6;
var isRight = true;
setInterval (function(){
console.log(num);
us.writeSPWM (num) ; // 1번 핀에 PWM 신호를 보낸다
if (isRight){ num += 1; }
else { num -= 1; }
// 정밀도가 HW 방식에 비해 세밀하게 불가능 함
// 실제 동작하면, SW 방식은 정지 동작에서 떨림 현상이 발견됨
if (num === 24){ isRight = false; }
if (num === 6) { isRight = true ; }
}, 1000);
PWM 단계에 의해 모터가 움직입니다.
5V
Ground GPIO19
TTS 사용하기(index.js)
const us= require('circulus');
// 한글 TTS(한글 사용시에는 뒤에 true를 붙입니다.)
us.tts('안녕하세요 서큘러스 입니다', true);
// 영문 TTS
setTimeout(function(){
us.tts('Welcome to Circulus');
}, 10000);
문자를 입력하면 음성으로 출력합니다.
※ Audio 단자에 이어폰 혹은 스피커를 연결하여 결과를 확인할 수 있습니다.
카메라 사용하기(camera.js)
const us= require('circulus');
console.log('Taking Picture');
us.camera(function(data){
//촬영한 사진 관련 data 출력
//해당 data를 활용하여 모바일로 사진 전송 가능
console.log(data);
})
카메라 단자에 카메라를 연결합니다.
※ 카메라로 찍힌 사진은 /tmp 폴더 하위에 pic.jpg로 저장됩니다.
소리 인식하기(sound.js)
const us= require('circulus');
var exec = require('child_process').exec;
console.log('Sound Detector');
// 마지막 파라메터는 옵션임
// threshold - 소리 감지 레벨, 미 지정시 7
// timeWindow - 어느정도 소리가 안 들리면 끝낼지, 기본은 1초
us.listen(function(isDetect, listen){
if(isDetect){
console.log('Detected!')
} else {
console.log('Recorded!');
exec('aplay record.wav', function(){
// 또 다시 반복
listen();
})
}
}, { threshold : 10 });
연결된 마이크로 소리를 감지하면 녹음하여 재생합니다.
※ 테스트를 위해 usb단자로 연결하는 마이크를 사용하였습니다.
위치파악(location.js)
const us =require('circulus');
// WiFi 를 이용하여 현재 위경도 및 주소를 파악
us.getGeolocation(function(data){
console.log(data);
});
/* 결과값 예시
{
lat: 37.5378584,
lng: 127.0968571,
addr: '대한민국 서울특별시 광진구 구의3동 631-4'
}
*/
WiFi를 이용하여 현재의 대략적인 위치를 파악할 수 있습니다.
OCR 사용하기(ocr.js)
const us= require('circulus');
console.log('Get Text');
// English
us.getText('/home/pi/text_image.jpg',function(data){
console.log(data);
});
// Korean
us.getText('/home/pi/text_image.jpg',function(data){
console.log(data);
},true);
빛을 이용해 문자를 판독하는 기술로 문자를 추출합니다.
※ 테스트를 위해 /home/pi 폴더 하위에 저장된 ‘test_image.jpg’ 를 판독하는데 사용하였습니다.
정밀도에 의해 일부 이상한 글자가 보일 수 있습니다.