Skip to content
/ salad Public

시스템프로그래밍및실습(24-2) 프로젝트

Notifications You must be signed in to change notification settings

seolcu/salad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

샐러드 프로젝트 가이드라인

컴파일 & 실행 방법

Makefile을 사용하여 컴파일하고 실행합니다. 추가하고 싶은 소스 파일은 MakefileSRCS 변수에 추가하면 됩니다.

  • 컴파일: make
  • 실행: ./program
  • 빌드 결과물 삭제: make clean

Python3 가상환경(.venv) 활성화 방법

안전한 패키지 관리를 위해 가상환경을 꼭 활성화한 상태에서 패키지를 설치하도록 합시다.

source ./.venv/bin/activate

네이밍 컨벤션

  • 변수명은 snake_case로 작성합니다.
  • 함수명은 snake_case로 작성합니다.
  • 상수는 UPPER_SNAKE_CASE로 작성합니다.
  • 파일명은 snake_case로 작성합니다.
  • 들여쓰기는 4칸을 사용합니다.
  • 부품명은 띄우지 않고 한 단어로 표기합니다. (soilmoisture, dotmatrix, lightsensor, ...)

소켓 포트

  • LCD: 50000
  • TTS (Text-to-Speech): 50001
  • 대화 프로그램 (MOTION_DETECTED): 50002
  • 웹소켓 프로그램: 50003

라즈베리파이 핀 할당 표

터미널에서 gpio readall을 입력하면 핀 구조를 간단히 보여줍니다. 아래 표는 그것을 수정한 것입니다.

VSCode에서 Ctrl + Shift + V를 누르시면 아래의 표를 깔끔하게 보실 수 있습니다. GitHub에서는 그냥 보입니다.

할당 이름 이름 할당
브레드보드 왼쪽 (+) 3.3v 1 2 5v 브레드보드 오른쪽 (+)
LCD (SDA) SDA.1 3 4 5v X
LCD (SCL) SCL.1 5 6 0v 브레드보드 (-)
X GPIO. 7 7 8 TxD X
브레드보드 (-) 0v 9 10 RxD X
모션센서 (DATA) GPIO. 0 11 12 GPIO. 1 X
조도센서 (DATA) GPIO. 2 13 14 0v X
온습도센서 (DATA) GPIO. 3 15 16 GPIO. 4 X
X 3.3v 17 18 GPIO. 5 X
도트매트릭스 (DIN), MCP3008 (DIN) MOSI 19 20 0v X
MCP3008 (DOUT) MISO 21 22 GPIO. 6 X
도트매트릭스 (CLK), MCP3008 (CLK) SCLK 23 24 CE0 도트매트릭스 (CS)
X 0v 25 26 CE1 MCP3008 (CS/SHDN)
X SDA.0 27 28 SCL.0 X
X GPIO.21 29 30 0v X
X GPIO.22 31 32 GPIO.26 X
X GPIO.23 33 34 0v X
X GPIO.24 35 36 GPIO.27 X
X GPIO.25 37 38 GPIO.28 X
X 0v 39 40 GPIO.29 X

부품별 설정

LCD

할당
VCC 브레드보드 오른쪽 (+) 5v
GND 브레드보드 (-) 0v
SDA 라즈베리파이 (3) SDA.1
SCL 라즈베리파이 (5) SCL.1

LCD는 I2C 모듈이 탑재되어 있는데, 이를 활용하기 위해서는 파이썬 라이브러리 RPLCD를 사용해야 하므로 파이썬으로 코딩하였습니다.

C언어로 프로그래밍된 다른 코드들과 통신하기 위해 로컬호스트 소켓 통신을 사용하였습니다. 서버 포트는 50000이고, cronjob으로 부팅 시 실행됩니다.

MCP3008

할당
CH0 토양습도센서 (DATA)
CH1 X
CH2 X
CH3 X
CH4 X
CH5 X
CH6 X
CH7 X
VDD 브레드보드 왼쪽 (+) 3.3v
VREF 브레드보드 왼쪽 (+) 3.3v
AGND 브레드보드 (-) 0v
CLK 라즈베리파이 (23) SCLK
DOUT 라즈베리파이 (21) MISO
DIN 라즈베리파이 (19) MOSI
CS/SHDN 라즈베리파이 (26) CE1
DGND 브레드보드 (-) 0v

토양습도센서

MCP3008을 통해 SPI0.1로 연결합니다.

할당
VCC 브레드보드 왼쪽 (+) 3.3v
GND 브레드보드 (-) 0v
DATA MCP3008 (CH0)

도트매트릭스

SPI0.0으로 연결합니다.

할당
VCC 브레드보드 오른쪽 (+) 5v
GND 브레드보드 (-) 0v
DIN 라즈베리파이 (19) MOSI
CS 라즈베리파이 (24) CE0
CLK 라즈베리파이 (23) SCLK

모션센서

할당
VCC 브레드보드 오른쪽 (+) 5v
GND 브레드보드 (-) 0v
DATA 라즈베리파이 (11) GPIO. 0

온습도센서 (DHT11)

WiringPi에서 연결하면 GPIO. 3으로 연결하지만, 파이썬 모듈 adafruit-circuitpython-dht에서는 BCM 기준으로 22번 핀입니다.

우리는 WiringPi를 사용하므로 3번 핀이라고 생각하면 됩니다.

할당
VCC 브레드보드 오른쪽 (+) 5v
GND 브레드보드 (-) 0v
DATA 라즈베리파이 (15) GPIO. 3

조도센서 (Photoresistor)

이미 도트매트릭스와 토양습도센서로 SPI0을 다 사용했으므로, GPIO를 통해 밝음/어두움만 감지하도록 조도센서를 구현했습니다. 밝음/어두움을 가르는 기준이 '사람이 책을 읽을 수 있는 최소한의 밝기'와 비슷한데, 이는 실내에서 키우는 식물의 광합성 조건과 거의 비슷하기 때문에, 그대로 사용해도 좋다고 판단했습니다.

할당
VCC 브레드보드 왼쪽 (+) 3.3v
GND 브레드보드 (-) 0v
DATA 라즈베리파이 (13) GPIO. 2

사용하는 라이브러리

최대한 수업 시간에 배운 내용을 바탕으로 코드를 짜되, 수업시간에 배우지 않은 복잡한 센서/액츄에이터 코딩이 필요한 상황에서는 외부 라이브러리를 사용해 완성도를 높이도록 합시다.

WiringPi

수업시간에 배우지 않은 내용이거나, 구현이 힘든 부분은 WiringPi라는 라이브러리를 사용할 겁니다. WiringPi 구현 예시 코드들을 참고하여 코드를 짜 봅시다.

RPLCD

우리가 사용하는 부품 중에는 LCD가 있습니다. 이 LCD에는 I2C 모듈이 탑재되어 있어 배선이 쉽지만, C언어로 코딩하기 매우 어렵습니다. 따라서 LCD 관련 함수를 제공하는 파이썬 라이브러리인 RPLCD를 사용합시다.

About

시스템프로그래밍및실습(24-2) 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published