상세 컨텐츠

본문 제목

라즈베리파이 미니 프로젝트 11탄 ! [LCD 추가 성공 !]

라즈베리파이 실습 및 미니 프로젝트 !

by 전자과_공대생 2021. 1. 29. 14:02

본문

728x90
반응형

날짜 : 2021.01.28 목요일 / 제목 : LCD 추가 성공 ! / 날씨 : ⛅🌀

 

안녕하세요 !  전자과_공대생입니다 ~ (⌐■_■)

오늘 하늘은 이쁜데 바람이 많이 부네요 ㅠㅠ

올라오는데 날라갈뻔 했습니다 ㅎㅎ

서울은 눈이 온다던데 저희는 안 오네요 ㅎ,,,저도 눈 좋아하는데,,,

 

잡담 그만하고 바로 미니 프로젝트에 LCD를 추가해보도록 하겠습니다 !

LCD는 전에 시도하다가 오류가 발생해서 일단 스탑해둔 부품입니다.

하지만 중간점검한 결과 LCD 코딩을 다시 찾아서 사용해보자는 의견이 나왔습니다.

따라서 다시 구글링을 하여 LCD를 시도해볼 생각입니다 !

우선 근로를 다녀와서 진행하도록 하겠습니다 !

{근로 중....}

근로를 마치고 왔습니다 ! 

오늘 근로는 약간 하드코어였네요..

힘이 많이 쓰면서 일해서 체력이 별로 안 남았습니다 ㅠ

하지만 그래도 할 건 해야죠 !

한번 구글링을 통하여 새로운 LCD 코딩을 찾아보겠습니다 ~

{찾는 중....}

드디어 찾았습니다 !!!

www.youtube.com/watch?v=bWmVzWO0JqU

참고 영상 !

위에 영상을 참고하면서 했습니다 !

아래 영상을 참고하여 파일들을 다운받고 참고 글만 사용하였습니다 !

import I2C_LCD_driver

mylcd = I2C_LCD_driver.lcd()

mylcd.lcd_clear()

mylcd.lcd_display_string("HUM:%d%s"%(hum, strPer), 1)

mylcd.lcd_display_string("STATUS:%s"%strCur, 2)

코드만 추가했습니다 !

이렇게 보면 헷갈리죠??ㅎㅎ

그래서 일단 LCD 추가를 시킨 최종본 코딩을 보여드리겠습니다 !

import RPi.GPIO as GPIO
import I2C_LCD_driver
import time
import spidev

IN1 = 5
IN2 = 6
R = 16
G = 20
B = 21

#set %
HUM_THRESHOLD=20
#water sensor output first value
HUM_MAX=0

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
GPIO.setup(R, GPIO.OUT)
GPIO.setup(G, GPIO.OUT)
GPIO.setup(B, GPIO.OUT)

#motor driver first setting
spi=spidev.SpiDev()
#open(bus, device) / my raspberrypi server opens (0,0), (0,1)
spi.open(0,0)
#motor speed
spi.max_speed_hz=500000

#get adc value function
def read_spi_adc(adcChannel):
	adcValue = 0
	#xfer2([value])
	buff = spi.xfer2([1,(8+adcChannel)<<4,0])
	adcValue = ((buff[1]&3)<<8)+buff[2]
	return adcValue

#map function = convert the percentage (%)
def map(value, min_adc, max_adc, min_hum, max_hum):
	adc_range = max_adc-min_adc
	hum_range = max_hum-min_hum
	scale_factor = float(adc_range)/float(hum_range)
	return min_hum+((value-min_adc)/scale_factor)

try:
	strPer="%"
	mylcd = I2C_LCD_driver.lcd()
	adcChannel=0
	strCur=""
	while True:
		adcValue = read_spi_adc(adcChannel)

		#convert imported data to %
		#high humidity = low value
		#so 100-value then, high humidity = high value
		hum = 100-int(map(adcValue,HUM_MAX,1023,0,100))
		if hum < HUM_THRESHOLD:
			GPIO.output(IN1, GPIO.HIGH)
			GPIO.output(IN2, GPIO.LOW)
			GPIO.output(R, GPIO.HIGH)
			GPIO.output(G, GPIO.LOW)
			GPIO.output(B, GPIO.LOW)
			print 'yes'
			strCur="Warning"
		else:
			GPIO.output(IN1, GPIO.LOW)
			GPIO.output(IN2, GPIO.LOW)
			GPIO.output(R, GPIO.LOW)
			GPIO.output(G, GPIO.HIGH)
			GPIO.output(B, GPIO.LOW)
			print 'no'
			strCur="Normal"

		mylcd.lcd_clear()
		mylcd.lcd_display_string("HUM:%d%s"%(hum, strPer), 1)
		mylcd.lcd_display_string("STATUS:%s"%strCur, 2)
		time.sleep(0.5)

finally:
	GPIO.cleanup()
	spi.close()

제가 업로드 해드린 영상을 따라하다보면 라이브러리 문제때문에 막힐 수도 있습니다.

제가 만든 miniproject.py(위에 코딩)은 home에 있지만 영상에서 다운받은 기본 자료는 LCD1602_i2c_Python 파일에 저장되어있습니다 !

더군다나 LCD_i2c_Python 파일 안에 있는 파일을 삭제, 수정, 추가가 전혀 안되도록 제한이 걸려있습니다.

따라서 실행을 시키기 위해서는 두가지의 방법이 있습니다 !

우선 첫 번째 방법은 sudo를 사용하여 lcd.py 내용을 위에 코딩으로 수정하는 것입니다 !

sudo가 만능키 인것을 다들 알고계시죠??ㅎㅎ

sudo는 모든 것을 할 수 있는 권한을 가지고 있습니다.

따라서 sudo nano lcd.py을 하여 내용을 수정하면 됩니다.

두 번째 방법은 강제로 home에 있던 miniproject.py를 LCD1602_i2c_Python 안에 넣는 것입니다 !

사실 이 방법은 같이 공부하는 형이 해주셨습니다 !

만약 이 방법을 따라하고싶으시다면 아래 링크에서 도움을 받으시길 바랍니다 !

eunguru.tistory.com/93

 

이제 동작 영상을 보여드리도록 하겠습니다 !

동작 영상 !

LCD, RGB LED, 모터 모두 잘 돌아가는 것을 확인할 수 있습니다 !

제가 설정해둔 20%가 넘으면 초록 불과 Normal 멘트가 뜨고 모터가 스탑합니다.

반대로 20% 밑으로 떨어지면 빨간 불과 Warning 멘트가 뜨고 모터가 작동합니다.

 

 

오늘의 미니 프로젝트 글은 여기까지입니다 !

LCD 작동에 성공하면서 하루를 마무리해서 매우 기분이 좋네요 ㅎㅎ

성공 ! / 출처 - http://www.techholic.co.kr/news/articleView.html?idxno=17945

내일은 한번 스위치를 이용해서 전원 버튼을 만들어보겠습니다 !

같이 공부하는 형 말로는 쉽지 않을 거라고 얘기해줬습니다.

하지만 그래도 도전해봐야하겠습니다 !

그럼 다음 미니 프로젝트 글로 찾아뵙겠습니다 !

이상 전자과_공대생이었습니다 ~ ! (⌐■_■)

감사합니다 !

728x90
반응형

관련글 더보기