RasberryPiTerabee 사용

 

( 환경 : Raspbian(Linux환경) , RasberryPi 2 B+ )

 

 

모형


구성

                             

                        TOF Sensor                                                                                             USB Adopter




면적

핀 구성

PIN

Function

1

+5V out

(use only to provide voltage levels to programming devices, max. 10mA!)

2

+5V out

(use only to provide voltage levels to programming devices, max. 10mA!)

3

SCLK (for SPI or flashing)

4

MISO

5

MOSI

6

Reset in

(pull to GND to reset)

7

Arduino compatible reset in

(to DTR)

8

User I/O 2

9

User I/O 1

10

SCL

11

SDA

12

RX(5V Lev)

13

TX(5V Lev)

14

Vcc(10V-20V)

15

GND



드라이버 구성



윈도우에서 사용 할 때는 드라이버를 직접 깔아서 사용했지만 Ubuntu 기반인 라즈비안은 인식되어있다.

보통은 /dev/ttyUSB0 혹은 1,2 .... 로 되어있다.



screen 명령어를 통해서 Access하게 되면



이런식으로 결과 값이 주르륵 나온다.

무슨소릴까... Binary 모드이기 때문이다.

모드를 바꿔봐야겠다.



사용 Mode

(Shift + Key)

Key

Mode

Function

P

정밀모드

정확한 값을 내기위해 내부 파라미터를 적용한다.

이 기능은 반복율과 반응속도를 줄여준다

F

속도모드

빠른 반복율과 반응속도가 보장되지만 판독의 정확성이 줄어든다.

B

바이너리 모드

출력상태를 Binary형태로 출력

T

텍스트 모드

출력상태를 Text형태로 출력

 


Shift + T (Text 모드로 변경해보면...)

우리가 원하든 mm 단위로 출력된다!


 

Arduino 초음파센서(HC-SR04) 사용하기


사용할 센서는 HC-SR04이다.


HC-SR04 센서는 초음파를 이용하여 거리를 측정할 수 있는 센서다초음파는 귀에

들리지 않을 정도의 높은 주파수(약 20MHz이상)의 소리를 말하며초당 340m의 속도를

갖는다이러한 초음파의 속도를 바탕으로 시간관련 함수를 응용하면 초음파를 활용하여

거리나 수위적설 등을 측정할 수 있다.

 

초음파 거리센서의 구조는 생각보다 간단하다총 4개의 핀으로 구성되어있으며 양끝의

VCC와 Gnd를 통해 전원(5V)을 입력받고, Trig핀을 통해 신호를 입력 받으면 초음파를

발신초음파가 다시 수신되면 Echo핀을 통해 신호를 출력한다센서는 5V에서 작동하며

약 15mA의 전류를 사용한다측정 범위는 최소 2cm에서 4m이지만 주변 환경에 의해

오차가 발생할 수 있다.



초음파 거리 측정

 

회로도 연결


Vcc,Pin13,12,GND 차례로 연결해주었다.



실제 연결 모습이다.


초음파 거리센서의 VCCGND는 전원(5V,GND)에 연결을 해주며 Trig는 초음파를 쏘기

위해 디지털 핀 출력 설정을, Echo는 초음파를 받기 위해 디지털 핀 입력을 설정해준다.



Source


int trig = 13; // 변수 trig를 생성하고 13를 대입한다

int echo = 12; // 변수 echo를 생성하고 12을 대입한다

 

void setup() {

pinMode(trig, OUTPUT); // trig(13)핀을 출력모드로 설정한다

pinMode(echo, INPUT); // echo(12)핀을 입력모드로 설정한다

Serial.begin(9600); //보드레이트를 설정합니다.

}

 

void loop() {

digitalWrite(trig, HIGH); // trig(13)핀에 HIGH신호를 보낸다

delayMicroseconds(10); // 10마이크로초(1/100,000) 동안

digitalWrite(trig, LOW); // trig(13)핀에 LOW신호를 보낸다

int distance = pulseIn(echo, HIGH) * 17 / 1000;

// 변수 distance = echo핀이 다시 HIGH신호를 받기까지의 시간 * 17/1000

Serial.print(distance); // 변수 distance를 출력한다

Serial.println("cm"); // 문자열 cm을 출력하고 줄바꿈

delay(200); // 딜레이 0.1

}

 

