• برچسب ها: رسپبری پای | پروژه رباتیک
  • 0.0/5 rating (0 votes)
  • دوشنبه, 05 بهمن 1394

در پایان این آموزش قادر خواهید بود تا یک LCD به رسپبری پای تان متصل کنید. با ما همراه باشید.

اضافه کردن یک LCD به هر پروژه ای، ظاهر بهتری به آن می دهد. در این آموزش نحوه ی اتصال یک LCD ارزان قیمت HDD44780 به رسپبری پای با استفاده از 6 پین GPIO مورد بررسی قرار گرفته است. البته راه های دیگری، از جمله I2C و UART نیز برای اتصال این LCD وجود دارد، اما روشی که در این آموزش مطرح شده است، جز بهترین روش هاست.
مزایای این روش این است که:

  1. میتوانید از LCDهای ارزان قیمت استفاده کنید
  2. به درایور I2C نیاز ندارد
  3. نیازی به پورت سریال بر روی رسپبری پای ندارد.

کد پایتون زمان، تاریخ و آدرس ip رسپبری پای را به نمایشگر می فرستد. اگر از رسپبری پای در حالت بدون پوشش استفاده می کنید، تعیین آدرس ip بایک نگاه حسن بزرگی است.

academy 940823 drive lcd directly with a raspberry pi 02

گام اول: قطعات مورد نیاز

هر مدلی از رسپبری پای × 1
LCD کاراکتری 1602 × 1
برد توسعه 40 پین رسپبری پای × 1
برد بورد سایز کوچک یا بزرگ × 1
سیم برد بورد × 1
پتانسیومتر 10K × 1
سیم برد بورد × 1
پین هدر نری × 1

 academy 940823 drive lcd directly with a raspberry pi 05.0

برای این آموزش LCDهای 16x1، 16x2، 20x2، 20x نیز قابل استفاده هستند. اما LCDهای 40x4 کار نمی کنند.

گام دوم: سخت افزار

 

سیم کشی برد توسعه 40 پین به LCD

academy 940823 drive lcd directly with a raspberry pi 03 

LCD شما دارای 16 کانکتور است که به احتمال زیاد از کنترل کننده های HD44780 استفاده می کند.

این تجهیزات دارای پین های خروجی (pinouts) یکسانی هستند به همین دلیل کار با آن ها آسان است. از آنجایی که این LCDها از رابط های موازی استفاده می کنند، برای کنترل آنها به اتصالات و پین های زیادی از رسپبری پای نیاز خواهد بود. در این آموزش از چهار پین داده (مد چهار بیتی) و دو پین کنترل استفاده شده است.
پین های داده (data pins) مستقیم هستند و داده ها را به نمایشگر می فرستند. در اینجا از حالت نوشتن (write mode) بر روی نمایشگر استفاده می کنیم و هیچ داده ای خوانده نمی شود.
پین register select دو کاربرد دارد. اگر منطق این پین صفر شود فرمان هایی را به سمت LCD می فرستد از جمله اینکه در چه مختصاتی از LCD قرار گیریم و یا اینکه صفحه را پاک کنیم . به این عمل ثبت فرمان گفته می شود. اگر منطق این پین یک شود ، پین به سمت مد داده می رود و برای ارسال داده به نمایشگر استفاده می شود.
با توجه به اینکه می خواهیم روی LCD بنویسیم پین read/write باید از لحاظ منطقی صفر شود (write only ) پین enable نیز برای ثبت داده ها در رجیستر باید toggle شود.

پین های خروجی LCD:

  1. زمین
  2. VCC 5 ولت نه 3/3 ولت
  3. تنظیم کنتراست (VO) از پتانسیومتر
  4. Register Select (RS)، RS=0 : دستور و RS=1 : داده.
  5. Read/Write (R/W). R/W=0 : Write (نوشتن) و R/W=1 : Read (خواندن) . (در این آموزش از این پین استفاده نشده است)
  6. Clock (Enable).
  7. Bit 0 (در عملکرد چهار بیتی استفاده نمی شود)
  8. Bit 1 (در عملکرد چهار بیتی استفاده نمی شود)
  9. Bit 2 (در عملکرد چهار بیتی استفاده نمی شود)
  10. Bit 3 (در عملکرد چهار بیتی استفاده نمی شود)
  11. Bit 4
  12. Bit 5
  13. Bit 6
  14. Bit 7
  15. نور زمینه LED آند (+)
  16. نور زمینه LED کاتد (-)

