A university project developed by Aleksander Kopeć and Wojciech Kopański.
The following documentation is written in polish as it will be taken under grading.
Projekt ma za zadanie umożliwić rozbudowaną komunikacje pilot<->arduino<->odbiornik. Użytkownik porusza się po menu w którym wybiera poszczególne funkcje urządzenia:
- Forward IR -> Wysyłanie sygnałów w odpowiedzi na odebrany sygnał.
- Send IR -> Wysyłanie sygnałów bezpośrednio z arduino
- Receive IR -> Wykonuje różne akcje na arduino zależnie od otrzymanego sygnału.
- Connect PC -> Połączenie z komputerem. Za pomocą dedykowanej aplikacji użytkownik łączy się z arduino.
- Settings -> Ustawienia. Zawarta jest tu m.in kalibracja pilotów oraz testowanie buzzera.
- Arduino UNO
- LCD Keypad Shield
- Odbiornik Podczerwieni (IR)
- Nadajnik Podczewieni (IR)
- Buzzer bez generatora
- Arduino IDE 1.8 wraz z bibliotekami:
- LiquidCrystal
- IRremote
- EEPROM
- Python 3.8 wraz z bibliotekami:
- PySerial
- Tkinter
- Time
- os
- Pliki projektu:
- adv_arduino_IR_remote.ino
- WriteDefaults.h
- Buzz.h
- remote_manager.py
- preset.txt
- README.MD
- Odbiornik IR -> Digital pin 2
- Nadajnik IR -> Digital pin 3
- Buzzer -> Analog pin 1
Na Adruino musi być nałożony LCD Keypad Shield, jego konfiguracja jest ustalana w programie.
Użytkownik wybiera funkcjonalność przy pomocy przycisków up / down i zatwierdza lub przechodzi do niższego menu przy pomocy select lub right, cofnięcie lub anulowanie operacji następuje po naciśnięciu left.
Drzewko menu oraz submenu:
Menu
├─ Forward IR
├─ Send IR
│ ├─ Bank #1
│ ├─ ...
│ ├─ Bank #9
├─ Receive IR
├─ Connect PC
├─ Settings
│ ├─ Calibrate Basic Buttons
│ ├─ Calibrate Additional Buttons
│ ├─ Test Buzzer
Korzystając z pilota posiadającego sygnały 'znane' przez arduino uruchamiamy sekwencje sygnałów wysyłane przez nadajnik arduino. Przykładowo: naciskając przycisk skonfgurowany jako Przycisk 4 z nadajnika IR zostanie wysłany sygnał [PRZYCISK3, PRZYCISK4, PRZYCISK5, PRZYCISK6].
Przenosimy się do submenu z listą dostępnych banków i wybieramy którą sekwencję nadać przy pomocy przycisków wbudowanych na LCD Keypad Shield. Modyfikacja nazw banków możliwa jest za pośrednictwem aplikacji komputerowej gdzie możliwe jest natychmiastowe wpisanie i załadowanie nowych nazw na arduino lub wczytanie pliku konfiguracyjnego. Możliwa jest również zmiana domyślnych nazw banków modyfikując plik WriteDefaults.h
.
Tryb kontroli arduino przy pomocy pilota podczerwieni, przy naciskaniu skonfigurowanych przycisków na ekranie pokazywane są informacje dot. przycisku oraz odtwarzane są sygnały dźwiękowe.
Tryb połączenia z komputerem w celu konfiguracji.
Pozwala na kalibrację 10 podstawowych przycisków - na ekranie wyświetlane są instrukcje konfiguracji. Użytkownik musi nacisnąć każdy przycisk 3-krotnie lub przytrzymać go aż na ekranie nie pojawi się wiadomośc pozytywna. Przez zakłócenia oraz inne zmienne otoczenia dopiero po otrzymaniu 3-krotnie tego samego sygnału możemy być pewni że kalibracja przebiegła prawidłowo.
Pozwala na kalibrację dodatkowych pięciu przycisków.
Pozwala sprawdzić czy buzzer został prawidłowo podłączony i jaka jest jego głośność (głośność można zmieniać zmieniając rezystory podłączone do niego szeregowo).
Aby skonfigurować nazwy banków lub wgrać plik z danymi (sygnały, banki, sekwencje) należy uruchomić program remote_manager.py
. Program posiada interfejs graficzny użytkownika, w wierszu poleceń wyświetlane są wsyzstkie przekazywane dane. Po uruchomieniu pojawi się okno wyboru portu - należy wybrać odpowiedni port do którego podłączone jest arduino. Po zatwierdzeniu arduino zostaje zrestartowane (rozpoczęcie komunikacji), wyświetlona zostaje informacja, że teraz należy wybrać opcję Connect PC na arduino. Gdy wybierzemy opcję na arduino, pojawi się główne okno. Nazwy banków można zmienić przy pomocy 10 pól tekstowych (nazwy dłuższe niż 14 znaków zostaną skrócone), by zatwierdzić należy kliknąć przycisk "Save to Arduino". Wygenerowany zostanie plik z obecną konfiguracją i nowymi nazwami banków newpreset
i jego dane zostaną wgrane do arduino. Aby załadować i wgrać własny plik należy wpisac jego nazwę w okienku "Preset file name" i zatwierdzić przyciskiem "Load preset". Podczas przesyłania na arduino wyświetlane są informacje o obecnie zapisywanych do EEPROM'u danych.
Pamięć EEPROM podzielona jest 3 sekcje:
- Zapisane sygnały z konfiguracji przycisków pilotów
- Nazwy banków (sekwencji sygnałów) mogące zostać zdefiniowane przez użytkownika
- Sekwencje (banki) - dziesięć 4-elementowych banków, każdy element jest liczbą odnoszącą się do numeru sygnału (skonfigurowanego wcześniej przycisku pilota)
W trakcie uruchomienia sprawdzany jest adres 0 EEPROM'u, w przypadku wartości 1 cała pamięć zostaje wyzerowana, adres 0 ustawiony na 255 i arduino jest restartowane. W przypadku wystąpienia wartości 255 w adresie 0, wczytywana jest podstawowa konfiguracja nazw banków oraz sekwencji z pliku WriteDefaults.h
.
Po uruchomieniu systemu konfiguracje zostają wczytane z pamięci EEPROM do pamięci dynamicznej arduino, tworzona jest tablica sekwencji sygnałów.
Nie istnieje domyślna konfiguracja sygnałów więc przed użytkowaniem użytkownik powinien skalibrować lub wczytać sygnały za pośrednictwem aplikacji.
Elementy zapisane w EEPROM dla czytelności i uproszczenia są zawarte pod stałymi adresami EEPROM:
Nazwa adresu | Adres w EEPROM |
---|---|
startupModeAddr | 0 |
basicButtonsSignalsAddr | 1 |
additionalButtonsSignalsAddr | 41 |
banksNamesAddr | 61 |
sequenceBanksAddr | 201 |
Bank 1 = [POWER]
Bank 2 = [VOLUME UP]
Bank 3 = [VOLUME DOWN]
Bank 4 = [PRZYCISK1]
Bank 5 = [PRZYCISK2]
Bank 6 = [POWER, VOLUME UP, VOLUME DOWN, POWER]
Bank 7 = [PRZYCISK3, PRZYCISK4, PRZYCISK5, PRZYCISK6]
Bank 8 = [POWER, POWER]
Bank 9 = [UP, UP, DOWN, DOWN] // Potrzebna rozszerzona kalibracja przyciskow
Bank 10 = [LEFT, RIGHT, LEFT, RIGHT] // Potrzebna rozszerzona kalibracja przyciskow
Przy nadawaniu każdy sygnał wysyłany jest czterokrotnie przy pomocy technologii najpopularniejszych producentów sprzętu RTV - LG, Sony, Samsung, Panasonic. Różnice w technologii IR nie stanowią jednak żadnego problemu przy odbieraniu przez arduino - wszystkie sygnały zapisywane są w 32 bitach.
Podczas użytkowania (przy włączeniu urządzenia, rozpoczęciu komunikacji, korzystaniu z trybu Receive IR, jeżeli wystąpi błąd) odtwarzane są odpowiednie sygnały dźwiękowe za pośrednictwem funkcji buzz()
napisanej na potrzeby projektu.