Quiz historyczny

Typ_projektu
microPython
Zdjecie główne
Krótki opis projektu

Urządzenie z wyświetlaczem OLED, wyposażone w pasek LED, służące do nauki historii. Pozwala użytkownikowi na interaktywne umiejscawianie wydarzeń historycznych w czasie. Pasek LED zapala odpowiednią diodę zależności od epoki, a wyświetlacz OLED pokazuje nazwę wybranego wydarzenia.

Niezbędne elementy

 

  1. Plytka ESP8266
  2. Płytka prototypowa
  3. Pasek LED NeoPixel 1x8
  4. Potencjometr
  5. Przycisk
  6. Ekran OLED ssd1306
  7. Kabel USB
  8. Kabelki

 

Sprzęt
  1. Komputer ze środowiskiem Thonny oraz wgranym sterownikiem CH40
Opis projektu

Przygotowanie programu:

W odpowiedniej linijce (linijka nr 62) wpisujemy na listę pytania, nazwy wydarzeń, równania itp., następnie w linijce pod spodem (linijka nr 64) możliwe odpowiedzi.

Po uruchomieniu programu na płytce:  

Na ekranie OLED wyświetlać się będą wcześniej zapisane pytania. Użytkownik ma za zadanie wybrać odpowiednią odpowiedź za pomocą potencjometru i zatwierdzić przyciskiem. Na ekranie zostanie wyświetlony komunikat zależny od poprawności odpowiedzi.

Potencjalny rozwój projektu:

Całe urządzenie można zlutować i włożyć do odpowiednio zaprojektowanego pudełka z wyjściem dla paska LED, wyświetlacza oraz przycisków.

Ilość pytań można dowolnie modyfikować, ważne aby nie były zbyt długie ze względu na ograniczenia wyświetlacza.

 

Zdjęcia
Przykładowe połączenie
kod programu
from machine import ADC, Pin, PWM, I2C
import time
from time import sleep
from neopixel import NeoPixel
import ssd1306
import random
 

#uruchoniemie magistrali
i2c = I2C(scl=Pin(5), sda=Pin(4))
#uruchomienie wyświetlacza
oled = ssd1306.SSD1306_I2C(128,64,i2c)

#guzik i potencjometr
pinButton = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
adc = ADC(0)

#pasek led
pinLed = Pin(14, Pin.OUT)
np = NeoPixel(pinLed, 8)


#funkcja czyszczaca
def clear():
    for i in range(8):
        np[i] = (0,0,0)

#zapalenie odpowiedniej diody
def rightLed(val):
    oled.fill(0)
    oled.text(lista[0],0,0,1)
    disp_val = int(7*val/1024)
    clear()
    np[disp_val] = (250,250,250)
    np.write()
    oled.text(okr[disp_val],0,10,1)
    oled.show()
    return disp_val

#generator liczb losowych
def rand( floor, mod=0, negative = False):
    # return random value from -floor.mod to floor.nod if negative is True

    from os import urandom as rnd

    sign = 1 if ord(rnd(1))%10 > 5 else -1
    sign = sign if negative else 1

    if mod:
        value = float(('{}.{}').format(ord(rnd(1))%floor, ord(rnd(1))%mod))
    else:
        value = int(('{}').format(ord(rnd(1))%floor))

    return sign*value
   
#okresy
okr = ["prehistoria", "starozytnosc", "sredniowiecze", "nowozytnosc", "20ty wiek", "wspolczesnosc", "przyszlosc", "nie wydarzylo sie"]

#TU WPISZ PYTANIA I ODPOWIEDZI

#PYTANIE
wydarzenie=["Wynalezienie prochu","Rewolucja przemysłowa","Manifest komunistyczny","Kultura łużycka", "Upadek carskiej Rosji"]
#ODPOWEIDŹ
okres=[okr[2], okr[3], okr[3], okr[0], okr[3]]


#clear oled
oled.fill(0)
#wybór pozycji z listy
a = rand(len(wydarzenie))
lista = [wydarzenie[a], okres[a]]
oled.text(lista[0],0,0,1)
oled.show()


while True:
    
    val = adc.read()
    val2 = int(7*val/1024)
    rightLed(val)
    if pinButton.value()==1:  
        if okr[val2]==lista[1]:
            oled.fill(0)
            oled.text('TRUE',0,0,1)
            oled.show()
            break
        else:
            oled.fill(0)
            oled.text('FALSE',0,0,1)
            oled.show()
            break
Pliki_projektu
Schemat
Tagi
#oled #historia #micropython #neopixel #quiz