달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

제어 영상:

 



라즈베리 파이 ---데이터---> 아두이노:
라즈베리 파이가 아두이노와 시리얼 통신을 하기 위해서는 다음을 설치합니다.
sudo apt-get install python-serial python3-serial

라즈베리 파이는 "1500E" 라는 문자열을 보냄니다.
그러면 아두이노는 1500은 수로 바꾸어 인식하고, E를 인식하므로써 데이터 단위의 끝을 인식하게 됩니다.

E가 없으면 라즈베리 파이는 계속 데이터를 보내기 때문에 1500150015001500 이렇게 아두이노는 데이터를 받게 됨니다.
그러면 타이밍에 따라 인식하는 데이터가 5001이나 0051이 될 수 있습니다.
그렇기 때문에 E를 인식하는 순간, 여태까지 받은 데이터 1,5,0,0을 수치화 하여 변수에 저장하고 서보모터를 작동시키도록 한거임.


주의사항!:
서보모터의 VCC는 외부 서플라이로 연결해줘야 합니다!!
만먁 외부 전원 공급없이 라즈베리파이로 또는 아두이노로 전원을 받으면 라즈베리 파이가 갑자기 멈추거나 고장납니다~~
당연히 GND는 라즈베리, 아두이노, 서보모터가 공통이여야 하구요!


라즈베리 파이 파이썬 코드:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import RPi.GPIO as GPIO
import serial
import time
 
port = "/dev/ttyACM0"  //아두이노와 통신하기 위해서 포트를 설정한다.
serialToArduino = serial.Serial(port, 9600) // 9600으로 아두이노와 시리얼 통신을 한다.
 
//스위치 핀들을 입력 모드로 설정한다.
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN)
GPIO.setup(25, GPIO.IN)
 
//아두이노에 보낼 변수들
message = "1500"
endMark = 'E'
 
print "Ready to communication!" //파일 시작을 알리는 글
 
while True:
 if(GPIO.input(25) == True): //25번 핀에 연결된 스위치를 누르면
  message = "500" 
 elif(GPIO.input(24) == True): //24번 핀에 연결된 스위치를 누르면
  message = "2500"
 else//아무것도 누르지 않으면
  message = "1500"  
 
 serialToArduino.writelines(message) //보내고 싶은 데이터를 보낸다.
 serialToArduino.write(endMark)//데이터의 마지막을 알린다.
  
 print(" sendind message: " + message + str(endMark) ) //사용자가 확인할 수 있도록 터미널 창에 뜨는 글
 time.sleep(.5)


아두이노 코드:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const int servo=2;
int pw=1500;
char char_value = 0;
int int_value = 0;
const char endMark = 'E';
 
void setup()
{
  Serial.begin(9600);
  pinMode(servo, OUTPUT);
}
 
void loop()
{
   if(Serial.available())
  {
    char_value = Serial.read();
    if(isDigit(char_value))
    {
      int_value = (int_value*10) + (char_value - '0'); //each successive number is multiplied by 10. 
      //for example, the value of the number 234 is 2*100 + 3*10 + 4.
    }
    else if(char_value == endMark)
    {
      pw = int_value; //storge the received value from RPi
      int_value = 0; //reset int_value to 0 ready for the next sequence of digits
     }
  }
  
  drive_servo(pw); //input the high pulse delay
}
 
void drive_servo(int val)
{
  //period is 20ms.
  digitalWrite(servo, HIGH);
  delayMicroseconds(pw);
  digitalWrite(servo, LOW);
  delayMicroseconds(20000-pw);
}

 


'라즈베리파이 > 아두이노' 카테고리의 다른 글

Serial To Arduino  (0) 2016.02.08
Serial From Arduino  (0) 2016.02.08
아두이노 설치  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 8. 15:52

Serial To Arduino 라즈베리파이/아두이노2016. 2. 8. 15:52

이번에는 라즈베리에서 아두이노로 데이터를 보내보겠습니다.

라즈베리에서 온 신호를 아두이노에서 나타내기 위해 LCD를 사용했습니다.

