Posts

Showing posts from January, 2017

LoRa 모듈 E22-900T22S Breakout Board 설계 2

Image
지난번 설계 에서 두 가지 업데이트 사항이 있다. 첫 번째로 3.3V 로 로직 컨버터를 거치지 않고 직접 통신할수 있는 포트를 구성하였다.  이 포트를 통해 3.3V 동작의 MCU를 사용할때 좀 더 빠르게 회로를 구성  할수 있을것으로 기대한다. 두 번째로 동작 전압 레벨이 서로 다른 MCU 와 Lora 모듈이 통신할때 사용할 기준전압을 직접 인가 할 수 있도록 하였다. 보드에는 위 와같은 점퍼가 주어지는데 3.3V 나 5V 로 점프 시키지 않을 경우 VREF 핀에 사용할 소스전압을 직접 인가해 주어야한다. 특수한 경우가 아니라면 Vref를 사용하는일은 없을것 같다. 위사 진들은 이번에 제작한 테스트 모듈이다.  왼쪽은 E22-900T22S 모듈이고 오른쪽은 ATmega328P/PB 3.3V 8Mhz 보드를 준비했다. 오른쪽의 보드는 ATmega328P/PB 를 모두 장착하여 사용할 수 있도록 설계했다. E22-900T22S 보드의 전체 회로는 다음과 같다. 동작 전압 레벨이 서로 다른 장치와 통신 할 수 있도록 레벨 컨버터를 추가 하였고, 핀 헤더를 장착하여 다른 MCU 보드와 통신하거나 점퍼를 수정해서 USB 시리얼 통신을 할수 있도록 했다. 모듈의 테스트는 mischianti의 E22 라이브러리 를 사용했다. 정리가 아주 잘 되어있는 라이브러리로 생각된다. 아래 코드는 라이브러리에 포함된 시리얼 입력을 LoRa 통신으로 전송하는 예제이다. Lora ATmega328p AUX D3 RX D4 TX D5 M1 D6/GND M0 D7/GND 송신측 코드 #include "Arduino.h" #include "LoRa_E22.h" LoRa_E22 e22ttl(4, 5, 3, 7, 6); void setup() { Serial.begin(9600); delay(500); // Startup all pins and UART e22ttl.begin(); Serial.println(&q

[Raspberry Pi] - rc카 만들기 #4 라즈베리 파이 부팅시 자동실행(Raspberry Pi Autostart)

Image
 #4 라즈베리 파이 부팅시 자동실행 지난번까지 작성한 스크립트를 Raspberry Pi가 부팅하면서 알아서 실행하도록 해보겠다. 우선 Raspberry Pi가 켜질때 스크립트 혹은 데몬을 자동으로 실행 시키는 방법에는 여러가지가 있다. 우선 시작하기 전에 자신이 작성한 코드가 정상적으로 작동하는지 확인을 한다. 데스크톱 화면이 나올때 실행하는 방법 프로그램 경로를 모르겠다면 whereis 나 which 명령어를 이용하면 알수있다. sudo nano /etc/xdg/lxsession/LXDE-pi/autostart @program root nano 편집기로 연후 경로를 포함해서 프로그램을 적어주면된다. @sudo /usr/local/bin/ds4drv @python  /home/pi/rc.py & rc.local을 편집해 부팅시 실행하는 방법 sudo nano /etc/rc.local 먼저 스크립트 상단에 다음과 같이 추가해준다. 스크립트나 데몬 뒤에 " &" 를 붙이는 이유는 파이가 부팅중에 루프에 빠지는 것을 막기 위함이다. 파이선 코드 맨위에 #!/usr/bin/env python 을 적어주면 명령어 앞에 python 없이 실행이 가능해진다. #!/usr/bin/env python call("sudo pgpio", shell=True) call("sudo ds4drv &", shell=True) #!/usr/bin/env python import  time from  subprocess  import  call   print ( "ds4drv load" ) call( "sudo /usr/local/bin/ds4drv &" , shell = True) time.sleep( 1

[Raspberry Pi] - rc카 만들기 #3 ESC 제어