계산식


거리를 구하기 위한 식은 다음과 같다.

거리 = 시간 x 속도

거리를 구하기 위해서는 시간과 속도를 구해야하며, 시간과 속도는 다음과 같다.

 

속도 : 초음파의 속도는 초당 340m.

 

시간을 구하기 위해 pulseIn()이라는 함수가 등장했다. 위에서 사용한 pulseIn(echo,HIGH)

해석해보자면, echo핀이 HIGH상태에서 LOW신호를 받고, 다시 HIGH를 받기까지의 시간, 즉 다시

HIGH가 되기까지의 시간을 반환한다. , 10 마이크로초동안 쏜 초음파를 받기까지의 시간을

구하게된다.

시간: pulseIn(echo, HIGH); // 초음파가 돌아오는 시간

*17을 한 이유는 pulseln()함수로 구한 시간이 왕복 시간이기

때문입니다. 그렇기에 식에 나누기2를 합니다. /1000을 한 이유는 그냥 보기 좋게 cm로 단위를

맞추기 위함이다.

 

 

 

 

결과



Arduino LED 제어하기





모든 제어동작할 때 항상 기본적으로 시작하는 LED제어를 해보았다.




LED의 회로는 항상 간단하다.


소스

void setup() {

//LED 핀 설정을 해줍니다.

pinMode(11,OUTPUT);

}

 

void loop() {

//1개씩 순차적으로 켭니다.

digitalWrite(11,HIGH);

delay(500);

 

//1개씩 순차적으로 끕니다.

digitalWrite(11,LOW);

delay(500);

}

 

이 함수들을 간단히 이용한다면 사용자가 원하는 다양한 패턴을 사용할 수 있다.



=========================================================================


pinmode() : Arduino 보드의 pin을 입력 핀으로 사용할지 아니면 출력 핀으로 사용할지 설정하기 위하여 사용한다.

 

아두이노 우노에서는 20개의 디지털 입/출력 핀들이 제공되고 있습니다. 디지털 14 (D0 ~ D13), 아나로그 6(A0 ~ A5) 20개를 지원합니다. 즉 디지털 입출력 핀이 모자라면, 아나로그 핀들도 디지털 핀들로 사용 가능하다는 것입니다.

우선 사용할 핀들을 어떻게 사용할 것인지를 결정하는 명령이 바로 pinMode입니다.

문법

void pinMode(pin, mode)

pin은 디지털 입출력으로 사용할 핀 번호이며, modeINPUT, INPUT_PULLUP, OUTPUT과 같이 동작할 모드 값입니다.

설명

pin 값으로 디지털 핀들은 0 ~ 13 값으로 할당되고, 아나로그 A0 ~ A5 핀들은 14 ~ 19로 할당되어 사용됩니다. A0A5는 상수로 정의되어 있어 mode 값으로 같이 사용할 수 있습니다. A0 혹은 14를 사용하여도 같은 결과를 얻을 수 있습니다.

modeINPUT, INPUT_PULLUP, OUTPUT 3가지 모드를 지원하고 있습니다. OUTPUT은 핀을 출력 용으로 사용하고자 할 때 , INPUTINPUT_PULLUP은 둘 모두 입력 용으로 사용하고자 할 때 필요한 것이며, INPUT_PULLUP은 내부적으로 PULLUP 저항을 사용하여 외부에서 신호 값을 넣지 않을 경우에는 PULLUP 저항을 통하여 +5V가 공급되어 "1"로 읽히게 됩니다. 이를 간단한 회로도를 통하여 설명하는 것이 이해가 쉬울 것입니다.



digitalWrite() : digitalWrite(pin, value)는 디지털 출력 핀 pin에 정수 0(LOW) 혹은 정수 1(HIGH) 값을 써 출력 핀의 전압을 0V 혹은 아두이노 보드의 동작 전압에 따라 +3.3V 혹은 +5V로 만드는 함수

 

문법

