e-Paper Shield,czyli papier elektroniczny i Arduino

W dzisiejszych czasach prawie wszędzie możemy się spotkać z ludźmi używającymi czytników książek, które wyposażone są w papier elektroniczny.  Czym  tak na prawdę jest i jak działa e-papier oraz jak my możemy to wykorzystać w naszych projektach? Na samym początku należy wspomnieć, iż e-papier to wyświetlacz składający się z jasnego tła oraz kuleczek atramentu, które pod wpływem impulsów tworzą piksele. To tak w skrócie, ale najważniejsze jest to, że taki wyświetlacz ma o wiele lepsze kąty widzenia, nie odbija światła, nie ma podświetlenia, a co za tym idzie zużywa dużo mniej prądu niż klasyczny wyświetlacz LCD. Jako dowód, wystarczy sobie poczytać i porównać czasy pracy czytników wyposażonych w e-papier i normalnych tabletów. Od niedawna, dzięki SeeedStudio możemy również i my wykorzystać takie wyświetlacze w naszych projektach. W tym krótkim tekście przetestujemy shield do Arduino oraz przeznaczony do niego 2″ e-papier.

Demo 3: rysowanie
Kompletny shield z wyświetlaczem

 

Na samym początku rzućmy okiem z czym mamy do czynienia. W zestawie dostajemy shield wyposażony w gniazdo kart pamięci, które jak się później okaże jest niezbędne do poprawnego działania układu. W drugiej paczce dostajemy wyświetlacz o przekątnej 2″. Na poniższych zdjęciach widok na spodnią stronę shielda oraz na kompletny układ połączony z Arduino wraz z testowym programem.

E-paper shield
E-paper shield od SeeedStudio

 

Warto dodać, że w sprzedaży znajduje się jeszcze większy wyświetlacz o przekątnej 2.7″. Przejdźmy zatem do pierwszego uruchomienia. Jak przystało na dobrą firmę, SeeedStudio dysponuje dokumentacją, a także biblioteką, której użyliśmy w naszym teście. Zanim jednak załadujemy nasz program musimy rzucić okiem na dokumentację, w której jest napisane, iż w przypadku Arduino UNO lub innej płytki wyposażonej w Atmegę 328P lub 32U4, należy włożyć kartę pamięci do gniazda microsd, gdyż program użyje jej do przechowania tymczasowych danych ze względu na małą pamięć powyższych Atmeg. Ta sytuacja nie będzie miała miejsca w przypadku użycia Arduino Mega lub innej płytki wyposażonej w Atmegę 1280 lub 2560.

Następnie w programie musimy wybrać rozmiar naszego wyświetlacza. Jak widać do wyboru mamy trzy wartości, jednak SeeedStudio ma w sprzedaży tylko dwa rozmiary (2″ oraz 2.7″). Oznacza to, że biblioteka wspiera jeszcze jeden wyświetlacz, o przekątnej 1.44″.

#define SCREEN_SIZE 200 // choose screen size: 144, 200, 270

Gdy już włożyliśmy kartę pamięci i sprawdziliśmy czy zgadza się rozmiar wyświetlacza wgrywamy program i naszym oczom ukazuje taki oto widok.

Demo 1: Wyświetlanie tekstu
Demo 1: Wyświetlanie tekstu

Można zauważyć, że jakość wyświetlania jest niesamowita, a obraz ostry. To właśnie przewaga e-papieru nad klasycznymi wyświetlaczami LCD. Drugim programem, który przetestuje nasz wyświetlacz jest przykład z użyciem funkcji draw. Tak jak w poprzednim przykładzie musimy się upewnić czy potrzebujemy karty SD, a także pamiętajmy o ewentualnej zmianie rozmiaru wyświetlacza w programie. Jeśli to wszystko zrobimy i wgramy program, nasz wyświetlacz pokaże nam poniższe figury.

Demo 3: rysowanie
Demo 2: funkcja rysowania

 

Obraz został utworzony poprzez przywołanie poszczególnych funkcji draw. Używając odpowiednich funkcji możemy rysować różne figury. Spis dostępnych komend znajdziecie pod koniec tekstu.

