Green World
En side om Miljø, Elektronikk, Programmering og litt til
Elektronisk infrastruktur Raspberry PI Informasjonsteknologi
Elektronisk infrastruktur Raspberry PI Informatikk 1
Steng X

7-Segment LED

Montasje

Responsive image

Oppgave

I dette prosjektet vil vi se på hvordan vi får et 7-segment display til å gå fra 0 - 9 med et sekund stopp på hvert tall.

For å få fullt utbytte av denne oppgaven burde du kjenne til hva:

  • En lysdiode er.
  • Hvordan vi beregner størrelser på motstander i forhold til strøm.
  • Ha satt opp Raspberry PI og vet hva Python er.

Utstyrsliste

  • Raspberry PI model 3 med Raspbian installert
  • Strømforsyning med minimum 2,1A og microUSB
  • Breakout board eller ledninger over til et prosjekt brett
  • Motstander på 65ohm eller mer, 7stk
  • 7-segment LED SA52-11EWA

Koblingsskjema

Responsive image

Hva ser vi?

Det vi kan se på koblingsskjema er hvordan enhetene er koblet sammen. Til venstre har vi tilkoblingen til GPIO pinnene på RPien. På bildet øverst ser du ikke selve RPIen men du finner igjen de samme benevningene der som på koblingen over. På bildet øverst er det nemlig brukt et breakout board, som gjør at vi kan koble sammen prosjektbrettet og RPien.

Det neste vi kan legge merke til er motstandene som er koblet mellom RPi og LED displayet. De er nøye valgt ut etter hvilken strøm vi ønsker skal strømme gjennom diodene. Da må vi lese datasheet arket på enheten for å se hvilken spenningen diodene bruker, og strøm. Dataarket på denne enheten finner du her. Det er først og fremst "Forward Voltage" og strømmen gjennom diodene som er viktig, men også hvilket nummer de forskjellige benene har på LED displayet. Du kan bruke ohm's lov når du skal regne ut riktig størrelse på motstandene, men det er ikke en del av denne oppgaven, så jeg beskriver bare raskt hvordan jeg har gjort det. Riktig strøm på dette LED displayet er 20mA, noe som fører til 1,3v over resistoren og det gir oss R=U/I=1,3v/0,02A=> 130/2=65. Altså 65ohm's resistorer.

Datasheet

Responsive image

Kode for oppgave

#Alt som står etter en slik firkant som foran denne linjen er kommentarer.
import RPi.GPIO as GPIO #Importerer en pakke med en klasse som kan styre IO portene på RPi og kaller den GPIO
import time as t #Importerer time for å bruke klokken til å vente ett sekund og kaller den t
GPIO.setmode(GPIO.BCM) #Setter GPIO til Broadcom chipen på RPi kortet
GPIO.setwarnings(False) #Hopper over hvis det kommer noen varsler

#Setter en variabel for alle tallene som skal vises. Det er sammenheng mellom nummeret de
#er koblet til og diden. Se dataarket lengre ned.
all = (16,12,13,22,27,20,21) #Alle de neste er variabler med tall som representerer hvilke IO/dioder som skal legges lav
null = (16,12,13,22,27,20)
en = (12,13)
to = (16,12,21,27,22)
tre = (16,12,21,13,22)
fire = (20,21,12,13)
fem = (16,20,21,13,22)
seks = (16,13,22,27,20,21)
syv = (16,12,13)
atte = (16,12,13,22,27,20,21)
ni = (16,12,13,20,21)

GPIO.setup(all,GPIO.OUT)
GPIO.output(all,GPIO.HIGH)

while True: #En løkke som går i evig tid
  GPIO.output(all,GPIO.HIGH) #Setter GPIO utganger. I dette tilfelle all (som er 16,12,13,22,27,20,21) til høy. Da slukker alle diodene
  GPIO.output(null,GPIO.LOW) #får tallet 0 til å vises på LEDen ved at null (som er 16,12,13,22,27,20) til lav.
  t.sleep(1) #venter et sekund
  GPIO.output(all,GPIO.HIGH) #Slukker alle igjen
  GPIO.output(en,GPIO.LOW) #en lydser osv.
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(to,GPIO.LOW)
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(tre,GPIO.LOW)
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(fire,GPIO.LOW)
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(fem,GPIO.LOW)
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(seks,GPIO.LOW)
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(syv,GPIO.LOW)
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(atte,GPIO.LOW)
  t.sleep(1)
  GPIO.output(all,GPIO.HIGH)
  GPIO.output(ni,GPIO.LOW)
  t.sleep(1)

Oppgaver

I oppgavene under skal du endre på koden over for å løse oppgavene

  1. Bruk 2 sekunder på hvert tall.
  2. Telle baklengst.
  3. Hvert tall skal slukke i et halvt sekund og lyse i et halvt sekund.
  4. Klarer du å gjøre koden mer effektiv vha. løkke?