Green World
En side om Infrastruktur, Programmering, Matematikk og litt til
Hjem
Informasjonsteknologi
Matematikk
Raspberry PI

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.