라즈베리에서 신호가 오면 "Raspberry pi"라고 뜨고 신호가 없으면 "xxxxxxxxxxxx"라고 뜸니다.

 

 

 

 

1. 라즈베리 코드

import serial
import time

port = "/dev/ttyACM0"
serialToArduino = serial.Serial(port, 9600)

while True:
   serialToArduino.writelines("Raspberry pi")
   time.sleep(.5)

 

 

2. 아두이노 코드

#include <LiquidCrystal.h> //data that recieveed from RPi is represent on LCD attached on the arduino.

const int num_of_field = 12;
char value[num_of_field];

LiquidCrystal lcd(12, 11, 5,4, 3, 2);

void setup()
{
  Serial.begin(9600);
  lcd.begin(16,2);
}

void loop()
{
  if(Serial.available())
 //recieve date from RPi
  {
    delay(20); //for exact save
    for(int i = 0; i<num_of_field; i++)
       {value[i] = Serial.read();}
 //str storage
    print_on_LCD(); 
    delay(500);
 //depend eye effect, if this no, the data isn't seen due to so fast.
  }
  else
   { 
   for(int i = 0; i<num_of_field; i++)
      {value[i] = 'x';} //sign no data come
   print_on_LCD();}
}

void print_on_LCD()
{
 for(int i = 0; i<num_of_field; i++)
     { lcd.setCursor(i, 0);
       lcd.print(value[i]);}
}

 

 

3. 라즈베리 파이썬 파일 실행

LXTerminal창 켜고

cd ~ 저장해놓은 디렉터리 주소

sudo python 저장해놓은 파일이름.py

 

 

참고

http://blog.oscarliang.net/raspberry-pi-and-arduino-connected-serial-gpio/


'라즈베리파이 > 아두이노' 카테고리의 다른 글

서보모터 제어하기 from raspberry To Arduino  (3) 2016.02.08
Serial From Arduino  (0) 2016.02.08
아두이노 설치  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 8. 15:52

Serial From Arduino 라즈베리파이/아두이노2016. 2. 8. 15:52

라즈베리 파이와 아두이노가 소통하는 방식은 시리얼 통신인데요.

우선 아두이노가 0~255까지 숫자를 보내면 라즈베리가 그 숫자를 읽어서 커맨드라인에 표시되게 해보겠습니다.

 

 

1. 라즈베리에 파이썬 시리얼 모듈 설치

아두이노의 내장 되어있는 Serial 내장 라이브러리와 라즈베리의 pySerial 파이썬 모듈이 사용되요.

라즈베리의 시리얼 모듈은 수동으로 설치해야 하기때문에  다음을 입력합니다.

sudo apt-get install python-serial python3-serial

 

2. 아두이노 코드

아두이노 IDE를 열고 코드를 다음 코드를 아두이노에 업로드합니다.

void setup()

{Serial.begin(9600);}

 

void loop()

{

for(int n = 0; n<255; n++)

 { Serial.println(n, DEC);

    delay(50);

  }

}

3. 라즈베리 코드

다음 코드를 Serial_read.py로 저장합니다.

import serial

port = "/dev/ttyACM0"
serialFromArduino = serial.Serial(port, 9600) //아두이노에 연결된 시리얼 포트를 연다.

 

while True:
    input1 = serialFromArduino.readline()
 //문자열 전체를 입력 변수로 읽어온다
    print (input1) //출력한다.

 

4. 라즈베리 코드 실행

파이썬 파일을 실행하기 위해서 LXTerminal 창에 다음을 칩니다.

sudo cd /home/pi/BQT  //Serial.read.py를 저장한 폴더

sydo python Serial.read.py  //코드 실행

멈추려면 Ctrl + C

 


'라즈베리파이 > 아두이노' 카테고리의 다른 글

서보모터 제어하기 from raspberry To Arduino  (3) 2016.02.08
Serial To Arduino  (0) 2016.02.08
아두이노 설치  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 8. 15:51

