Home » 산딸기 가지고 놀기 » 라즈베리파이 GPIO 활용강좌 : 라즈베리파이 위 Atmega328p(멀티두이노)로 서보모터 제어하기

라즈베리파이 활용강좌 : 라즈베리파이 위 Atmega328p로 서보모터 제어하기

Created Date: 2013.11.11

Modified Date: 2013.11.11

revision 1

 

안녕하세요 산딸기마을 팬더골드 입니다.

Raspberrypi는 여러 면에서 정말 괜찮은 하드웨어라고 생각합니다.

반면에 정말 짜증날 정도로 안타까운 기능들이 많이 있습니다.

예를 들면, Analog가 없다든지, 전력때문에 완전 고생한다던지..

그중에 하나인 불안정하고 적은 PWM포트를 보안하기 위해 Atmega328p를 연결해보았습니다.

목적은 서보모터를 돌리기 위함 입니다.

Raspberrypi 와 Atmega328p를 SPI, Serial 연결을 한 후, Raspberrypi 로 Atmega328p에 연결된 서보모터를 PWM제어 해보았습니다.

Raspberrypi Atmega328 Diagram

[그림1] Multiduino Diagram

 

0.1. HardWare

Hardware Configuration 은 이전의 포스트를 참고하시기 바랍니다.

라즈베리파이 GPIO 활용강좌 : 라즈베리파이로 멀티두이노(ATMEGA328) 만들기

라즈베리파이 GPIO 활용강좌 : 아두이노(멀티두이노) LED 켜기

[그림2] Multiduino 결선도

0.2. Arduino Compiler for Atmeaga328p

역시 Rasperrypi로 Arduino Compile & Upload 방법은 이전의 포스트를 참고하시기 바랍니다.

라즈베리파이 활용 강좌 : 라즈베리파이 커맨드창에서 알피노(아두이노) 컴파일 및 업로드 하기

다음의 시리얼통신 소스코드도 참고하시기 바랍니다.

라즈베리파이 활용 강좌 : 라즈베리파이와 알피노 시리얼통신하기

1. Cloning Source Code on Git Repository

Source Code 는 git repository 에 저장되었습니다.

pi@rasplay $ git clone https://github.com/rasplay/servoMultiduino.git

Source Code 는 3개의 file로 되어있습니다.

. servoMultiduino.ino : Atmega328p에 upload될 File 입니다.

주요 기능은 Serial로 Data를 받아 Data가 의미하는 값으로 모터를 위치시킵니다.

. Servo.py : Serial통신과 PWM제어를 위한 Library입니다.

. pi_servo.py : Servo.py를 사용한 간단한 PWM 예제입니다.

2. Upload Using SCONS tool

atmega328p로 servoMultiduino.ino file을 upload하는 방법으로 저는 scons를 사용하였습니다.

0.2.의 컴파일 방법을 숙지하시고 설치하신후 사용 가능합니다.

pi@rasplay $ git clone https://code.google.com/r/kylecgordon-arscons/
pi@rasplay $ cd servoMultiduino
pi@rasplay $ cp ../kylecgordon-arscons/SConstruct .

scone tools 를 실행하여 compile 및 upload를 시행합니다.

pi@rasplay $ scons ARDUINO_PORT=/dev/ttyS0 ARDUINO_BOARD=multiduino ARDUINO_VER=1.0.1 ARDUINO_HOME=/usr/share/arduino upload
참고로, 위의 option중  ARDUINO_BOARD=multiduino 를 사용하기 위해 아래의 파일의 첫줄부터 추가하였습니다.
옵션은 Gertboard 의 옵션을 참고하였습니다.
pi@rasplay $ sudo vi /usr/share/arduino/hardware/arduino/boards.txt
  1. ##############################################################
  2. multiduino.name=Raspberrypi with ATmega328p (GPIO)
  3. multiduino.upload.using=gpio
  4. multiduino.upload.protocol=gpio
  5. multiduino.upload.maximum_size=32768
  6. multiduino.upload.speed=57600
  7. multiduino.upload.disable_flushing=true
  8. multiduino.bootloader.low_fuses=0xE7
  9. multiduino.bootloader.high_fuses=0xDA
  10. multiduino.bootloader.extended_fuses=0x07
  11. multiduino.bootloader.path=atmega
  12. multiduino.bootloader.file=ATmegaBOOT_168_gert328.hex
  13. multiduino.bootloader.unlock_bits=0x3F
  14. multiduino.bootloader.lock_bits=0x0F
  15. multiduino.build.mcu=atmega328p
  16. multiduino.build.f_cpu=16000000L
  17. multiduino.build.core=arduino
  18. multiduino.build.variant=standard

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700