아두이노에서 사용되는 모든 디지털 핀들의 번호 값을 pin에 넣고, 핀의 출력 전압을 0로 하고자 하면, 0 혹은 LOWvalue에 넣고, 출력 전압을 VCC로 하고자 하면 1 혹은 HIGH를 넣고 호출하면 됩니다. 아날로그 A0 ~A5 핀들도 디지털 핀들로 사용될 수 있으며, pinA0와 같은 값을 넣으면 됩니다.

void digitalWrite(uint8_t pin, uint8_t value)

주의하여야 할 사항으로 먼저 pinMode(...) 함수를 사용하여 핀의 동작 모드를 출력 모드로 설정한 후에 digitalWrite(...) 함수를 사용하여야 원하는 동작 결과를 얻을 수 있습니다. 물론 내부 풀업 저항으로 사용하기 위한 용도일 경우, 필요치 않습니다:

// 사용하는 3, 4, A0, A1 핀들을 출력 핀으로 설정합니다:

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(A0, OUTPUT);

pinMode(A1, OUTPUT);

 

digitalWrite(3, HIGH); // HIGH1과 같습니다

digitalWrite(4, 1); // 출력 핀을 VCC로 만듭니다

digitalWrite(5, HIGH); // 내부 풀업 저항으로 사용

// pinMode(5, INPUT_PULLUP)과 같은 효과

digitalWrite(A0, LOW); // LOW0와 같습니다

digitalWrite(A1, 0); // 출력 핀을 0volt로 만듭니다

또한 analogWrite(pin, value) 함수로 PWM을 신호를 발생하고 있는 출력 핀에 사용하면 당연히 PWM 신호 발생이 중단되게 됩니다.

 


Arduino 온도센서(LM35) 사용


아두이노를 접하면 기본적인 센서 중 하나가 온도센서 LM35이다.

작동전압은 작동 전압은 2.7V ~ 5.5V 이다.

0~100도까지 측정가능하다고 한다.

 

아래 이미지의 순서대로 연결하면 센서가 작동한다.


Source

float temperature;

int reading;

int lm35Pin = A0;

 

void setup()

{

analogReference(DEFAULT); // param

Serial.begin(9600);

}

 

void loop()

{

reading = analogRead(lm35Pin);

//temperature = reading/9.31; //1.1기준전압인 INTERNAL로 할 때 적용 식

temperature = (5.0 * analogRead(lm35Pin) * 100.0) / 1024;

Serial.println(temp);

delay(1000);

}

 

LM35센서에 적용되어 전압을 온도로 변환시키는 공식이 설명되어있다.


http://playground.arduino.cc/Main/LM35HigherResolution


temp = (5.0 * analogRead(tempPin) * 100.0) / 1024;

 

결과

analogReference(INTERNAL)


analogReference(DEFAULT)





====================================================

analogReference() : ADC의 기준전압을 설정하는 함수

param

-DEFAULT: analogReference() 함수를 사용하지 않고 analogRead() 함수를 사용하면 기본으로 동작하는 모드이며, analogReference(DEFAULT) 함수를 사용하면 5V 전압을 사용하는 아두이노 보드들에서는 5 볼트, 3.3V 전압을 사용하는 아두이노 보드들은 3.3 볼트를 아날로그 기준 전압 값으로 사용한다.

 

-INTERNAL: 내장 기준 전압을 사용한다는 의미이며, ATmega168ATmega328 MCU를 사용한 아두이노 보드에서는 1.1 볼트, ATmega8 MCU를 사용한 보드에서는 2.56 볼트가 아날로그 기준 전압이 된다. 이 설정은 아두이노 메가에서는 사용할 수 없다.

 

-INTERNAL1V1 (아두이노 메가 보드 전용): 내장 1.1 볼트를 아날로그 입력 기준 전압으로 사용한다는 의미다. 아두이노 메가 보드에서만 사용 가능하다.

 

-INTERAL2V56 (아두이노 메가 보드 전용): 내장 2.56 볼트를 아날로그 입력 기준 전압으로 사용한다는 의미이며, 아두이노 메가 보드에서만 사용 가능하다.

 

