라즈베리파이
-
라즈베리파이를 이용한 자율주행 자동차SW/Project 2018. 2. 23. 19:00
자율주행자동차1. 개요자율주행자동차 키트와 센서를 사용하여 아래와 같은 트랙을 빠져나오는 프로젝트2. 개발 과정자동차 키트를 사용하고 초음파 센서 3개를 사용했다.하드웨어 조립조립측면앞처음에는 앞과 왼쪽에 초음파 센서를 사용하여 left hand알고리즘을 사용하려고 하였으나 오른쪽에 부딪힐 경우 예외처리로 빠져나오기 위해서 오른쪽도 센서를 달아 3개를 사용하였다.PID제어float ki,kp,kd;int speed=0,pre_speed=0,cnt=0;float err=0;float i=0;float d=0,p=0;float lsterr=0;float pivot; p=kp*err;i=i+ki*err;d=(err-lsterr) * kd;PID제어 데이터를 뽑은 결과 다음과 같이 나왔다.초흠파거리센서가 0.0..
-
[라즈베리파이] 자이로센서SW/Embedded 2018. 2. 4. 21:00
자이로/가속도센서(MPU6050) datasheet datasheet register map 각속도 / 회전속도를 구해준다. I2C를 사용한다.(SPI보다 느림,여러 장치들을 붙칠수있다. 리눅스에서는 /usr/include/linux/i2c.h 헤더 제공) 라즈베리파이에는 2개의 버스가 있다. #include #include #include #include #define MPU6050_ADDRESS (0x68) // i2cdetect -y 1 로 알아볼수잇다. #define MPU6050_REG_PWR_MGMT_1 (0x6b) #define MPU6050_REG_DATA_START (0x3b) int main() { int pi; if((pi = pigpio_start(NULL, NULL))
-
[라즈베리파이] 온도/습도 센서SW/Embedded 2018. 2. 4. 18:00
온/습도 - DHT22/AM2302 data sheet 1번 핀이 + 이다. 마지막 핀이 GND 이다. 데이터 케이블이 하나여서 하나의 핀으로 온도와 습도를 얻어 낼 수 있다. 파이-마스터 / 센서-슬레이브 습도 데이터 보내고 온도 데이터 보내고 페리티비트를 보낸다. 총 40 비트의(습도-16[8,8],온도-16[8,8],페리티비트-8[8]) 데이터를 보낸다. 걸리는 시간에 따라 0,1 구별한다.(데이터시트참조) 처음(초기화) 80마이크로 * 2를 보낸다. 총 43비트(연결 데이터 까지)
-
[라즈베리파이] ADC (아날로그 디지털 컨버터)SW/Embedded 2018. 2. 4. 17:30
ADC(MCP3208) datasheet 2.7~5.5V 가능하지만 클 수록 샘플링 속도가 빠르다. ch0~7 : 아날로글 신호 넣어주는곳이다. SPI : 통신규격 - 라즈베리파이 (라즈베리파이에서는 2개의 핀을 제공) raspi-config 에서 SPI on 확인 : lsmmod | grep spi 확인 : ls /dev/spi* -l 스티트 1, 싱글디프 1 , 채널 설정 #include #include #include #define BAUD_RATE1000000 #define LOOP1000 int main(int argc, char* argv[]) { int pi; int spi; uint16_t value; uint64_t sum = 0; uint16_t avg; int channel = 0; ..
-
[라즈베리파이] 초음파 센서SW/Embedded 2018. 2. 4. 15:08
초음파 센서 data sheet 한쪽은 송신하는 부분 한쪽은 받는부분으로 구별되있다. trig 핀 -쏘는 부분 / echo 핀 - 받는 부분 트리거에 10마이크로초를 주면 초음파(8개) 발생한다. 다시돌아오면 에코에서 받는다. 최대 한텀은 50마이크로 세컨드이다. // 10 마이크로세컨드를 만들자! include include include define TRIG_PINNO 16 define ECHO_PINNO 6 void cb_func_echo(int pi, unsigned gpio, unsigned level, uint32_t tick); //시간값저장(시작,끝) uint32_t start_tick_, dist_tick_; int main() { float distance; int pi; if ((pi..
-
[라즈베리파이] Shift RegisterSW/Embedded 2018. 1. 28. 10:33
74HC595 shift Register 제한된 GPIO핀을 확장하여 더욱 많은 제어를 할수 있다. 직렬,병렬로 변환하여 gpio를 확장 시켜준다. 많은 종류가 있지만 하나만 해도 다른 시프트레지스터도 어렵지 않게할 수 있을것이다. OE : output enable -칩의 온/오프를 담당한다. Ds : serial input data - 실제로 데이터가 들어가는 곳 이다. ST : 0에서 1을 해야 라이징이 발생하여 출력하는 저장소로 보내 출력한다. SH : 0에서 1 을해야 라이징이 발생하여 쉬프트한다. MR : 클리어 한다.(1을해야 쓸수 있다.) 9 번은 아웃풋으로 쉬프트레지스터를 추가 할때 다음 쉬프트레지스터의 인풋으로 들어간다.
-
[라즈베리파이] PWM 제어SW/Embedded 2018. 1. 26. 16:31
PWM PWM은 pulse width modulation의 준말로 펄스의 폭을 컨트롤 하는 주기 제어 방법이다. 펄스를 생성 (반복-이렇게 펄스를 생성 할 수 있지만...) int pin=13; gpio_mode(pin,아우풋); gpio_write(pin,1); // on sleep(); gpio_write(pin,0); //off sleep(); 한 주기(on=pulse width)-최대를 255이다. pigpiod_if2.h 헤더에서 함수를 제공해 준다. set_PWM_range(pi,PIN,range); //범위 설정 get_PWM_range(pi,PIN); //범위 가져오기 set_PWM_dutycycle(pi,PIN,i(0~range)); //불 키기, i값을 변화시켜 세기 조절 12,13 G..
-
[라즈베리파이] GPIO 제어 3가지 방법SW/Embedded 2018. 1. 12. 17:37
GPIO 입력, 출력 동시에 불가능 하다.(2가지 모드중 한가지를 선택) 핀은 한가지 이상의 기능을 하기도 한다.(데이터 시트 참조) 참고자료 제어 직접 레지스터에 접근 하여 사용하는 방법이 있다. 리눅스에서 제공하는 sysfs를 사용하는 방법이 있다. 라이브러리를 활용해서 제어할수 있다. 레지스터를 다루기 위해 먼저 출력/입력 모드를 설정한다. 1. 직접 레지스터에 접근하여 데이터 시트 가상주소 - 물리주소 - 버스주소가 있다. 리눅스의 응용 프로그램은 가상주소 접근만 가능하다. /dev/mem파일 을 사용하여 물리주소를 사용한다.(루트권한) 0핀~9 = 레지스터 0 , 10~19 = 레지스터 1 … 레지스터 6까지 있다.(데이터시트 참조) 선언 define MMAP_SIZE 4096 define GP..