아두이노 설치 라즈베리파이/아두이노2016. 2. 8. 15:51

1. 아두이노 IDE를 설치

라즈베리 파이에 아두이노 IDE를 설치하려면 다음을 입력한다.

sudo apt-get update

sudo apt-get install arduino

아두이노 환경이 프로그램 메뉴의 Electronic섹션에 등장한다.

아직은 실행 하면 안된다!!

 

 

2. 시리얼 포트 접근 권한 설정 

아두이노를 빈 USB포트에 끼우고 다음을 입력한다.

sudo usermod -a -G tty pi

sudo usermod -a -G dialout pi

 

 

3. 아두이노 실행 

이제 아두이노를 실행한다.

Tools -> Serial Port를 클릭하고 시리얼 포트를 선택한뒤, 아두이노 보드의 종류를 선택한다.

Blink 예제를 업로드 해 본다.


'라즈베리파이 > 아두이노' 카테고리의 다른 글

서보모터 제어하기 from raspberry To Arduino  (3) 2016.02.08
Serial To Arduino  (0) 2016.02.08
Serial From Arduino  (0) 2016.02.08
:
Posted by youjin.A

Gordons Projects”라는 블로그에서 C언어를 지원하는  “wiringPi” 라이브라리를 사용할 것이다. 

내가 이것을 배운 출처는 ​http://www.rasplay.org/?p=3241

 

 

 

1. wiringPi 라이브러리 설치하기

소스관리툴 git 다운로드

sudo apt-get install git-core

wiringPi 프로젝트를 통째로 받아온다.

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

빌드 및 설치 진행

cd wiringPi

./build 

설치가 잘 되었는지 확인

gpio -v gpio readall

 

2. 작업 폴더 및 .c파일 생성

File manager에서 /home/pi에 c_lang이라는 디렉터리를 만들었다.

c_lang 디렉터리 안에 c_lang_GPIO_OUTPUT.c라는 파일을 만들었다.