-EXTERNAL: AREF 핀에 외부 전원(0에서 5V 사이의 전압만 사용하여야 함)을 연결하여 기준 전압으로 사용할 수 있다.

경고

===

0V 보다 작거나 5V 보다 높은 외부 전압을 AREF 핀에 연결하지 안됨. AREF 핀에 외부 기준 전압을 연결하여 사용하고자 하면, analogRead() 함수를 사용하기 전에 꼭 EXTERNAL로 기준 전압을 설정해야 한다. 이렇게 하지 않으면, 내부에서 만들어낸 기준 전압과 외부에서 AREF 핀으로 공급되는 전압이 합선되어(short) 아두이노 보드의 마이크로컨트롤러를 손상시킬 수 있다.

 

다른 방법으로서, 외부와 내부 기준 전압을 번갈아 가며 사용할 수 있도록 외부 기준 전압을 5K 저항을 통하여 AREF 핀에 연결할 수 있다. 이렇게 저항을 통하여 외부 기준 전압을 공급하면 AREF 핀에 내부 저항 32K가 연결되어 있어 외부 기준 전압과 다른 전압이 AREF 핀에 공급되게 된다. 두 저항이 전압 분배기와 같이 동작하기 때문이며, 예를 들어 2.5V가 저항을 통하여 AREF 핀에 공급되면, AREF 핀의 전압은 2.5 * 32 / (32 + 5) = ~2.2V가 된다.

 

 



Arduino Tool 설치

 

www.arduino.org 접속한다.


다운로드 탭에서 PC설정에 맞는 설치파일로 받는다. 나는 Window라 Window로 받았다.


설치파일 실행하면 이런 창이 뜬다 "I Agree"


기본설정으로 설치하였다. "Next"


Driver들을 설치해주어야한다. "항상 신뢰 후 설치"


설치 된 항목을 확인할 수 있다.




장치관리자에서 설치가 되었는지 확인할 수 있다.


처음 실행한 Arduino Sketch 모습이다.


사용하고자하는 Board 설정을 해준다.


아까 장치관리자에서 확인한 컴포트 넘버링을 설정해준다.


기본적으로 예제들을 제공하고 있어 손쉽게 다룰 수 있다.


 

 

1. 라즈베리파이 업데이트 및 업그레이드 실시

 

  sudo apt-get update

  sudo apt-get upgrade 

 