Trzecim programem pokazującym możliwości wyświetlacza jest wyświetlanie obrazu. Grafiki można dowolnie zmieniać, należy tylko pamiętać o zachowaniu odpowiedniej rozdzielczości zdjęcia podczas konwersji. Dla rozmiaru 2.7″ nasz obrazek będzie mieć rozdzielczość 264×176, a dla 2.0″ 200×96. Nasze zdjęcie, bądź grafika musi być czarno biała, a następnie przekonwertowana na plik *.h. Do tego celu możemy użyć “wspaniałego” programu dołączonego przez producenta. Napisaliśmy wspaniałego, ponieważ program udostępniony na wiki jest po chińsku, nie ma możliwości zmiany języka na inny, a instrukcja jego obsługi jest obrazkowa (np. kliknąć trzeci przycisk od lewej, itp…). W ramach tego testu jakoś udało nam się skonwertować logo Nettigo i wyświetlić je z sukcesem.

Demo 3: wyświetlanie grafiki
Demo 3: wyświetlanie grafiki
Logo Nettigo na e-papierze
Logo Nettigo na e-papierze od SeeedStudio

Zapewne każdy program konwertujący grafiki na język C będzie odpowiedni. My nie próbowaliśmy, ale zachęcamy osoby, które posiadają ten shield do przetestowania takiego rozwiązania.

Opis funkcji:

1. void begin(EPD_size sz);
Funkcja odpowiedzialna za ustawienie rozmiaru wyświetlacza.

  • sz: can be EPD_1_44, EPD_2_0, EPD_2_7.

2. void setDirection(EPD_DIR dir);
Funkcja odpowiedzialna za kierunek wyświetlania.

  • dir: can be DIRLEFT,DIRRIGHT,DIRNORMAL,DIRDOWN

3. int drawChar(char c, int x, int y);
Funkcja wyświetlająca znak.

  • c: znak, który chcemy wyświetlić.
  • x: początek wyświetlania- koordynaty X.
  • y: początek wyświetlania- koordynaty Y.

4. int drawNumber(long long_num,int poX, int poY);
Funkcja służąca do wyświetlania znaków.

  • long_num: zmienna long, którą chcemy wyświetlić
  • poX: początek wyświetlania- koordynaty X
  • poY: początek wyświetlania- koordynaty Y

5. void drawLine(int x0, int y0, int x1, int y1);
Funkcja rysująca linie o początku w punkcie XY i końcu w punkcie X1Y1.

  • x0: początek rysowania linii- koordynaty X
  • y0: początek rysowania linii- koordynaty Y
  • x1: koniec rysowania linii- koordynaty X
  • y1: koniec rysowania linii koordynaty Y

6. void drawCircle(int poX, int poY, int r);
Funkcja rysująca koło

  • poX: koordynaty X środka koła
  • poY: koordynaty Y środka koła
  • r: promień koła

7. void drawHorizontalLine( int poX, int poY, int len);
Funkcja rysująca poziomą linię

  • poX: koordynaty X początku linii
  • poY: koordynaty Y początku linii
  • len: długość linii

8. void drawVerticalLine( int poX, int poY, int len);
Funkcja rysująca pionową linię

  • poX: koordynaty X początku linii
  • poY: koordynaty Y początku linii
  • len: długość linii

9. void drawRectangle(int poX, int poY, int len, int width);
Funkcja rysująca prostokąt

  • poX: początkowy punkt X prostokąta
  • poY: początkowy punkt Y prostokąta
  • len: długość prostokąta
  • width: szerokość prostokąta

10. void fillRectangle(int poX, int poY, int len, int width);
Funkcja rysująca wypełniony, jednolity prostokąt

  • poX: początkowy punkt X prostokąta
  • poY: początkowy punkt Y prostokąta
  • len: długość prostokąta
  • width: szerokość prostokąta

11. void fillCircle(int poX, int poY, int r);
Funkcja rysująca wypełnione koło

  • poX: koordynaty X środka koła
  • poY: koordynaty Y środka koła
  • r: promień koła

Przykłady:

 
    EPAPER.drawRectangle(10, 10, 100, 80);
    EPAPER.fillCircle(50, 50, 30);
    EPAPER.fillRectangle(50, 65, 50, 20);
    EPAPER.drawCircle(150, 50, 10);
    EPAPER.fillCircle(150, 50, 5);
    EPAPER.drawHorizontalLine(120, 50, 60);
    EPAPER.drawVerticalLine(150, 20, 60);
