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.
- Plytka ESP8266
- Płytka prototypowa
- Pasek LED NeoPixel 1x8
- Potencjometr
- Przycisk
- Ekran OLED ssd1306
- Kabel USB
- Kabelki
- Komputer ze środowiskiem Thonny oraz wgranym sterownikiem CH40
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.
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