
به نام خدا
کنترل ال ای دی ۸ در ۸ با استفاده از رزبری پای

در گذشته پروژه های بسیاری را با استفاده از رزبری پای راه اندازی کردیم. امروز قصد داریم تا با استفاده از رزبری پای یک ماژول ال ای دی ۸ در ۸ را که شامل ۶۴ عدد ال ای دی ست کنترل کنیم. برنامه ای به زبان پایتون نیز خواهیم نوشت تا حروف و کاراکتر های مورد نظرمان را بر روی ماژول نمایش دهد.
قطعات لازم برای پروژه ی کنترل ال ای دی ۸ در ۸ با استفاده از رزبری پای :
رزبری پای
منبع تغذیه ی ۵ ولتی
خازن ۱۰۰۰ میکرو فارادی
۸ مقاومت یک کیلو اهمی
ماژول ماتریس ال ای دی ۸ در ۸:
این ماژول از ۶۴ ال ای دی تشکیل شده است که حالت یک ماتریس را دارا هستند.این ماژول در اندازه ها و رنگ های متفاوتی موجود می باشد. پیکره بندی پین های این ماژول مانند شکل زیر است. دقت داشته باشید که پین ها به درستی اتصال داشته باشند.

۱۶ پایانه ی مشترک در این ماژول داریم. از این تعداد ۸ پایانه ی مثبت مشترک هستند و ۸ پایانه ی مشترک منفی می باشند. که به فرم ۸ ردیف و ۸ ستون قرار دارند. مدار داخلی این ماژول را در شکل زیر مشاهده می کنید.

برای هشت ردیف ، هشت پایانه ی مثبت داریم که عبارت اند از : (۹, ۱۴, ۸, ۱۲, ۱۷, ۲, ۵)
همچنین برای هشت ردیف ، هشت پایانه ی منفی داریم که عبارت اند از :(۱۳, ۳, ۴, ۱۰, ۶, ۱۱, ۱۵, ۱۶)
توضیح مدار:
در جدول زیر تمامیه اتصالات بین رزبری پای و ماتریس ال ای دی ها مشاهده می کنید.
|
LED Matrix Module Pin no. |
Function |
Raspberry Pi GPIO Pin No. |
|
۱۳ |
POSITIVE0 |
GPIO12 |
|
۳ |
POSITIVE1 |
GPIO22 |
|
۴ |
POSITIVE2 |
GPIO27 |
|
۱۰ |
POSITIVE3 |
GPIO25 |
|
۶ |
POSITIVE4 |
GPIO17 |
|
۱۱ |
POSITIVE5 |
GPIO24 |
|
۱۵ |
POSITIVE6 |
GPIO23 |
|
۱۶ |
POSITIVE7 |
GPIO18 |
|
|
|
|
|
۹ |
NEGATIVE0 |
GPIO21 |
|
۱۴ |
NEGATIVE1 |
GPIO20 |
|
۸ |
NEGATIVE2 |
GPIO26 |
|
۱۲ |
NEGATIVE3 |
GPIO16 |
|
۱ |
NEGATIVE4 |
GPIO19 |
|
۷ |
NEGATIVE5 |
GPIO13 |
|
۲ |
NEGATIVE6 |
GPIO6 |
|
۵ |
NEGATIVE7 |
GPIO5 |
در تصویر زیر هم شماتیک کلی مدار را مشاهده می کنید :

