Skocz do zawartości

DevTomek

Użytkownicy
  • Zawartość

    16
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

Wszystko napisane przez DevTomek

  1. Widzę, że pod tym postem pojawiła się spora dyskusja, ale chciałbym również przypomnieć, że nie twierdzę że moje podejście do tego problemu jest najbardziej optymalne jeśli chodzi o użyty sprzęt, zastosowane technologie itp. W projekcie wykorzystałem to co miałem pod ręką oraz technologie, które znam, wiem jak działają i przede wszystkim, które używam na co dzień w swoich projektach. Chciałbym również przytoczyć taki mały cykl życia tworzenia takiego projektu. Wszystko zaczyna się od pomysłu urządzenia które ma rozwiązać jakiś faktyczny problem i tak było w tym przypadku. Na początku stworzyłem pierwszą wersję urządzenia z zestawem ATB, gdyż taki posiadam i nadaje on się świetnie do prototypownia, bo mogłem skupić się na pisaniu kodu, a nie na lutowaniu i doborze poszczególnych komponentów. Prototyp ten był testowane przeze mnie przez dłuższy okres czas i finalnie okazało się, że wszystko działa tak jak powinno, więc mogłem przejść do kolejnego kroku. Gdyby jednak okazało się, że moje podejście do tego problemu jest błędne, to nie poniósłbym żadnych kosztów, bo ten zestaw został właśnie specjalnie zakupiony do tworzenia takich prototypów. W kolejnej iteracji zamieniłem zestaw ATB na Arduino, gdyż jest tanie z mojego punktu widzenia. I oczywiście, jeśli miałoby to być urządzenie, które chciałbym sprzedawać to wtedy zastanowiłbym się na dalszej redukcji kosztów, ale w tym przypadku była to sprawa drugorzędna. Dodatkowo zastosowałem Arduino, a nie jakieś gotowe moduły IR, żeby mieć możliwość dalszego rozwoju projektu. Myślę, że to podsumowanie odpowie na kilka pytań jakie pojawią się podczas czytania tej dyskusji
  2. Jeśli jest taki sam to dlaczego powstają takie dystrybucję jak raspbian? Po drugie zainstalujesz minta na raspberry pi? Btw. Jakie piny GPIO chcesz sterować w PC? GPIO od stacji dyskietek? rozumiem, że masz na myśli kontrolę nad urządzeniami peryferyjnymi, ale to nie jest GPIO z tego co wiem 
  3. @Elvis zgadzam się z Twoją wypowiedzią i miałem kiedyś takie samo zdanie jak Ty dot. Atnel'a. Co do mojego projektu to widzę, że wśród użytkowników czytający ten oraz poprzedni post jest małe niezrozumienie, bo zastosowany przeze mnie komputer to jest zwykły mini PC, nie jest to żaden ARM jak raspberry pi czy coś w tym stylu. Komputer ten psiada zwykły system Linux mint cinnamon x64 taki sam jaki używam na swoim stacjonarnym komputerze i nie ma on nic wspólnego z komputerami jednoukladowymi
  4. Dokładnie, w przemysłowych są takie peryferia, ale w tym nie ma. Odnośnie przejściówki, to sama przejściówka nic nie da, bo trzeba dokupić jeszcze jakiś moduł IR co wiąże się z dodatkowymi kosztami. Ale ogólnie rzecz ujmując to, czy kupowanie gotowych modułów można nazwać czymś rozwojowym i twórczym? Przecież w każdym projekcie chodzi o to, żeby nauczyć się czegoś nowego i jak sama nazwa działu wskazuje (DIY) zrobić coś samemu. Przy produkcji masowej można myśleć o redukowaniu kosztów i wykorzystywaniu gotowych modułów, ale tutaj raczej chodzi o customowe implementacje i swoją wizję rozwiązania danego problemu
  5. Czasy takich portów już dawno odeszły do lamusa tzn. już ich nie ma w nowych komputerach, a tym bardziej w tym. A po drugie, koszty Arduino (dokładnie mówiąc chińskich klonów) i odbiornika IR są tak małe, że nie warto brnąć w takie rozwiązania
  6. Ok, tylko nadal nie wiem jak miałbym odczytywać komendy IR bez użycia zewnętrznego modułu? Przecież ten Zotac to jest zwykły komputer bez dodatkowych pinow GPIO itp.
  7. Proszę rozwiń co masz na myśli pod pojęciem "pozbądź się całkowicie dodatkowego uC"?
  8. Po analizie sugestii użytkowników jakie pojawiły się pod pierwszą wersję projektu, postanowiłem rozbudować projekt o zewnętrzny moduł IR tym samym zastępując wykorzystany wcześniej zestaw Atnel ATB na Arduino Nano Migracja z zestawu ATB do Arduino Proces migracji z ATB do Arduino był stosunkowo prosty, ponieważ głównym zadaniem tego zewnętrznego modułu jest odczytywanie komend IR z pilota i przesyłanie ich do komputera. Biorąc pod uwagę fakt, że każde Arduino jest wyposażone w układ pozwalający na komunikację UART<->USB, proces developmentu sprowadził się w głównej mierze do doboru bibliotek, których w sieci jest bardzo dużo. Dodatkowa rozbudowa - LCD Podczas tworzenia zewnętrznego modułu IR postanowiłem również zaimplementować wyświetlacz LCD 2x16 ze sterownikiem HD44780 w celu wyświetlania dodatkowych informacji o aktualnie oglądanym programie TV. Niestety nie posiadałem konwertera HD44780<->I2C, który pozwala na sterowanie tym wyświetlaczem przy użyciu 4 przewodów (w tym 2 zasilających). W rezultacie, w środku urządzenia znajduje się dużo przewodów połączeniowych. Hardware Jeśli chodzi o część sprzętową modułu, to składa się ona z Arduino Nano, wyświetlacza LCD HD44780, odbiornika IR TSOP31236 oraz kilku biernych elementów elektronicznych. Do budowy korpusu modułu wykorzystałem niepotrzebne etui na okulary (eco-friendly xD). Poniżej zamieszczam schemat elektryczny oraz połączeniowy modułu, który został stworzony przy użyciu darmowego programu Fritzing. Software Sam program na Arduino jest stosunkowo prosty i łatwy do analizy. W głównej pętli programu wywoływane są funkcje do odczytu/aktualizacji stanu całej aplikacji oraz jednego przerwania, które nakręca softwarowy timer odpowiedzialny za scrollowanie tekstu na wyświetlaczu. W oprogramowanie modułu można wyróżnić cztery główne stany: Odczyt komend z IR i wysłanie ich do komputera. Odczyt danych z komputera dot. aktualnie oglądanego programu TV. Aktualizacja danych do wyświetlenia na wyświetlaczu LCD - aktualizacja bufora. Wyświetlenie informacji na LCD - scrollowanie. Scrollowanie tekstu odbywa się w jednym z dwóch trybów. Pierwszy (no force) wyświetla aktualny tekst z bufora, a sam bufor jest aktualizowany dopiero, gdy cała zawartość zostanie wyświetlona (płynne przejście). Drugi tryb (force) wymusza natychmiastową aktualizację bufora, a proces scrollowania zaczyna się od początku. Tryb ‘force’ jest wykorzystywany w momencie zmiany aktualnie oglądanego kanału, natomiast tryb ‘no force’ podczas aktualizacji informacji o aktualnie oglądanym programie (w głównej mierze chodzi o aktualizację postępu aktualnie oglądanego programu wyrażonego w procentach) /* AVR Ipla TV Box. version: v1.1.0 author: DevTomek.pl */ #include <LiquidCrystal.h> // LiquidCrystal by Arduino, Adafruit version 1.0.7 #include <IRremote.h> // IRremote by shirriff version 2.2.3 // LED const int INFO_LED = 13; // IR const int IR_SENSOR = 2; IRrecv irrecv(IR_SENSOR); decode_results results; // LCD const int SCREEN_WIDTH = 16; const int SCREEN_HEIGHT = 2; const int RS = 7, EN = 8, D4 = 9, D5 = 10, D6 = 11, D7 = 12; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Serial Read const char READ_DATA_SEPARATOR = '|'; const uint8_t READ_BUFFER_SIZE = 255; char readBuffer[READ_BUFFER_SIZE]; boolean hasNewData = false; // Global Variables String line1 = "AVR-Ipla-TV-Box"; String line1Buffer = line1; unsigned int line1Length = 16; String line2 = " DevTomek "; String line2Buffer = line2; int stringStart, stringStop = 0; int scrollCursor = SCREEN_WIDTH; volatile uint8_t timer1 = 0; void setup() { /* Based on: Arduino Timer Interrupts Calculator */ // TIMER 1 for interrupt frequency 100 Hz: cli(); // stop interrupts TCCR1A = 0; // set entire TCCR1A register to 0 TCCR1B = 0; // same for TCCR1B TCNT1 = 0; // initialize counter value to 0 // set compare match register for 100 Hz increments OCR1A = 19999; // = 16000000 / (8 * 100) - 1 (must be <65536) // turn on CTC mode TCCR1B |= (1 << WGM12); // Set CS12, CS11 and CS10 bits for 8 prescaler TCCR1B |= (0 << CS12) | (1 << CS11) | (0 << CS10); // enable timer compare interrupt TIMSK1 |= (1 << OCIE1A); sei(); // allow interrupts Serial.begin(9600); Serial.println("Starting initialization..."); pinMode(INFO_LED , OUTPUT); lcd.begin(SCREEN_WIDTH, SCREEN_HEIGHT); irrecv.enableIRIn(); Serial.println("Initialization done!"); } void loop() { readIRData(); readSerialData(); updateData(); if (timer1 > 25) { scroll(); timer1 = 0; } } ISR(TIMER1_COMPA_vect) { timer1++; } void readIRData() { if (irrecv.decode(&results)) { if (results.value != 0xFFFFFFFF) { digitalWrite(INFO_LED , HIGH); Serial.println(results.value, HEX); digitalWrite(INFO_LED , LOW); } irrecv.resume(); } } void readSerialData() { while (hasNewData == false && Serial.available() > 0) { static uint8_t ndx = 0; char rc = Serial.read(); if (rc != '\n') { readBuffer[ndx] = rc; ndx++; if (ndx >= READ_BUFFER_SIZE) { ndx = READ_BUFFER_SIZE - 1; } } else { readBuffer[ndx] = '\0'; ndx = 0; hasNewData = true; } } } void updateData() { if (hasNewData == true) { // RX frame structure: [LINE_1_DATA|LINE_2_DATA|IS_FORCE_MODE] line1Buffer = getValue(readBuffer, READ_DATA_SEPARATOR, 0); line2Buffer = getValue(readBuffer, READ_DATA_SEPARATOR, 1); boolean isForceMode = getValue(readBuffer, READ_DATA_SEPARATOR, 2) == "true"; if (isForceMode) { updateLcdData(); } hasNewData = false; } } String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = {0, -1}; int maxIndex = data.length() - 1; for (int i = 0; i <= maxIndex && found <= index; i++) { if (data.charAt(i) == separator || i == maxIndex) { found++; strIndex[0] = strIndex[1] + 1; strIndex[1] = (i == maxIndex) ? i + 1 : i; } } return found > index ? data.substring(strIndex[0], strIndex[1]) : ""; } void scroll() { lcd.clear(); lcd.setCursor(scrollCursor, 0); lcd.print(line1.substring(stringStart, stringStop)); lcd.setCursor(0, 1); lcd.print(line2); if (stringStart == 0 && scrollCursor > 0) { scrollCursor--; stringStop++; } else if (stringStart == stringStop) { updateLcdData(); // update the text as the previous one will be displayed } else if (stringStop == line1Length ) { stringStart++; } else if (line1Length < SCREEN_WIDTH && stringStop == (SCREEN_WIDTH + line1Length) ) { stringStart++; stringStop = stringStart; } else { stringStart++; stringStop++; } } void updateLcdData() { stringStart = stringStop = 0; scrollCursor = SCREEN_WIDTH; line1 = line1Buffer; line2 = line2Buffer; line1Length = line1.length(); } Podsumowanie Na koniec chciałbym tylko zaznaczyć, że zastosowany na początku projektu zestaw Atnel ATB, był celowym wyborem, ponieważ projekt był wtedy w fazie rozwoju, więc zastosowanie zestawu uruchomieniowego miało jak najbardziej sens. Po długotrwałych testach okazało się, że cały projekt zakończył się sukcesem i wszystko działa zgodnie z moimi oczekiwaniami, co oznaczało że trzeba przejść do kolejnego etapu, czyli stworzenie finalnej wersji urządzenia i zastąpienie zestawu uruchomieniowego, czymś w rodzaju zewnętrznego modułu IR. Na koniec zamieszczam krótki filmik przedstawiający aktualną wersję mojego urządzenia AVR-IplaTV-Box. Zapraszam również na mojego bloga AVR-IplaTV-Box - zamieniamy zestaw Atnel ATB na Arduino do zapoznania się z wpisem dot. opisanej wyżej migracji.
  9. To może ja spróbuje jako pierwszy, najwyżej Admin usunie ten komentarz jeśli projekt nie będzie kwalifikował się do udziału w konkursie Projekt który zgłaszam to: AVR-IplaTV-Box, czyli Ipla TV na Twoim telewizorze!
  10. Dzięki za opinie Właśnie największy problem jest z "Kanały TV" i pakiet np. "NEWS I ROZRYWKA", bo do korzystania z tej usługi i potrzebna jest nowsza wersja Ipli, czyli nowszy Smart TV
  11. Finalnie (jeśli znajdę chwilkę wolnego czasu) to zestaw ATB zamienię Arduino Nano (które również mi zalega na półce) i wtedy całą płytkę wraz z odbiornikiem IR zamontuję wewnątrz tego komputerka, ponieważ w tej obudowie jest jeszcze trochę miejsca i spokojnie to wszystko się zmieści. Głupotą byłoby zostawić taki zestaw tylko po to żeby odczytywał kody z pilota IR
  12. Masz 100% racji! Zestaw ten zastosowałem tylko do developmentu, bo ma wbudowany odbiornik IR. Finalnie można to zrobić na zwykłym Arduino i pisze o tym podejściu na swoim Blogu
  13. Tak, tylko nie na każdym TV można oglądać. Projekt ten zrobiłem prawie rok temu i wtedy wsparcie dla kanałów TV było znikome. Ipla cały czas poszerza game urządzeń na których można oglądać TV i ostatnia aktualizacja (30.08.2019) spowodowała że na moim TV (Sharp) nie mam w ogóle Ipli (po prostu z dnia na dzień zniknęła). Tutaj można zobaczyć jak to wszystko dynamicznie się zmienia https://pomoc.ipla.tv/pytanie/tabela-dostepnosci-pakietow i ciągle są urządzenia dla których nie ma wsparcia. Jeśli ktoś posiada Smart TV od Samsunga to wsparcie dla tej marki jest największe, pozostałe marki mają gorzej. Uwierz mi jak robiłem research tego tematu jakiś czas temu to nie można było oglądać kanałów TV na żadnym Smart TV, dopiero stopniowo Ipla wprowadziła wsparcie kanałów TV dla różnych modeli Smart TV i proces ten ciągle trwa. Być może za jakiś czas Ipla będzie wspierać wszystkie Smart TV i projekt ten stanie się bezużyteczny, ale obecnie jestem w gronie tych osób które posiadają Smart TV bez wsparcia dla Ipla TV
  14. To widocznie jesteś tym szczęśliwcem, który posiada TV Samsunga na którym można oglądać te kanały, bo u mnie jak i u 99% osób nie jest to możliwe..
  15. Projekt ten powstał, aby rozwiązać problem dotyczący braku możliwości oglądania kanałów TV z serwisu Ipla na telewizorze. Głównym celem tego projektu było stworzenie urządzenia wraz z interfejsem, który po podłączeniu do TV pozwoli na szybkie i wygodne oglądanie kanałów TV z serwisu Ipla. W skład urządzenia wchodzi mini komputer Zotac ZBOX B1324 oraz zestaw uruchomieniowy Atnel ATB 1.05a, natomiast oprogramowanie zostało napisane w języku Java oraz C. Czym właściwie jest AVR-IplaTV-Box? AVR-IplaTV-Box jest urządzeniem, które pozwala na oglądanie kanałów TV z serwisu Ipla.tv na telewizorze. Dodatkowo urządzenie wyposażone jest w odbiornik IR, który jest odpowiedzialny za obsługę zmiany kanałów za pomocą zwykłego pilota wyposażone w nadajnik podczerwieni IR. Co właściwie potrafi robić to urządzenie? AVR-IplaTV-Box pozwala w bardzo szybki oraz wygodny sposób na oglądanie oraz zarządzenie kanałami TV z serwisu Ipla za pomocą tego samego pilota, którego używamy do obsługi telewizora. Główne funkcjonalności jakie zostały przeze mnie zaimplementowane w tym projekcie to: zamiana kanałów TV, zatrzymywanie oraz wznawianie transmisji, dwustopniowe przewijanie kanałów (10 sekund lub 5 minut) w tył i przód, regulacja poziomu jasności, automatyczne logowanie do konta Ipla, pełna kontrola urządzenia za pomocą pilota od telewizora, wyświetlanie informacji odnośnie aktualnie emitowanego programu - nazwa oraz krótki opis, wyświetlanie aktualnego paska postępu dla wszystkich programów, łatwa konfiguracja aplikacji za pomocą pliku application.properties, możliwość edytowania dostępnych kanałów TV za pomocą pliku channels.json, możliwość wyłączenia urządzenia z poziomu pilota. Poniżej zamieszczam krótki filmik prezentujący wyżej wymienione funkcjonalności. Skąd wzięła się potrzeba stworzenia takiego urządzenia? Obecnie serwis Ipla TV pozwala na zakup pakietów z kanałami TV (Discovery, Polsat itd.), które można oglądać za pośrednictwem serwisu Ipla TV lub aplikacji na Anroida i iOS. Niestety nie ma możliwości oglądania kanałów TV w aplikacji Ipla na Smart TV, co oznacza że do oglądania kanałów TV jest wymagany komputer lub smartphone. Kontaktowałem się nawet w tej sprawie z pomocą techniczną Ipla, lecz powiedzieli mi, że nie planują w najbliższym czasie wyprowadzenia kanałów TV na smart TV (pewnie wynika to ze sposobu szyfrowania danych - DRM). Wygoda przede wszystkim! Jednym z głównych założeń projektu było, aby całe urządzenie można obsługiwać w taki sam sposób, jak zwykły telewizor. Co wiązało się z koniecznością stworzenia dodatkowego interfejsu, który pozwoliłby na sterowanie urządzeniem za pomocą pilota od telewizora. W tym calu zastosowałem zestawy uruchomieniowy (ewaluacyjny) Atnel ATB 1.05a, wyposażony w m.in. mikrokontroler Atmega 32A oraz odbiornik podczerwieni TSOP31236. Do obsługi odbiornika podczerwieni po stronie mikrokontrolera wykorzystałem bibliotekę IR_UNI autorstwa Mirosława Kardaśa, która była dołączona do książki Język C Pasja programowania mikrokontrolerów 8 - bitowych. Dodatkowo zestaw ten jest wyposażony w układ FT232RL, który pozwala na komunikację z komputerem za pomocą interfejsu USB. Informacje odnośnie aktualnie emitowanego programu pozyskiwane są z serwisu Ipla, a następnie parsowane po stronie aplikacji za pomocą biblioteki JSoup. Oprogramowanie Kod aplikacji desktopowej znajduje się na moim GitHub'ie i każdy może się z nim zapoznać klikając w ten link: AVR-Ipla-TV-Box Jeśli ktoś będzie miał jakieś pytania dotyczące tego projektu to zachęcam do ich zadawania w komentarzu oraz do zapoznania się z dokładniejszym opisem tego projektu na moim blogu, gdzie jest nawet sekcja dla developera, gdzie dokładnie opisuje zastosowane technologie oraz całe flow programu Pełen opis projektu wraz z kodami źródłowymi dostępny jest tutaj: DevTomek.pl -> AVR-IplaTV-Box, czyli Ipla TV na Twoim telewizorze! PS. Nie wiem, czy projekt ten spełnia ogólne założenia działu DIY na tym forum dlatego nie kopiowałem zbyt wiele treści z mojego wpisu na blogu, gdyby jednak okazało się że projekt ten jest wart dokładniejszego opisu to mogę dodać więcej informacji w tym poście dot. tego urządzenia
×
×
  • Utwórz nowe...