Proces czyszczenia wyświetlacza
Proces czyszczenia wyświetlacza

 

12. void drawTraingle( int poX1, int poY1, int poX2, int poY2, int poX3, int poY3);

Funkcja rysująca trójkąt poprzez podanie współrzędnych trzech punktów

  • poX1(poX2,poX3): koordynaty X jednego punktu trójkąta
  • poY1(poY2,poY3): koordynaty X jednego punktu trójkąta

Parametry:

W dokumentacji udostępnionej przez SeeedStudio nie ma informacji na temat pinów do jakich podłączony jest testowany shield. Odpowiedź można znaleźć dopiero przeglądając schematy płytki (są one udostępnione na wiki). Okazuje się, że układ korzysta z cyfrowych pinów 2,3,4,5,6,7,8,9,10,11,12,13 oraz analogowych 0,1,2,3.

Według producenta pobierany prąd podczas odświeżania wyświetlacza wynosi 40mA, a układ pracuje z napięciami 3,3/5VDC.

Przeglądając notę katalogową można natrafić na dwa interesujące wykresy pokazujące zachowanie wyświetlacza po odłączeniu zasilania w zależności od czasu. Wykresy wykonano dla dwóch różnych typów – v110 oraz v220. Nie warto zagłębiać się w szczegóły, możemy tylko dodać, iż v220 to wyświetlacz nowej generacji przeznaczony do elektronicznych czytników, natomiast v110 to aktualnie produkowana wersja. Spójrzmy zatem na poniższe wykresy.

 

Odwzorowanie współczynnika kontrastu w zależności od czasu
Odwzorowanie współczynnika kontrastu w zależności od czasu

Odwzorowanie bieli w zależności od czasu
Odwzorowanie bieli w zależności od czasu

 

Z powyższych wykresów możemy odczytać, że nasz wyświetlacz po odłączeniu od prądu będzie tracił kontrast oraz odwzorowanie bieli z czasem będzie maleć (zmieni kolor na szary). Jak to będzie wyglądać, możecie zobaczyć na zdjęciu pod koniec tekstu. Oczywiście możemy co jakiś czas odświeżyć nasz wyświetlacz w celu utrzymania pożądanego kontrastu i odwzorowania bieli.

Podsumowanie e-Paper Shield:

Przedstawione w tekście komendy są tylko częścią dostępnych funkcji w bibliotece. Całą listę dostępnych poleceń znajdziecie na wiki seeedstudio.com, natomiast samą bibliotekę można ściągnąć z github.com.

Na koniec pewna sprawa o której należy wspomnieć. Na samym początku wspomnieliśmy, że wyświetlacz używa tylko prądu do przełączania stron, generowania obrazków. W innym przypadku nie pobiera on prądu i jest w spoczynku. To dlatego, czytniki mogą działać tak długo. Po zaprogramowaniu testowym programem, odłączaliśmy wyświetlacz i zostawialiśmy go na jakiś czas. Zgodnie z informacją zawartą w dokumentacji, po jakimś czasie można było zaobserwować spadek kontrastu oraz bieli. Na wyświetlaczu pojawiły się artefakty oraz w niektórych przypadkach resztki z poprzednich programów. Efekt możecie zobaczyć na zdjęciu poniżej.

Odłączony wyświetlacz
Odłączony wyświetlacz

 

Druga również ciekawa sprawa, którą zauważyliśmy podczas testów, te wyświetlacze nie nadają się do wyświetlania dynamicznie zmieniających się obrazków, ponieważ aby wyświetlić zmienioną wartość, potrzeba odświeżyć cały wyświetlacz. Czyli w przypadku wykonania zegarka z sekundnikiem, wyświetlacz nam będzie “mrygał” co sekundę. Na youtubie można znaleźć kilka filmików prezentujących takie zachowanie, co znaczy, że ta przypadłość nie tyczy się tylko testowanego przez nas wyświetlacza.

Na zakończenie możemy dodać, iż z pewnością jest to ciekawy gadżet, który może zdobyć popularność, ze względu właśnie na dobre kąty widzenia i niski pobór energii. Oczywiście należy się zastanowić, czy ten typ wyświetlacza będzie się nadawał do naszego projektu, czy nie lepiej będzie wykorzystać stary poczciwy LCD, bądź TFT oraz pamiętajmy, że e-papier jest niepodświetlany.