دانلود کد برنامه کنترل ال ای دی ۸ در ۸ با استفاده از رزبری پای :
دانلود فایل#working
import RPi.GPIO as IO #calling for header file which helps in using GPIO’s of PI
import time #calling for time to provide delays in program
IO.setwarnings(False) #do not show any warnings
x=1
y=1
IO.setmode (IO.BCM) #programming the GPIO by BCM pin numbers. (like PIN29 as'GPIO5')
IO.setup(12,IO.OUT) #initialize GPIO12 as an output.
IO.setup(22,IO.OUT) #initialize GPIO22 as an output.
IO.setup(27,IO.OUT)
IO.setup(25,IO.OUT)
IO.setup(17,IO.OUT)
IO.setup(24,IO.OUT)
IO.setup(23,IO.OUT)
IO.setup(18,IO.OUT)
IO.setup(21,IO.OUT)
IO.setup(20,IO.OUT)
IO.setup(26,IO.OUT)
IO.setup(16,IO.OUT)
IO.setup(19,IO.OUT)
IO.setup(13,IO.OUT)
IO.setup(6,IO.OUT)
IO.setup(5,IO.OUT)
PORTVALUE = [128,64,32,16,8,4,2,1]
#value of pin in each port
A=[0,0b01111111,0b11111111,0b11001100,0b11001100,0b11001100,0b11111111,0b01111111]
B =[0,0b00111100,0b01111110,0b11011011,0b11011011,0b11011011,0b11111111,0b11111111]
C= [0,0b11000011,0b11000011,0b11000011,0b11000011,0b11100111,0b01111110,0b00111100]
D=[0,0b01111110,0b10111101,0b11000011,0b11000011,0b11000011,0b11111111,0b11111111]
E=[0,0b11011011,0b11011011,0b11011011,0b11011011,0b11011011,0b11111111,0b11111111]
F=[0,0b11011000,0b11011000,0b11011000,0b11011000,0b11011000,0b11111111,0b11111111]
G=[0b00011111,0b11011111,0b11011000,0b11011011,0b11011011,0b11011011,0b11111111,0b11111111]
H=[0,0b11111111,0b11111111,0b00011000,0b00011000,0b00011000,0b11111111,0b11111111]
I=[0b11000011,0b11000011,0b11000011,0b11111111,0b11111111,0b11000011,0b11000011,0b11000011]
J=[0b11000000,0b11000000,0b11000000,0b11111111,0b11111111,0b11000011,0b11001111,0b11001111]
K=[0,0b11000011,0b11100111,0b01111110,0b00111100,0b00011000,0b11111111,0b11111111]
L=[0b00000011,0b00000011,0b00000011,0b00000011,0b00000011,0b00000011,0b11111111,0b11111111]
M=[0b11111111,0b11111111,0b01100000,0b01110000,0b01110000,0b01100000,0b11111111,0b11111111]
N=[0b11111111,0b11111111,0b00011100,0b00111000,0b01110000,0b11100000,0b11111111,0b11111111]
O=[0b01111110,0b11111111,0b11000011,0b11000011,0b11000011,0b11000011,0b11111111,0b01111110]
P=[0,0b01110000,0b11111000,0b11001100,0b11001100,0b11001100,0b11111111,0b11111111]
Q=[0b01111110,0b11111111,0b11001111,0b11011111,0b11011011,0b11000011,0b11111111,0b01111110]
R=[0b01111001,0b11111011,0b11011111,0b11011110,0b11011100,0b11011000,0b11111111,0b11111111]
S=[0b11001110,0b11011111,0b11011011,0b11011011,0b11011011,0b11011011,0b11111011,0b01110011]
T=[0b11000000,0b11000000,0b11000000,0b11111111,0b11111111,0b11000000,0b11000000,0b11000000]
U=[0b11111110,0b11111111,0b00000011,0b00000011,0b00000011,0b00000011,0b11111111,0b11111110]
V=[0b11100000,0b11111100,0b00011110,0b00000011,0b00000011,0b00011110,0b11111100,0b11100000]
W=[0b11111110,0b11111111,0b00000011,0b11111111,0b11111111,0b00000011,0b11111111,0b11111110]
X=[0b01000010,0b11100111,0b01111110,0b00111100,0b00111100,0b01111110,0b11100111,0b01000010]
Y=[0b01000000,0b11100000,0b01110000,0b00111111,0b00111111,0b01110000,0b11100000,0b01000000]
Z=[0b11000011,0b11100011,0b11110011,0b11111011,0b11011111,0b11001111,0b11000111,0b11000011]
def PORT(pin): #assigning GPIO state by taking 'pin' value
if(pin&0x01 == 0x01):
IO.output(21,0) #if bit0 of 8bit 'pin' is true pull PIN21 low
else:
IO.output(21,1) #if bit0 of 8bit 'pin' is false pull PIN21 high
if(pin&0x02 == 0x02):
IO.output(20,0) #if bit1 of 8bit 'pin' is true pull PIN20 low
else:
IO.output(20,1) #if bit1 of 8bit 'pin' is false pull PIN20 high
if(pin&0x04 == 0x04):
IO.output(26,0) #if bit2 of 8bit 'pin' is true pull PIN26 low
else:
IO.output(26,1) #if bit2 of 8bit 'pin' is false pull PIN26 high
if(pin&0x08 == 0x08):
IO.output(16,0)
else:
IO.output(16,1)
if(pin&0x10 == 0x10):
IO.output(19,0)
else:
IO.output(19,1)
if(pin&0x20 == 0x20):
IO.output(13,0)
else:
IO.output(13,1)
if(pin&0x40 == 0x40):
IO.output(6,0)
else:
IO.output(6,1)
if(pin&0x80 == 0x80):
IO.output(5,0)
else:
IO.output(5,1)
def PORTP(pinp): #assigning GPIO logic for positive terminals by taking 'pinp' value
if(pinp&0x01 == 0x01):
IO.output(12,1) #if bit0 of 8bit 'pinp' is true pull PIN12 high
else:
IO.output(12,0) #if bit0 of 8bit 'pinp' is false pull PIN12 low
if(pinp&0x02 == 0x02):
IO.output(22,1) #if bit1 of 8bit 'pinp' is true pull PIN22 high
else:
IO.output(22,0) #if bit1 of 8bit 'pinp' is false pull PIN22 low
if(pinp&0x04 == 0x04):
IO.output(27,1) #if bit2 of 8bit 'pinp' is true pull PIN27 high
else:
IO.output(27,0) #if bit2 of 8bit 'pinp' is false pull PIN27 low
if(pinp&0x08 == 0x08):
IO.output(25,1)
else:
IO.output(25,0)
if(pinp&0x10 == 0x10):
IO.output(17,1)
else:
IO.output(17,0)
if(pinp&0x20 == 0x20):
IO.output(24,1)
else:
IO.output(24,0)
if(pinp&0x40 == 0x40):
IO.output(23,1)
else:
IO.output(23,0)
if(pinp&0x80 == 0x80):
IO.output(18,1) #if bit7 of 8bit 'pinp' is true pull PIN18 high
else:
IO.output(18,0) #if bit7 of 8bit 'pinp' is false pull PIN18 low
while 1:
for y in range (100): #execute loop 100 times
for x in range (8): #execute the loop 8 times incrementing x value from zero to seven
pin = PORTVALUE[x] #assigning value to 'pin' for each digit
PORT(pin); #mapping appropriate GPIO
pinp= C[x] #assigning character 'C' value to 'pinp'
PORTP(pinp); #turning the GPIO to show character 'C'
time.sleep(0.0005) #wait for 0.5msec
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= I[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= R[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= C[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= U[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= I[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= T[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= D[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= I[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= G[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= E[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= S[x]
PORTP(pinp);
time.sleep(0.0005)
for y in range (100):
for x in range (8):
pin = PORTVALUE[x]
PORT(pin);
pinp= T[x]
PORTP(pinp);
time.sleep(0.0005)
pinp= 0
PORTP(pinp);
time.sleep(1)
دیدگاهها (0)