2. 소스관리툴 git 를 다운로드 (오픈소스 https://github.com/WiringPi/WiringPi 의 소스를 가져오기위해)

 

  sudo apt-get install git-core

 

3. “wiringPi” 프로젝트를 받아온다.

 

  git clone git://git.drogon.net/wiringPi

 

4. 빌드 및 설치

 

  cd wiringPi
  ./build

 

5. 아래의 명령어로 설치 확인

  gpio -v gpio readall

  

gpio readall을 해서

 

핀 구조가 나오면 wiringPi 라이브러리 설치 완료가 된것이다.

 

 

LED 회로를 간단하게 구성

 

 

vi에디터를 이용해 C언어를 제작

#include <stdio.h>
#include <wiringPi.h> // 라즈베리파이의 GPIO를 하기위해 아까 받아놓은 라이브러리를 사용

 

#define LED1 4         // GPIO 23 의 핀번호를 정의하기위해 #define 사용

 

int main(void)
{

 if (wiringPiSetup () == -1)
 return 1;                        

 // wiringPisetup() 함수는 라즈베리파이에서 현재 핀 번호가 제대로 다 매핑되어 GPIO기능을 할 수 있는지 검사하는 함수 [-1일땐 GPIO 작업 불능]

 

 pinMode (LED1, OUTPUT); // pinMode()는 보통 센서를 정의하고 어디에 사용 될건지 명시

 

 for(;;)
 {
  digitalWrite(LED1, 1);  // digitalWrite() 혹은 digitalRead()로 센서로 부터 데이터를 읽거나 출력

  delay(1000);

  digitalWrite(LED1, 0);  // 1은 ON 2는 OFF

  delay(1000);
 }
 return 0;
}
 

 

프로그램 컴파일

 

gcc -o gpio-test1 gpio-test1.c -lwiringPi

 

 

위의 컴파일 명령을 실행해 주면 gpio-test1 이라는 실행 파일이 생성

 

5. 프로그램 실행

 GPIO 관련 프로그램 실행은 항상 루트 권한으로 실행 (sudo 명령어)

GPIO23에 연결된 LED가 켜진 후, 1초 대기, 그리고 두 LED가 모두 꺼지는 작업을 반복 수행

프로그램 종료는 Ctrl + C 로 종료

 

 

 

sudo ./gpio-test1

.

 

 

라즈베리파이 원격 연결하기 위해 많은 정보를 찾아보았지만 블루투스 키보드, 무선 wifi 동글이 없는 상태라

 

남들 정보를 이용해서 하기엔 많은 어려움이 있었다.

 

이걸 성공하는데 오래 걸렸지만 어렵지는 않았다.

 

 

1. (iptime을 이용하였음) 랜 선을 라즈베리파이에 연결해주었다.

 

2. http://192.168.0.1 로 접속을하면 iptime 설정 사이트에 들어갈 수 있다.

 

 

들어 갔을 때 관리자명과 비밀번호를 입력하라는 메세지가 떠서

 

wifi단말기 뒤에잇는 rst 버튼을 15초 꾹 눌러 리셋 시켜주었다. 다시 비밀번호를 묻지 않았다.

 

 

3. 관리도구에서

 

 

 

고급설정 - 내부 네트워크 정보를 보면 아이피 정보를 얻을 수 있다.

 

4. putty 혹은 xshell 등 원격 접속 프로그램을 이용해 접속한다.

 

나는 xshell 을 사용 해왔어서 xshell을 이용해 접속 했다.

 

라즈베리파이의 기존 아이디와 비밀번호는

pi/raspberry 로 설정 되어있다.

 

 

 

 

 

5. 기본 설정

 

$ sudo raspi-config

 

이명령어를 치면 언어, 시간, 키보드 등 설정을 할 수 있다.

 

 

6. 원격제어 설치

 

접속 후 라즈비안 xrdp를 설치

 

$sudo apt-get update

$sudo apt-get install xrdp

 

 

7. 원격 접속

윈도우 보조프로그램의 원격 데스크톱 연결을 실행

 

 

라즈베리파이2의 ip를 입력 후

위의 id/pwd 를 입력 하게 되면

라즈베리가 보입니다. 

 

완성!

 

 

 

라즈베리파이3을 구입하기 원했지만 해외배송이 너무 비싼지라

메카솔루션에서 제공하는 '라즈베리 종결키트'! 를 구입했다.

해당 사이트 : http://roboholic1.godo.co.kr/shop/goods/goods_view.php?goodsno=7748&inflow=naver&NaPm=ct%3Dimhbuo94%7Cci%3D9e15ad0ac38c6432801837d6e3b9bf4ec5bdd81c%7Ctr%3Dsls%7Csn%3D188145%7Chk%3D986871c786f96bbb1ef1cfcbb35468e1f036b90b

 

구성품으로는 아래와 같다. 

 옵션은 따로 추가할 시 추가 요금이 든다.

 

많은 센서를 사용해보고 싶다면 메카솔루션의 종결키트를 추천한다!

 

배송 물품을 개봉할 때 모습

 

학부생일 때도 자주 이용했지만 열심히 공부하는 고객을 위한 약과~ 정말 맛있다. 또 상품 손상을 고려해 틈틈히 감싼 뽁뽁이 안전하게 배달안오면 이상할 정도로 잘되있다.

고객을 향한 배려가 엿보이지 않는가 싶다. 

 

구성품은 하나도 빼먹지 않고 잘 도착했다.

 

드디어 라즈베리파이에 입문하게 되었다. 두근두근 설리설리~_~

 

메카솔루션 위에 url을 타고 들어가시면 해당 제품에 대한 자료들을 많이 제공한다.

제품에 대한 정보 뿐 아니라 사용법 등 2차 서비스까지 받을 수 있다.

 

이제 라즈베이파이를 만져보로 고고싱~

 

 

 

 

+ Recent posts