c파일 안에 다음 코드를 넣는데, 이 코드는 4번(#23) 5번(#24) 출력의 LED를 켜도록 한다.


Colored By Color Scripter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <wiringPi.h>
 
#define LED1 4 // BCM_GPIO 23
#define LED2 5 // BCM_GPIO 24
 
int main (void)
{
  if (wiringPiSetup () == -1)
  return 1 ;
 
  pinMode (LED1, OUTPUT) ;
  pinMode (LED2, OUTPUT) ;
 
  for (;;)
  {
    digitalWrite (LED1, 1) ; // On
    digitalWrite (LED2, 1) ; // On
 
    delay (1000) ; // ms
 
    digitalWrite (LED1, 0) ; // Off
    digitalWrite (LED2, 0) ; // Off
 
    delay (1000) ;
  }
  return 0 ;
}

 

 

 

3. 프로그램 컴파일

파일을 저장한 디렉터리로 들어가서

cd /home/pi/c_lang

다음 컴파일 명령을 실행해 주면 c_lang_GPIO_OUTPUT 이라는 실행파일이 생성된다. 

gcc -o c_lang_GPIO_OUTPUT c_lang_GPIO_OUTPUT​.c -lwiringPi 

 

 

4. 프로그램 실행

sudo ./c_lang_GPIO_OUTPUT

프로그램 종료는 Ctrl + C

'라즈베리파이 > GPIO' 카테고리의 다른 글

사운드 보드(파이썬)  (0) 2016.02.08
GPIO 입력(파이썬)  (0) 2016.02.08
GPIO 출력(쉘 스크립트, 파이썬 이용)  (0) 2016.02.08
GPIO 설치하고 테스트하기  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 8. 04:51

사운드 보드(파이썬) 라즈베리파이/GPIO2016. 2. 8. 04:51

이제 버튼을 누르면 녹음된 소리를 재생해주는 사운드 보드를 만들어 보자.

사운드 보드를 만드려면 .wav형식의 소리파일이 필요하다.

여러가지 재미있는 소리를 첨부파일에 올려놓았으니 이용하세요~~

 

 

1. 홈 디렉터리에 새로운 디렉터리를 만든다. 디렉터리명은 soundboard

만든 폴더에 새로운 파일 하나를 만든다. soundboard.py

첨부한 소리파일도 soundboard 디렉터리에 넣는다.

 

2. soundboard.py파일을 열고 코드 입력

import pygame.mixer

from time import sleep

import RPi.GPIO as GPIO

from sys import exit

 

GPIO.setmode(GPIO.BCM)

GPIO.setup(25, GPIO.IN)

GPIO.setup(24, GPIO.IN)

GPIO.setup(23, GPIO.IN)

GPIO.setup(18, GPIO.IN)

GPIO.setup(22, GPIO.IN)

GPIO.setup(27, GPIO.IN)

GPIO.setup(17, GPIO.IN)

 

pygame.mixer.init(48000, -16, 1, 1024) //파이게임의 믹서 초기화

 

soundA = pygame.mixer.Sound("/home/pi/soundboard/robot_explode.wav") //소리 로드

soundB = pygame.mixer.Sound("/home/pi/soundboard/drumsolo.wav")

soundC = pygame.mixer.Sound("/home/pi/soundboard/laugh.wav")

soundD = pygame.mixer.Sound("/home/pi/soundboard/playgame.wav")

soundE = pygame.mixer.Sound("/home/pi/soundboard/drumLick.wav")

soundF = pygame.mixer.Sound("/home/pi/soundboard/piano4.wav")

soundG = pygame.mixer.Sound("/home/pi/soundboard/drum1.wav")

 

soundChannelA = pygame.mixer.Channel(1) //7개채널설정. 서로 다른 소리를 동시에 재생할 수 있도록 소리 하나에 채널 하나씩

soundChannelB = pygame.mixer.Channel(2)

soundChannelC = pygame.mixer.Channel(3)

soundChannelD = pygame.mixer.Channel(4)

soundChannelE = pygame.mixer.Channel(5)

soundChannelF = pygame.mixer.Channel(6)

soundChannelG = pygame.mixer.Channel(7)

 

print "Soundboard Ready." //사운드보드의 준비 완료 상태 표시

 

while True:

     try:

        if(GPIO.input(25) == True): //핀에 HIGH 신호가 입력되면 다음 행 실행

            soundChannelA.play(soundA) //소리 재생

        if(GPIO.input(24) == True):

            soundChannelA.play(soundB)

        if(GPIO.input(23) == True):

            soundChannelA.play(soundC)

        if(GPIO.input(18) == True):

            soundChannelA.play(soundD)

        if(GPIO.input(22) == True):

            soundChannelA.play(soundE)

        if(GPIO.input(27) == True):

            soundChannelA.play(soundF)

        if(GPIO.input(17) == True):

            soundChannelA.play(soundG)

        sleep(.01)

     except KeyboardInterrupt: //사용자가 Ctrl + C를 누를 때 아무런 메시지도 보여주지 않고 깔끔하게 스크립트가 종료됨

         exit()

 

3. 커맨드라인에서 cd /home/pi/soundboard 를 입력하여 soundboard.py를 저장한 폴더로 이동하여 소스파일을 실행한다.

pi@ raspberrypi ~ /soundboard $ sudo python soundboard.py

 

4. "Soundboard Ready"라는 메시지 확인 후 버튼을 누르면 샘플 소리 재생

 

5. 라즈베리 파이 설정에 따라 소리파일 출력이 HDMI를 통해 출력 될수도 있고 오디오 잭을 통해 출력 될 수도 있다.

출력 방향을 변경하려면 Ctrl + C를 눌러 스크립트를 빠져나와서 다음 명령을 실행하면 오디오 출력 단자를 사용할 수 있다.

pi@ raspberrypi ~/soundboard $ sudo amixer cset numid=3 1

오디오를 HDMI모니터로 출력하려면 다음 구문 입력

pi@ raspberrypi ~/soundboard $ sudo amixer cset numid=3 2

:
Posted by youjin.A
2016. 2. 8. 04:51

GPIO 입력(파이썬) 라즈베리파이/GPIO2016. 2. 8. 04:51

이번에는 버튼이 3.3V인지 GND신호인지 판단하게 된다.

사용자가 버튼을 누르면 화면에 텍스트를 표시하는 파이썬 스크립트를 작성하고자 한다.

 

1. 버튼을 연결한다. 24번핀을 사용해야 하며 반드시 풀다운 저항을 사용해야 한다.

 

2. 홈디렉터리에  파일을 만든다. 나는 파일명을 button.py라고 했다.

 

3. 코드입력

import RPi.GPIO as GPIO

import time

 

GPIO.setmode(GPIO.BCM)

GPIO.setup(24, GPIO.IN) //24번 핀을 입력으로 설정한다.

 

count = 0

 

while True:

    inputValue = GPIO.input(24)

    if (inputValue == True): //변수가 참인지 판단.

         count = count +1 //참이면 카운터 증가

        print("Button pressed " + str(count)) //텍스트를 터미널에 출력

     time.sleep(.01) //잠시 기다림. 

 

4. LXTerminal 실행

pi@ raspberrypi ~ $ sudo python button.py

 

5. 버튼을 누르면 Button preessed와 함께 숫자가 뜬다.

:
Posted by youjin.A

쉘 스크립트

1. LXTerminal아이콘 더블 클릭~

 

2. 커맨드라인에 sudo su 입력

pi@ raspberry ~ $ sudo su

커맨드 프롬프트가 root@ raspberrypi:/home/pi# 이렇게 바뀐다.

 

3. 25번 핀의 LED를 켜고 끄기에 앞서 사용하려는 핀번호를 내보내기 파일(export)에 쓴다.

root@ raspberrypi:/home/pi# echo 25 > /sys/class/gpio/export

export파일에 핀 번호를 쓰면 해당 핀용 제어파일이 담길 새로운 디렉터리가 /sys/class/gpio/에 만들어진다.

여기서는 /sys/class/gpio/gpio25라는 파일이 만들어진다.

 

4. cd 명령을 사용하여 그 디렉터리로 이동한다.

root@ raspberrypi:/home/pi# cd /sys/class/gpio/gpio25

l(소문자 L)s 명령을 사용하여 현재 디렉터리에 어떤 파일과 폴더들이 있는지 본다.

root@ raspberrypi:/sys/class.gpio/gpio25# ls

actuve_low direction edge power subsystem uevent value

지금부터 작업해야 할 파일은 direction과 value파일이다.

 

5. direction 파일은 해당 핀을 입력이나 출력으로 설정하는 방식이다. LED를 켤려면 출력으로 설정.

root@ raspberrypi:/sys/class.gpio/gpio25# echo out > direction

 

6. LED를 켤려면 value파일에 1을 써야한다.

root@ raspberrypi:/sys/class.gpio/gpio25# echo 1 > value

엔터를 눌리면 LED가 켜진다!

 

7. LED를 끄려면 valud파일에 0을 쓴다.

root@ raspberrypi:/sys/class.gpio/gpio25# echo 0 > value

8. 루트에서 나갈려면 exit 입력

파이썬

LED를 켜​는 것은 이번에는 파이썬을 이용해서 구현 할 수 있다.

1. File Manager(파일 관리자)를 연다. 홈 디렉터리 /home/pi/에 있는지 확인한다.

 

 

2. 마우스 왼쪽버튼을 눌러서 Create New > Blank file 을 클릭하여 파일을 만든다. (이름, 맘대로).py 라고 이름을 지정한다. .py꼭 있어야됨. 나는 blink.py라고 했다.

 

3. 파일을 더블클릭하고 코드를 넣는다.

import RPi.GPIO as GPIO //GPIO제어에 필요한 코드를 가져온다.

import time //sleep함수에 필요한 코드를 가져온다.

 

GPIO.setmode(GPIO.BCM) //칩의 신호 번호를 사용한다.

GPIO.setup(25, GPIO.OUT) //25번 핀을 출력으로 설정한다.

 

while True: //들여쓰기를 한 코드 조각으로 무한 루프를 만든다.

     GPIO.output(25, GPIO.HIGH) //LED를 켠다.

     time.sleep(1) //1초 기달

     GPIO.output(25, GPIO.LOW) //LED 끈다.

     time.sleep(1)

 

 

4. LXTerminal을 열고 홈디렉터인지 확인한 다음 파일을 실행하자

pi@ raspberrypi ~ $ sudo python blink.py

LED가 깜박일 것이다.

 

5.Ctrl + C를 누르면 스크립트 종료하고 다시 커맨드 라인으로 돌아간다.

 

 

 

파이썬 언어 참고

https://wikidocs.net/57

'라즈베리파이 > GPIO' 카테고리의 다른 글

C언어를 이용한 GPIO 출력 (wiringPi )  (0) 2016.02.08
사운드 보드(파이썬)  (0) 2016.02.08
GPIO 입력(파이썬)  (0) 2016.02.08
GPIO 설치하고 테스트하기  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 8. 04:49

GPIO 설치하고 테스트하기 라즈베리파이/GPIO2016. 2. 8. 04:49

1. GPIO 모듈 가져오기

LXTerminal에 다음과 같이 친다

pi@ raspberrypi ~ $ sudo python

>>> import RPi.GPIO as GPIO

오류가 발생하지 않으면 준비끝!

 

 

2. 핀 모드 설정

다음 과 같이 친다

>>> GPIO.setmode(GPIO.BCM)

위 코드는 그림과 같은 방식으로 #이 붙은 해당 핀을 사용한다는 설정이다.
\

 

 

3. LED 테스트

25번 핀에 LED를 연결하여 출력을 테스트 해보자

참고로 라즈베리 파이의 디지털 입출력 신호는 반드시 3.3V 또는 접지여야 한다. 3.3V보다 높은 전압에 입력 핀을 연결하면 라즈베리 파이 고장남;;;

25번 핀을 출력으로 설정

>>> GPIO.setup(25, GPIO.OUT)

LED를 켠다

>>> GPIO.output(25, GPIO.HIGH)

LED를 끈다

>>> GPIO.output(25, GPIO.LOW)

파이썬의 대화형 인터프리터 종료

>>> exit()

'라즈베리파이 > GPIO' 카테고리의 다른 글

C언어를 이용한 GPIO 출력 (wiringPi )  (0) 2016.02.08
사운드 보드(파이썬)  (0) 2016.02.08
GPIO 입력(파이썬)  (0) 2016.02.08
GPIO 출력(쉘 스크립트, 파이썬 이용)  (0) 2016.02.08
:
Posted by youjin.A

와.. 어언 3개월 전 여름 방학때 라즈베리파이를 만지면서

어? 특수문자 입력이 이상하다 하다가 |(OR)가 안되는것 발견..

아무리 해도 안되.. 코드를 짜야되는데.. 포기포기 하다가..

3개월뒤 오늘 아주 쉽게 해결!!

 

커맨드라인에다가 아래와 같이 적고 키보드 설정에 들어간다.

#sudo nano /etc/default/keyboard

키보드 설정에 들어가면 기본 설정이 gb(아마도 Great Britain)인듯 인데 이걸 us로 바꺼준당!!ㅎㅎ

저장하고 재부팅하면 끄읏..

그러면 키보드 그대로~ 잘나옴.


# 라즈베리파이 잔여공간 확보

1. 터미널-> sudo raspi-config ->expand filesystem -> 자동재시작

2. 터미널-> df -h : 여유공간 확인(Avail의 총합이 사용가능공간임) 

 

'라즈베리파이 > 기본' 카테고리의 다른 글

라즈베리 파이 i2c 통신 하기!  (0) 2016.02.07
자동 로그인, 자동 프로그램 돌리기  (0) 2016.02.07
라즈비안 OS 설치  (0) 2016.02.07
:
Posted by youjin.A