2017 멀티캠퍼스/Raspberry Pi 15

#15 라즈베라파이 SPI 통신

//일시 : 2018.01.15 16:30PM ~ 18:00PM내용 : SPI 통신// SPISerial Peripheral Interface Bus동기화된 직렬 통신클럭라인 유무에 따라 동기식(유)/비동기식(무)동기식에는 SPI,I2C / 비동기식에는 UART,RS232 등Master장치는 데이터 프레임을 초기화하고 여러 Slave 장치들은 개별 slave 셀렉트 라인과 함께 동작할 수 있다. (여러개 붙어있는 slave를 select하는 형식으로 통신)마스터 모드, 슬레이브 모드로 통신 4가지 논리회로SCLK : Serial Clock (output from master) (Clock 전송 신호)MOSI; SIMO : Master Output(출력), Slave Input.(입력)MISO; SOMI ..

#14 라즈베리파이 CLCD

//일시 : 2018.01.15 11:20AM ~내용 : GPIO Character LCD​ ★★★FND에 온,습도 표시하는 거 해보기// CLCD(Character LCD)액정을 이용해 화소에 도달하는 빛을 선택적으로 투과,차단하여 문자를 표시2행 16열, 5 X 8 dot로 하나의 문자를 표시8bit / 4bit , 한 글자가 8bit이기 때문에 4bit를 이용할 시에 두 번 보내야함.GPIO핀 7개 할당. 3개는 제어신호로 사용, 4개의 핀을 통해 데이터나 명령 전송하여 CPU와 통신3.3V -> 5V로 전환해주기 위해 칩을 이용 RS핀 : 명령(rs=0)인지 데이터(rs=1)인지 구분을 해주는 핀, 명령일 때는 LOW, 데이터일 때는 HIGH로​ rs = 0 : 명령, rs = 1 : 데이터RW핀..

#13 라즈베리파이 FND

//일시 : 2018.01.12 9:10AM ~ 12:00PM내용 : FND// I2C FND7개의 LED를 배열하여 0~9까지의 10진수를 표시Dot제외 7개의 직사각형 LED로 하나의 수를 특정 위치에 표현7-segment라고도 함FND 개별 요소 하나를 8개 출력으로 생각해야 함(LED와 동일한 제어 방법) SEG_C0 ~ C5가 High이면 불이 켜짐.(6자리에서 어떤 것을 켤지 정함)SEG_A ~ H핀으로 숫자 하나를 제어.(어떤 숫자를 출력할 지 정함)총 6 + 8 = 14개의 핀을 GPIO에 물리기에는 너무 많으니까 하나의 칩을 사용해 GPIO칩에 두 개만 물리도록. 한 순간에 다른 여려 숫자를 만들기는 불가능. 하나 켜고 delay주고 그 다음 숫자 켜고... 빠른 반복으로 잔상 효과를 주..

#12 라즈베리파이 온습도 센서

//일시 : 2018.01.11내용 : 온,습도 센서// I2C TEMP / HUMI온습도 센서Read_address와 Write_address가 다름Datasheet 참고 실습- 현재 온,습도 출력 import smbus2 as smbus import time ​ bus = smbus.SMBus(1) addr = 0x40 ​ cmd_temp = 0xf3 cmd_humi = 0xf5 soft_reset = 0xfe temp = 0.0 humi = 0.0 val = 0 data = [0, 0] ​ try: bus.write_byte (addr, soft_reset) time.sleep(0.05) ​ # myMotor = motor() while True: # temperature bus.write_byte..

#11 라즈베리파이 조도센서

//일시 : 2018.01.11내용 : I2C light (조도센서)// I2C light (조도 센서)주변의 빛을 감지하는 센서조도 측정 범위는 0 ~ 65535 룩스(lx)내부에 16비트 A/D(아날로그 디지털 변환기)가 내장 -> 디지털 출력아날로그는 전압값(0~3.3V) -> 디지털 값(0~65535) Low, High디지털 출력 방식은 I2C 표준스마트폰의 자동 밝기 조절 모드이 기능을 활용한 앱 Pocketmode (주변의 밝기를 감지해 벨소리 조절. 예를 들어 스마트폰이 주머니나 가방같은 어두운 곳에 있을 때는 벨소리를 크게) SMBusSystem Management Bus마더보드에 있는 저속도 장치들과 통신하는데 사용하는 간단한 I2C 버스 (마더보드에서 전원부와 CPU간 시스템 통신을 위..