قبل از نوشتن، بررسی کنید که LCD نور زمینه LED داشته باشد نه نور زمینه EL . نور زمینه LED از 10 تا 40 mA استفاده می کند ، در حالی که EL از 200 mA به بالا استفاده می کند. نور زمینه EL راحت تر به دست می آید ولی قابل استفاده نیست. بنابراین از نور زمینه نمایشگر اطمینان حاصل کنید چون در غیر این صورت بار بیشتری را روی رسپبری پای تحمیل می کنید. بعضی از LED های ارزان قیمت که دارای نور زمینه LED هستند، روی ماژول LED برای نور زمینه مقاومت ندارند. اگر از وجود این مقاومت اطمینان ندارید، به جای اتصال مستقیم پین 15 و 5V ، یک مقاومت یک اهم را بین آن ها متصل کنید.

 

نوشتن دیاگرام

academy 940823 drive lcd directly with a raspberry pi 04

در ابتدا، پین های تغذیه برد توسعه را به ریل (rail) تغذیه برد بورد متصل کنید. +5V از برد توسعه به ریلی که راه قرمز دارد می رود (سیم قرمز) و GND از برد توسعه به ریلی که راه آبی دارد می رود(سیم مشکی).
برای فرستادن داده به LCD به طریق زیر عمل می کنیم:
- پین #1 LCD به زمین می رود (سیم سفید)
- پین #2 LCD به +5V می رود (سیم قرمز)
- پین #3 (Vo) به وسط پتانسیومتر وصل می شود(سیم نارنجی)
- پین #4 (RS) به #25 از Cobbler وصل می شود (سیم زرد)
- پین #5 (RW) به زمین می رود (سیم سیاه)
- پین #6 (EN) به #24 از Cobbler وصل می شود (سیم سبز)
- از پین های #7 ، #8 ، #9 و #10 LCD صرف نظر کنید
- پین #11 (D4) به #23 از Cobbler وصل می شود (سیم آبی)
- پین #12 (D5) به #17 از Cobbler وصل می شود (سیم بنفش)
- پین #13 (D6) به #21 از Cobbler وصل می شود (سیم خاکستری)
- پین #14 (D7) به #22 از Cobbler وصل می شود (سیم سفید)
- پین #15 (LED +) به +5V می رود (سیم قرمز)
- پین #16 (LED -) به زمین می رود (سیم سیاه)
سپس پتانسیومتر را متصل کنید، پین چپ به زمین وصل می شود (سیم سیاه) و پین راست به +5V (سیم قرمز).

شماتیک

academy 940823 drive lcd directly with a raspberry pi 06
5v LCD vs 3.3v Pi

