رباتیک و هوافضا

آموزش کنترل ماژول دات ماتریس ۸*۸ با استفاده از رزبری پای

به نام خدا

آموزش کنترل ماژول دات ماتریس ۸*۸ را با استفاده از رزبری پای

 

 

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

 

قطعات مورد نیاز مدار آموزش کنترل ماژول ماتریس ال ای دی ۸*۸ را با استفاده از رزبری پای :

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

دات ماتریس ۸*۸ با استفاده از رزبری پای:

 

 

در ماژول دات ماتریس ۱۶ ترمینال موجود است،۸ ترمینال مثبت و ۸ ترمینال منفی،بصورت ۸ ردیف و ۸ ستون،برای اتصال ۶۴ ال ای دی به شکل ماتریسی.اگر بخواهیم ماژول را بصورت دیاگرام مداری رسم کنیم شکل زیر را خواهیم داشت:
مدار دات ماتریس ۸*۸

 

تشریح مدار آموزش کنترل ماژول دات ماتریس ۸*۸ را با استفاده از رزبری پای:

اتصالات میان رزبری پای و ماژول ماتریس ال ای دی در شکل زیر نمایش داده اند. در اینجا نیز از تکنیک های تسهیم (مالتی پلکسینگ) برای نمایش کاراکترها روی ماژول دات ماتریس ۸*۸ استفاده می کنیم.برای تفهیم بهتر تسهیم به مثال توجه فرمایید.فرض کنید می خواهیم ال ای دی D10 را در ماتریس روشن کنیم.برای این کار بایستی پین ۱۴ ماژول را تغذیه و پین ۱۳ را زمین کنیم.با این کار ال ای دی D10 همانطور که در شکل ذیل مشاهده می کنید روشن خواهد شد. حال اگر بخواهیم D1 را روشن کنیم بایستی پین ۹ ماتریس را تغذیه و پین ۱۳ را زمین کنیم.جهت جریان در این مورد در شکل زیر نمایش داده شده است.

بیشتر بخوانید...  ساخت ربات تمیز کننده با استفاده از آردوینو

 

 

دانلود کد برنامه ی آموزش کنترل ماژول دات ماتریس ۸*۸ را با استفاده از رزبری پای :

دانلود فایل
#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)

 

بیشتر بخوانید...  موقعیت یابی یک ماشین با Google Map به وسیله آردینو، ESP8266 و GPS

دیدگاه‌ها (0)

*
*