달력

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

'라즈베리파이/아두이노'에 해당되는 글 4

  1. 2016.02.08 서보모터 제어하기 from raspberry To Arduino 3
  2. 2016.02.08 Serial To Arduino
  3. 2016.02.08 Serial From Arduino
  4. 2016.02.08 아두이노 설치

제어 영상:

 



라즈베리 파이 ---데이터---> 아두이노:
라즈베리 파이가 아두이노와 시리얼 통신을 하기 위해서는 다음을 설치합니다.
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