Zaloguje się
or
Tel +48 698 615 740

Enkoder obrotowy KY-040

28 października, 2021

W artykule zostanie omówiony enkoder obrotowy KY-040, przedstawimy połączenie, użycie przykładu z biblioteki, napiszemy program gdzie przy pomocy enkodera będziemy wyświetlać na wyświetlaczu lcd wartość od 0 do 100 i na odwrót, a na końcu przerobimy ten kod na wyświetlanie ON i OFF co może przydać się w menu.

Spis treści

  • Specyfikacja
  • Podłączenie do arduino
  • Importowanie biblioteki oraz wykorzystanie przykładu przykładu
  • Napisanie programu wyświetlającego wartości od 0 do 100
  • Przerobienie napisanego programu aby wyświetlał ON albo OFF w zależności od ustawienia enkodera
  • Pliki do pobrania

Specyfikacja

Napięcie robocze: 5 V

Impuls koło: 20

Materiał: komponenty elektroniczne + PCB

Rozmiar: 31*19*29mm

Podłączenie do arduino

Na początku zajmiemy się podłączeniem enkodera, nie jest ono zbyt skomplikowane, będą nas interesowały następujące piny CLK, DT, GND, + (VCC). CLK łączymy do pinu 2 w arduino, a DT do 3. Poniżej znajduje się schemat połączenia.

Importowanie biblioteki oraz wykorzystanie z niej przykładu

Będziemy też potrzebowali biblioteki która w łatwy sposób umożliwi nam obsługę enkodera, możecie ją pobrać na samym dole lub klikając tutaj (jak zainstalować bibliotekę, dowiesz się tutaj). Na razie będziemy wyświetlać wartości w monitorze portów szeregowych, a dopiero później przejdziemy do pracy z wyświetlaczem na którym będziemy wyświetlać wartości z enkodera.

Zaczniemy od wykorzystania przykładu „Basic” z naszej biblioteki w następujący sposób

Wybieramy przykład Basic

Zmieniamy wartości myEnc na 3 i 2

Włączamy monitor portu szeregowego i kręcąc pokrętłem enkodera zgodnie z ruchem wskazówek zegara będziemy otrzymywali wartość rosnącą, a kręcąc w drugą stronę będzie się ona zmniejszała. Możemy też ustawić tak, aby enkoder zwracał nam 0 i 1 niezależnie od strony w którą kręcimy, wystarczy zmienić wartość myEnc na 2 i 0.

Napisanie programu wyświetlającego wartości od 0 do 100

Skoro już zapoznaliśmy się z podstawowym działaniem enkodera, oraz biblioteki przejdźmy do wyświetlania wartości od 0 do 100 na wyświetlaczu OLED 0.96. Sprawa może wydawać nam się trochę skomplikowana, ale wcale taka nie jest, wystarczy zapoznać się z artykułem o wyświetlaczach oled który dostępny jest tutaj. Po zapoznaniu się z artykułem należy podłączyć zasilanie i uziemienie do płytki stykowej od Arduino, następnie podłączamy zasilanie oraz uziemienie z enkodera i wyświetlacza, kiedy to już mamy gotowe możemy przejść do programowania.

Zaczniemy od zdefiniowania pinów CLK i DT, następnie zaimplementujemy wszystkie biblioteki potrzebne do wyświetlacza oraz enkodera.

#define CLK 2
#define DT 3

#include <Encoder.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>

//Tworzymy obiekty

Adafruit_SSD1306 display(0);
Encoder myEnc(DT, CLK);

//W funkcji setup wklejamy wszystkie potrzebne ustawienia wyświetlacza

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//definiujemy rodzaj użytego wyświetlacza oraz adres I2C
  display.clearDisplay();//czyścimy ekran
  display.setTextSize(3);// ustawiamy rozmiar czcionki
  display.setTextColor(WHITE);//ustawiamy kolor biały
}

W funkcji loop pobieramy wartość z enkodera i zapisujemy ją do zmiennej wartość, oraz ustalamy limit od 0 do 100, zrobimy to za pomocą instrukcji warunkowych, jeżeli wartość jest mniejsza od zera, ustaw wartość na 0 w przeciwnym wypadku jeżeli jest większa od 100 ustaw pozycję na 100. Gdybyśmy nie zmienili wartości z enkodera wartości wychodziłyby poza nasz zakres.

void loop() {
  long wartosc = myEnc.read();//odczytujemy wartość z enkodera

  if(wartosc < 0) {//jeżeli wartość z enkodera jest mniejsza od 0 ustaw ją na 0
    myEnc.write(0);//ustawiamy pozycję enkodera na 0
  } else if (wartosc > 100) {//w przeciwnym wypadku jeżeli wartość jest większa od 100 ustaw ją na 100
    myEnc.write(100);//ustawiamy pozycję enkodera na 100
  }

//Ponownie wczytujemy wartości z enkodera

wartosc = myEnc.read();//wczytaj ponownie wartość enkodera w razie gdyby uległa ona zmianie przez instrukcje warunkowe
  
//Wyświetlamy pobraną wartość na wyświetlaczu

  display.setCursor(42, 22);//ustawiamy kursor na pozycje 42, 22
  display.println(wartosc);//piszemy tekst który ma się ukazać
  display.display();//wyświetlamy na ekranie, bez tego nie zadziała

  display.clearDisplay();
}

Teraz po kręceniu w lewo i prawo enkoderem powinniśmy zauważyć rosnącą i malejącą wartość od 0 do 100 na naszym wyświetlaczu.

Przerobienie napisanego programu aby wyświetlał ON albo OFF w zależności od ustawienia enkodera

Przerobimy powyższy program który umożliwi nam wyświetlanie na ekranie ON i OFF, może się nam to przydać przy robieniu menu.

#define CLK 2
#define DT 3

#include <Encoder.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(0);

//W tym miejscu zamieniamy  DT, CLK na CLK, 0

Encoder myEnc(CLK, 0);//zmieniamy ustawienia na CLK, 0 aby nasz enkoder zwracał 1 albo 0

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//definiujemy rodzaj użytego wyświetlacza oraz adres I2C
  display.clearDisplay();//czyścimy ekran
  display.setTextSize(3);//ustawiamy rozmiar czcionki
  display.setTextColor(WHITE);//ustawiamy kolor biały
}

void loop() {
  long wartosc = myEnc.read();//odczytujemy wartość z enkodera

//Zmieniamy instrukcję warunkową if, jeżeli 0 to wyświetl OFF, w przeciwnym wypadku jeżeli wartość równa 1 wyświetl ON

  if(wartosc == 0) {//jeżeli wartość z enkodera jest równa 0 wyświetl OFF
    display.setCursor(42, 22);
    display.println(”OFF”);
    display.display();
    display.clearDisplay();
  } else if (wartosc == 1) {//w przeciwnym wypadku jeżeli wartość jest równa 1 wyświetl ON
    display.setCursor(52, 22);
    display.println(”ON”);
    display.display();
    display.clearDisplay();
  }
}

To będzie na tyle z obsługi enkodera, mam nadzieję, że wyżej ukazane programy przydadzą się w waszych późniejszych projektach.

Pliki do pobrania

Sticky
Możliwość komentowania Enkoder obrotowy KY-040 została wyłączona
Adrian Wojtala

Adrian Wojtala

Ma 21 lat. Studiuje informatykę na Uniwersytecie DSW, ukończył technikum o profilu technik-informatyk. Interesuje się programowaniem i w przyszłości ma plan zostać back-end developerem. Swoją przygodę z Arduino rozpoczął podczas praktyk od września 2021 r.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.