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

4x7-Segment LED som teller til 60 minutter med sekunder

Montasje

Responsive image

Oppgave

Dette prosjektet skal bli et utgangspunkt for mange spennede oppgaver. Bare tenk deg hvor mange oppgaver som i dag løses med fire tall. Eksempler er klokke, temperatur, avstander, vekt osv.

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.
  • Kjenne Python ganske godt

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
  • 4x7-segment LED ELF-415SURWA/S530-A3

Datasheet

Responsive image

Beskrivelse

Datasheet eller teknisk beskrivelse som du ser over er et viktig dokument som forteller oss hvordan enheten er laget og virker. Det er viktig å lære seg og forstå en del av de tekniske aspektene av produkter fordi vi rett og slett ikke kommer oss videre uten.

Hvis du ser etter kan du se at alle beina på enheten har nummer. De nummerne/beina henger sammen med hvilken diode som skal lyse på enheten. Når vi kobler opp enheten og skal lage et koblingsskjema, er det denne informasjonen vi bruker.

Koblingsskjema

Responsive image

Hva ser vi?

Det vi ser her er en såkalt "matrise", det betyr at alle dioder på alle tall er koblet sammen. Hvis vi setter "-" på felles katoden "D1" (ben en) og "+" på "A" (ben 14) så lyser alle tallene på samme sted opp. I dette tilfelle ville A lyse opp, og det er den øverste dioden. Prøv selv!

Virkemåte

Det som er meningen med en slik matrisekobling er av benytter oss av at øyet ikke kan oppdage at diodene slås på og av veldig raskt, slik at det ser ut som alle lyser samtidig selv om de ikke gjøre det. Det vil si at vi skrur på tall nr 1, deretter skrur vi det av for å skru på tall nr. 2 osv. Dette skjer så fort av vi ikke kan se det. Du kan prøve å endre på koden selv for å få frem effekten av dette. Hvilken del av koden må du endre?

Kode for oppgave

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

led1 = 5
led2 = 6
led3 = 19
led4 = 26
ledalle = (5,6,19,26)
leds =[led1,led2,led3,led4]

tall0 = (16,12,13,22,27,20)
tall1 = (12,13)
tall2 = (16,12,21,27,22)
tall3 = (16,12,21,13,22)
tall4 = (20,21,12,13)
tall5 = (16,20,21,13,22)
tall6 = (16,13,22,27,20,21)
tall7 = (16,12,13)
tall8 = (16,12,13,22,27,20,21)
tall9 = (16,12,13,20,21)
alle = (5,6,19,26,16,12,13,22,27,20,21)
led14 = (5,6,19,26) #dette er de fire katodene
tall = [tall0,tall1,tall2,tall3,tall4,tall5,tall6,tall7,tall8,tall9]

GPIO.setup(alle,GPIO.OUT)
GPIO.output(led14,GPIO.HIGH)
GPIO.output(tall8,GPIO.LOW)

def settid():
  t.sleep(0.0050)
  return;

def counter(nr1,nr2,nr3,nr4): #her defineres hva som skal vises på
  tell = 0
  while (tell < 50): #bruker ett sekund på løkken#setkatode()
    GPIO.output(ledalle, GPIO.HIGH) #skrur av alle katodene
    GPIO.output(tall8,GPIO.LOW) #skrur av alle anodene
    GPIO.output(led1, GPIO.LOW) #setter på katoden på led1
    GPIO.output(tall[nr1], GPIO.HIGH) #setter på det tallet som sendes
    settid()
    GPIO.output(ledalle, GPIO.HIGH)
    GPIO.output(tall8,GPIO.LOW)
    GPIO.output(led2, GPIO.LOW)
    GPIO.output(tall[nr2], GPIO.HIGH)
    settid()
    GPIO.output(ledalle, GPIO.HIGH)
    GPIO.output(tall8,GPIO.LOW)
    GPIO.output(led3, GPIO.LOW)
    GPIO.output(tall[nr3], GPIO.HIGH)
    settid()
    GPIO.output(ledalle, GPIO.HIGH)
    GPIO.output(tall8,GPIO.LOW)
    GPIO.output(led4, GPIO.LOW)
    GPIO.output(tall[nr4], GPIO.HIGH)
    settid()
    tell = tell + 1
  return;

def number4(a,b,c,d):
  d = 0
  for d in range(10):
    counter(a,b,c,d)
  return;

def number3(a,b,c,d):
  if b == 0:
    x = 1
  else:
    x = 0
  for c in range(x,6):
    number4(a,b,c,d)
  return;

def number2(a,b,c,d):
  if a == 0:
    x = 1
  else:
    x = 0
  for b in range(x,10):
    number3(a,b,c,d)
  return;

def number1(a,b,c,d):
  for a in range(1,6):
    number2(a,b,c,d)
  return;

while True: #En løkke som går i evig tid
  a,b,c,d = 0,0,0,0
  number4(a,b,c,d)
  number3(a,b,c,d)
  number2(a,b,c,d)
  number1(a,b,c,d)

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. Få diodene i midten til å blinke, i takt med tidsuret.
  4. Sette inn en knapp som kan starte og stoppe tidsuret.
  5. Lage en nedteller, som kan starte på for eksempel 10 minutter og telle ned til 0.
  6. Samme som over men med start- og stoppknapp.
  7. Klarer du lage et tidsur hvor vi kan stille inn nedtellingen, og deretter starte den med knappen.