پین های GPIO رسپبری پای برای 3.3v طراحی شده اند، ولی LCD ما یک نمایشگر 5V است. )بهتر است از یک نمایشگر 5V استفاده کنید.( استفاده از یک نمایشگر 5V در صورتی مفید است که داده ها را به رسپبری پای ارسال کنید. از ریل تغذیه 3.3V روی Cobbler استفاده نمی شود و چون نمی خواهیم سیگنال 5V را که به رسپبری پای فرستاده می شود را نمایش دهیم، پین های RW (read/write) نمایشگر به GND وصل می کنیم.

Preparing the LCD

قبل از اینکه شروع کنید، اطمینان حاصل کنید که یک نوار 0.1 اینچی از هدر نری (strip of 0.1" male header) و پتانسیومتر 10K دارید.

academy 940823 drive lcd directly with a raspberry pi 07

اغلب LCD ها یک نوار باریک (strip) دارند که 16 پین در آن قرار می گیرد، اگر طول هدر (header) شما کمی بلندتر بود، می توانید برای رسیدن به طول دلخواه سر آن را بشکنید.

academy 940823 drive lcd directly with a raspberry pi 08

در ادامه هدر را به LCD لحیم کنید. باید این کار را انجام دهید. استفاده از روش "press fit" چندان مناسب نیست!

academy 940823 drive lcd directly with a raspberry pi 09

با اتصال سیم های 5V و GND از برد توسعه به بردبورد آغاز کنید. سپس پین های #1، #2 و #15 ، #16 ریل تغذیه بردبورد را همان طور که نشان داده شده است، متصل کنید. حالا باید نور زمینه روی صفحه بیاید. اگر این اتفاق نیفتاده است، سیم کشی ها را دوباره چک کنید.

academy 940823 drive lcd directly with a raspberry pi 10

academy 940823 drive lcd directly with a raspberry pi 11

در ادامه ، همان طور که در شکل های بالا نشان داده شده است، سیمی از پتانسیومتر کنتراست به سه پین زیر وصل کنید:

- پین وسط که به پین #3 LCD متصل شده
- پینی که به 5V رفته است
- پینی که به زمین رفته است.
پتانسیموتر را آنقدر بچرخانید تا اولین خط را روی LCD ببینید که به صورت خطوط ضخیم مستطیل شکل هستند. اگر این خطوط را ظاهر نشدند مجددا سیم کشی ها را بررسی کنید.

academy 940823 drive lcd directly with a raspberry pi 12

همان طور که در دیاگرام بالا نشان داده شده است، سیم کشی را برای پین های RS، RW، EN، D4، D5، D6 و D7 به اتمام برسانید.

academy 940823 drive lcd directly with a raspberry pi 13

همین! الان می توانید از پایتون اسکریپت استفاده کنید تا متن را بر روی نمایشگر ببینید.

گام سوم: نرم افزار

برای استفاده از پین های GPIO رسپبری پای، مواردی که در ادامه آمده است باید نصب شود.
اضافه کنید آخرین پکیج (packages) dev را برای پایتون(2.x) :


$ sudo apt-get install python-dev
 

academy 940823 drive lcd directly with a raspberry pi 14

به روز رسانی distribute (مورد نیاز برای RPi.GPIO 0.3.1a)


$ sudo apt-get install python-setuptools
$ sudo easy_install -U distribute
 

$ sudo apt-get install python-pip

academy 940823 drive lcd directly with a raspberry pi 15

نصب rpi.gpio (0.3.1a) یا بالاتر:

$ sudo pip install rpi.gpio

academy 940823 drive lcd directly with a raspberry pi 16

پایتون اسکریپت

توجه داشته باشید که این قسمت، کد پایتون LCD است که مربوط به نسخه های قدیمی تر رسپبری پای می باشد.
می توانید از این لینک کتابخانه های جدیدتری که روی انواع پلتفرم ها کار می کند را پیدا کنید. بهتر است برای پروژه های جدید از کتابخانه های جدید استفاده شود.

 کد

کد پایتون برای انواع مختلف LCD ها را می توانید از فایل زیر دریافت کنید.


برای کار، به دو فایل زیر نیاز دارید:
1. Adafruit_CharLCD.py – که شامل دسته ای از پایتون ها برای کنترل LCD است.
2. Adafruit_CharLCD_IPclock_example.py – کدی برای آدرس ip ، زمان و تاریخ.
فایل اول ، Adafruit_CharLCD.py، تلفیقی از دو منبع متفاوت از کد LCD هست.
ساده ترین روش برای نصب کد بر روی رسپبری پای، استفاده از کابل اینترنت است و "git" است که به صورت پیش فرض روی بیشتر distrosها نصب شده است. به آسانی فرمان هایی که در ادامه آمده است را از مسیر تقریبی (ex. /home/pi): اجرا کنید.


1.	apt-get install git
2.	git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
3.	cd Adafruit-Raspberry-Pi-Python-Code
4.	cd Adafruit_CharLCD
 

 آزمایش کردن

سیم کشی ها را با استفاده از اجرای کد پایتون Adafruit_CharLCD.py آزمایش کنید. این کد چون کد کوچکی است به راحتی نشان میدهد که سیم کشی ها درست انجام شده است.
می توانید از nano Adafruit_CharLCD.py برای ویرایش استفاده کنید.


1.	chmod +x Adafruit_CharLCD.py
2.	sudo ./Adafruit_CharLCD.py
 

 مثال ساعت IP

این اسکریپ فرض می کند که می خواهید آدرس ip اترنت (eth0) را نشان دهید. برای آدرس ip وایرلس، باید eth0 را با wlan0 یا wlan1 جایگزین کنید.


1.	#!/usr/bin/python
2.	 
3.	from Adafruit_CharLCD import Adafruit_CharLCD
4.	from subprocess import *
5.	from time import sleep, strftime
6.	from datetime import datetime
7.	 
8.	lcd = Adafruit_CharLCD()
9.	 
10.	cmd = "ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1"
11.	 
12.	lcd.begin(16,1)
13.	 
14.	def run_cmd(cmd):
15.	        p = Popen(cmd, shell=True, stdout=PIPE)
16.	        output = p.communicate()[0]
17.	        return output
18.	 
19.	while 1:
20.	        lcd.clear()
21.	        ipaddr = run_cmd(cmd)
22.	        lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
23.	        lcd.message('IP %s' % ( ipaddr ) )
24.	        sleep(2)
 

اجرا کردن کد


1.	$ sudo ./Adafruit_CharLCD_IPclock_example.py 
 

 چیزی که باید ببینید

academy 940823 drive lcd directly with a raspberry pi 17

init script

مزیت استفاده از کد Adafruit_CharLCD_IPclock_example.py این است که میتوان آن را به صورت دستی اجرا کرد، اما ضعف آن این است که وقتی که رسپبری پای بهش وصل می شود، که زمان و آدرس ip را روی نمایشگر نشان می دهد. این مشکل را میتوان با استفاده از init script حل کرد. که با استفاده از اجرای کد Adafruit_CharLCD_IPclock_example.py و بوت کردن سیستم قابل انجام است.
کد را در مسیر /etc/init.d/lcd کپی کنید(برای نوشتن این مسیر نیاز دارید که از sudo استفاده کنید):


1.	### BEGIN INIT INFO
2.	# Provides: LCD - date / time / ip address
3.	# Required-Start: $remote_fs $syslog
4.	# Required-Stop: $remote_fs $syslog
5.	# Default-Start: 2 3 4 5
6.	# Default-Stop: 0 1 6
7.	# Short-Description: Liquid Crystal Display
8.	# Description: date / time / ip address
9.	### END INIT INFO
10.	 
11.	 
12.	#! /bin/sh
13.	# /etc/init.d/lcd
14.	 
15.	 
16.	export HOME
17.	case "$1" in
18.	    start)
19.	        echo "Starting LCD"
20.	        /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD/Adafruit_CharLCD_IPclock_example.py  2>&1 &
21.	    ;;
22.	    stop)
23.	        echo "Stopping LCD"
24.		LCD_PID=`ps auxwww | grep Adafruit_CharLCD_IPclock_example.py | head -1 | awk '{print $2}'`
25.		kill -9 $LCD_PID
26.	    ;;
27.	    *)
28.	        echo "Usage: /etc/init.d/lcd {start|stop}"
29.	        exit 1
30.	    ;;
31.	esac
32.	exit 0
 