#10 라즈베리파이 Ultrasonic (초음파 센서)

//일시 : 2018.01.10 내용 : Ultrasonic Sensor(초음파 센서)// Ultrasonic Sensor (초음파 센서)초음파를 방사한 후 물체에 반사되어 돌아오는 시간을 계산해 거리를 파악. (Peri0 2cm ~ 400cm 거리 측정 가능)10마이크로 초 동안 Trigger핀에 High 신호 전달(StartTime) -> 초음파 발생시킴되돌아온 초음파를 감지하면 echo핀은 high에서 low출력으로 변함(endTime)따라서 echo 핀의 high 레벨 펄스는 거리에 해당.초음파 수신 시간(duration) = endTime - startTime물체와의 거리 = duration * 17000 실습거리 측정하여 출력하기돌아온 시간을 초음파 센서는 알고 있음. echo 핀을 통해 ra..

#9 라즈베리파이 PWM

//일시 : 2018.01.10내용 : PWM// PWM(Pulse Width Modulation)Pulse Width Modulation : 펄스 폭 변조전압의 on(high)/off(low)를 이용해 가변 전압을 얻기 위한 기술period : 한 사이클의 시간Duration(pulse 시간) : 한 사이클에서 high 시간Duty Cycle(사용률): 주기에 대한 on/off 시간의 비예를 들어 Duty Cycle 20%는 high 20, low 80주파수(frequency) : 1초에 몇 개의 cycle이 반복되는가. 단위는 Hz.1Hz => 1초에 period 1번 반복 (1s, 1000ms)100Hz => 1초에 100번 반복. 이 때 1 pulse는 1/100 초 (0.01s, 10ms)같은 ..

#8 라즈베리파이 Piezo 센서

//일시 : 2018.01.10 15:00~18:00내용 : Piezo Sensor, 초음파 센서// GPIO Piezepiezo buzzer의 동작 전압은 4~8v이고 AP의 GPIO전압은 3.3v가 최대 -> 증폭기를 통해 5v전압을 piezo에 전달.주파수 조절을 통해 음의 높낮이를 조절Piezo 연결된 BCM 13핀의 ON/OFF일정한 시간 간격으로 High, Low 출력 실습- 도, 레, 미, 파, 솔, 라, 시, 도 소리 출력 import RPi.GPIO as GPIO import time ​ GPIO.setmode(GPIO.BCM) gpio_pin = 13 scale = [ 261, 294, 329, 349, 392, 440, 493, 523 ] #도 레 미 파 솔 라 시 도 (주파수) GP..

#7 라즈베리파이 I2C 통신

//일시 : 2018.01.11 14:00 ~ 18:00내용 : I2C 조도센서, 온습도센서부저, 초음파, 소리내기 집에서 해보기// I2C 통신 (Inter Integrated Circuit)Inter Integrated CircuitI-Square-C 라고도 부르며 필립스에서 제안한 통신 방식두 개의 신호(SDA, SCL)를 사양하는 양방향 직렬 통신 방식하나의 Master, 다수의 Slave일반적으로 7-bits 주소 사용. 하나의 I2C 버스에 연결되는 개별 장치의 식별 용도로 활용세계 표준 프로토콜cpu 모듈 두 개의 선으로 여러 개의 디바이스를 제어하기 위한 인터페이스 (1:N 통신)하나의 Master와 다수의 Slave-> I2C 버스를 통해 많은 외부 장치들과 연결 OSDA(Serial D..

#6 라즈베리파이 PIR 센서 (움직임 감지)

//일시 : 2018.01.10 13:00 ~내용 : PIR Sensor// PIR(Passive Infrared) sensor물체에서 방출되거나 반사되는 적외선 파장의 움직임에 반응하는 센서24번 핀을 input으로 설정하여 주기적으로 검사 실습단순 움직임 감지 - 움직임을 감지하면 감지된 횟수를 출력 import RPi.GPIO as GPIO import time ​ GPIO.setmode(GPIO.BCM) ​ pir = 24 GPIO.setup(pir, GPIO.IN) ​ def loop(): cnt = 0 while True: cur_stat = GPIO.input(pir) if cur_stat == 1: cnt += 1 print("%d번 감지됨" % cnt) try : loop() except..