[142] Arduino i mierniki panelowe cz. 4

[142] Arduino i mierniki panelowe cz. 4

Czas na drugą zabawkę związaną z wykorzystaniem miernika panelowego: zbudujemy sobie elektroniczną kostkę do gry. W tym celu podmienię tarczę na inną, nie tylko graficznie, ale też ideą. W wypadku zegara wartości były rozłożone na skali nieliniowo, ale liniowo elektrycznie. Teraz będzie na odwrót: podzieliłem skalę na równe części, co 12 stopni, symetrycznie względem środka i ustawiłem tam pozycje: sześć – jak w kostce do gry, bo będzie to właśnie kostka, tyle że elektroniczna.


Skrajne pozycje nie są opisane. Po lewej – wiadomo, mamy pozycję spoczynkową. Po prawej – maksymalne wychylenie podczas animacji związanej z losowaniem. Ale konkrety to już zobaczmy w programie.

Najpierw jednak uruchomimy kalibrator z poprzedniego artykułu i za pomocą potencjometru odpiszemy wartości PWM dla wskazówki ustawionej na wybranych pozycjach. Zapamiętajmy je, przydadzą się za chwilę. A konkretnie tutaj: oto szkic naszej elektronicznej kostki.

const byte miernik = 11;                                // Adres portu, do którego podłączony jest miernik.
const byte losuj = 8;                                   // Przycisk uruchamiający losowanie.
const byte kostka[6] = { 41, 74, 107, 139, 174, 208 };  // Wartości "kostki" na panelu miernika.

void setup() {
  pinMode(miernik, OUTPUT);  // Deklaruj porty.
  pinMode(losuj, INPUT_PULLUP);
}
void loop() {

  if (digitalRead(losuj) == HIGH) {   // Jeśli przycisk losowania zostanie wciśnięty...
    analogWrite(miernik, 0);          // Przenieś wskazówkę na początek zakresu z pełną szybkością.
    delay(200);                       // Zaczekaj.
    for (byte x = 0; x < 255; x++) {  // Przenieś wskazówkę na koniec zakresu ze zwolnioną szybkością.
      analogWrite(miernik, x);
      delay(3);  // Opóźnienie związane ze zwolnioną szybkością.
    }
    analogWrite(miernik, kostka[random(6)]);  // Przenieś wskazówkę na wylosowaną pozycję.
  }
}

Wykorzystam teraz środkowy przycisk klawiaturki płytki edukacyjnej TME, który będzie włączał „rzut kostką”. Zaraz niżej mamy tablicę, w której siedzą pomierzone wartości.

const byte kostka[6] = { 41, 74, 107, 139, 174, 208 };

Gdyby się nam rozkalibrowały, zawsze można je podmienić. W głównej pętli nie będzie się dziać za wiele. Po wciśnięciu przycisku losowania wyzerujemy strzałkę, zaczekamy chwilę, by się ustabilizowała i będziemy ją przesuwać aż do końca zakresu. Wartości opóźnień dobrałem na oko, każdy może sobie wpisać własne. Na końcu do rejestru PWM wpiszemy wylosowaną wartość z tablicy i to już wszystko. Wskazówka pozostanie ustawiona na wylosowanej pozycji do momentu kolejnego wciśnięcia przycisku losującego.

Gdyby ktoś myślał, że da się tu oszukiwać – nie ma szans. Wyzwalanie mamy ręczne, więc kolejne losowania nie pozostają ze sobą w jakimkolwiek związku. Na dobrą sprawę w takim wypadku nie potrzeba nawet funkcji random, a wystarczyłoby szybkie liczenie modulo sześć, o rzędy wielkości szybsze od umiejętności człowieka do odliczania stałych interwałów. Przy kilkudziesięciu hercach nikt już nie dałby rady niczego przewidzieć.

To tylko przykłady prostych zabawek. W ten sposób można tworzyć różnego rodzaju gry losowe, ruletki i inne urządzenia, bezpieczne jeśli używamy ich w domu i co najwyżej obstawiamy cukierki. A sam miernik możemy użyć do zbudowania minutnika czy wskaźnika jakiejkolwiek wartości mierzonej, z możliwością linearyzowania wyników – jak w ostatnim przykładzie. Rozdzielczość dziesięciobitowa jest w praktyce wystarczająca nawet dla najbardziej precyzyjnych mierników.

Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2Sprawdź tutaj

Przeczytaj również

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2025 arduino.pl