باید خط زیر را در کد به مسیری که پایتون اسکریپت IPclock را نگه میدارید تغییر دهید.
/home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD/Adafruit_CharLCD_IPclock_example.py
init script قابل اجرا است:


sudo chmod +x /etc/init.d/lcd

با استفاده از دستور update-rc.d ، lcd init script به سیستم شناسانده می شود:


sudo update-rc.d lcd defaults

academy 940823 drive lcd directly with a raspberry pi 18

اکنون با هر راه اندازی، LCD به صورت اتوماتیک زمان ، تاریخ و آدرس ip را نشان می دهد. این بدان معنی است که شما می توانید بدون نیاز به مانیتور بفهمید که رسپبری پای چه زمانی قابل دسترس هست و ip آدرس آن چیست.
برنامه ساعت را می توانید با اجرای کد زیر متوقف کنید:


sudo /etc/init.d/lcd stop

فیلم 19

تایم زون (Time Zone)

رسپبری پای بر اساس زمان جهانی پیکربندی شده است. اما بهتر است بر اساس زمان منطقه خودتان تنظیم شود. با استفاده از این قسمت می توانید برای هر منطقه، زمان را روی رسپبری پای مشخص کنید.


$ sudo dpkg-reconfigure tzdata

 

academy 940823 drive lcd directly with a raspberry pi 19

در ادامه یک نمونه نشان داده شده است که به شما اجازه می دهد تا منطقه زمانی خود را انتخاب کنید.

academy 940823 drive lcd directly with a raspberry pi 20

منبع : سایت adafruit

 

افزودن نظر