Image
#3 ESC 제어 E042A 40A ESC 전자변속기(ESC) RC기기들의 브러시리스(Brushless) 모터 혹은 브러시(Brushed) 모터를 작동 시키는 것에 있어 핵심적인 부품이다. 여기서 ESC는 키보드 위의 그 esc가 아니라 Electronic Speed Controller의 이니셜이다. RC카를 접해본 사람들이라면 ESC와 트렌스미터 간 캘리브레이션(Calibration)이 필요하다는 것을 알것이다. 전자변속기는 모터에 PWM(pulse width modulation)신호에 따라 출력을 하는데 동일한 시간축에서 펄스폭이 넓을수록 모터는 더 큰 출력을 얻게된다. 여기서 필요한 작업이 캘리브레이션이다. 캘리브레이션이란 쉽게 말해 ESC가 Raspberry Pi로 부터 받은 값에서 얼마 만큼의 출력을 내야할지 알려주는 것으로 ESC통해 모터를 제어하기 위해 필수적인 작업이다. ESC에는 기본적으로 모터에 연결되는 2선(브러시드) 혹은 3선(브러시리스), 전원 단자(사진 deans), 스위치, 컨트롤러 선을 포함한 BEC단자가 있다. 위 사진속 제품 가장 오른쪽에 검정(Ground), 적색(6V), 흰색(Signal) 단자가있다. BEC출력이 6V로 Raspberry Pi의 전원으로 사용하기에 안전하지 않다. SERVO가 4pin(적색) 6pin(갈색) 7pin(황색)을 사용중이다. ESC는 9pin(검정색) 11pin(흰색)을 사용할 것이다. 저번에는 lxterminal을 열서서 스크립트를 실행전에 pigpio daemon을 따로 실행해야했다.  아래 처럼 프로그램 상단에 추가해주면 따로 실행 할 필요가 없다. 사전에 실행하고 싶은 다른 데몬이나 스크립트가 있다면,  call("실행할 프로그램",shell=True) 이런식으로 추가해주면 된다. 경우에 따라선 프로그램의 경로까지 명시해주어야 할 수도 있

[Raspberry Pi] - rc카 만들기 #2 Servo Motor

Image
#2 서보모터의 제어 rc 카의 주행 방향을 책임지는 서보모터를 제어해 보도록 하겠다. 라즈베리에는 GPIO 핀이있는데 이 핀들은  납땜없이 라즈베리와 현실세계를 연결해준다. 이런 점이 아두이노와 라즈베리 파이의 매력 중 하나라고 할 수 있다. 서보모터에는 3선이 달려있는데 전원선과 신호선으로 구분된다. 서보모터의 경우 갈색(그라운드), 적색(전원), 황색(신호) 이다. 또는 검정색(그라운드), 적색(전원), 흰색(신호)으로 된 것도 있다. 여기서 사용할 서보모터는 일반적으로 4.5~6V 의 전원으로 작동된다. 서보모터를 제어하는 방법으로는 여러가지가 있다. PWM 제어 서보를 제어하기 위해선 PWM이 필요한데 RPi.GPIO 라이브러리에 포함되어 있다 터미널을 열고 RPi.GPIO 라이브러리를 설치한다. sudo apt-get install RPi.GPIO PWM 파이선 예제 ServoBlaster 제어 sudo apt-get install git git clone git://github.com/richardghirst/PiBits.git cd PiBits/ServoBlaster/user make servod sudo ./servod 서보블라스터를 실행하면 사용 방법이 나온다. 사용가능한 핀을 확인한뒤 서보모터를 라즈베리 파이에 연결해준다. 적색(전원) - 4pin(5V) 갈색(그라운드) - 6pin(Ground) 황색(신호) - 7pin(GPIO4) 이제 서보모터를 움직여 보자. 값은 50에서 250사이의 값을 입력해주면 된다. echo 0=150 > /dev/servoblaster 서보 블라스터 파이썬 예제 pigpio 제어 sudo pigpiod 아래 예제를 사용하면 서보블라스터와 동일 하게 작동하지만  값은 500us에서 2500us 이

[Raspberry Pi] - rc카 만들기 #1 Start

Image
집에 굴러다니는 Raspberry Pi를 이용해 RC카를 만들어 볼것이다. 준비물. PC, Raspberry Pi, Servo Motor, 27T Brushed Motor, ESC(Electric Speed Controller) 배터리, 그외 RC카 부품들 #1 개발 환경 구축 Raspberry Pi를 이용해 개발을 하기 위한 방법 에는 여러가지가 있다. 저는 매번 모니터를 연결하여 사용하는 것이 귀찮기 때문에 윈도우의 보조 프로그램인 "원격 데스크톱 연결" 을 이용 할 것 이다. 1) 라즈베리에 xrdp를 설치한다. sudo apt-get update && sudo apt-get upgrade sudo apt-get install tightvncserver sudo apt-get install xrdp 2) Raspberry Pi와 PC를 LAN 캐이블로 연결하고 비지에 불이들어오는지 확인한다.     연결 공유 옵션이 꺼져있는 경우도 있으니 아래와 같이 설정한다.     이제 터미널을 열어서 IP를 확인.     192.168.137.185 이것이 Raspberry Pi의 IP이다. 3) 원격 데스크톱 연결을 열고 IP를 적고 연결을 클릭한다.     본인이 설정한 username 과 password 를 입력한다.     초기값은 다음과 같다.     username : pi     password : raspberry Thx .