Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Terminal'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona


TempX

Znaleziono 2 wyniki

  1. Opisywałem kiedyś takie małe "coś" podłączone do RPi, które pełniło rolę dodatkowych klawiszy i LED do Octoprinta. To coś działało sobie bez problemu przez parę lat, okazało się niesamowicie przydatne, i pewnie bym nie wtykał palców do czegoś co działa gdyby bnie jeden drobiazg: potrzebowałem RPi w wersji co najmniej 3b. Jako że zakup RPi to na chwilę obecną temat raczej na opowiadanie SF, postanowiłem wyjąć z drukarki 3b+ i w jego miejsce podłączyć terminal Wyse.Miałem co prawda jeden "luźny" Zero W, ale ten podobno kaszle już przy prostym drukowaniu, a obsługa dwóch drukarek jednocześnie jest raczej poza jego możliwościami... Zainstalowałem Debiana, Octoprinta, skonfigurowałęm - ruszyło od strzału. Tylko problem: to swoje urządzenie podłączałem do GPIO, a terminal takowego nie posiada... Postanowiłem więc lekko przerobić program i zrobić nowe urządzenie. Po przeszukaniu szuflady okazało się, że mam do dyspozycji: Arduino Pro Mini (co prawda z upalonym jednym pinem, ale to akurat mały problem) Konwerter USB/UART na kabelku (coś takiego), który leżał sobie parę lat nieużywany Dwa wyświetlacze 4x7seg (z czego jeden okazał się bezużyteczny, bo nie wiem czemu nie chciał współpracować z Arduino, mimo że z ESP nie miał problemów) No i oczywiście jakieś pstryczki. Postanowiłem więc zagospodarować Arduino i konwerter. Na początek oczywiście konfiguracja konieczna do działania całości. Ponieważ obie drukarki mam na CH340, nusiałem trochę pokombinować z rozróżnianiem. Na szczęście zrobiłem to już wcześniej, tak że wystarczyło dodanie dwóch linijek do reguł udeva: ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", ATTRS{bcdDevice}=="0260", RUN+="/bin/systemctl kill -s USR1 watchprinter", SYMLINK+="ttyUSB98" ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", ATTRS{bcdDevice}=="0254", RUN+="/bin/systemctl kill -s USR2 watchprinter", SYMLINK+="ttyUSB99" przy czym demon watchprinter (służący do poinformowania octoprinta, że drukarka została włączona) był prawie taki sam, jak poprzednio, z tą różnicą, że łączył się z jedną z dwóch instancji octoprinta. Ogólnie urządzenie wyszło mi nawet całkiem ładnie (przepraszam za jakość zdjęcia, ale moja komórka nie chciała mi złapać ostrości przy wyświetlaczu świecącym prosto w obiektyw). Przy okazji wyszło na to, że wystarczy mi jeden demon z programem (w starej wersji miałem dwa, jeden sterował diodami, drugi przyjmował polecenia od klawiszy). Ponieważ wyświetlacz daje dużo więcej możliwości, postanowiłem wyświetlić jakieś sensowne komunikaty: nc -- brak połączenia z demonem -- -- drukarka wyłączona IDLE - drukarka włączona, bezczynna HEAT - grzanie stołu/hontendu PAUS - wydruk wstrzymany (np. ręczna zmiana koloru filamentu) Cncl - wydruk anulowany Przy drukowaniu naprzemiennie wyświetlają się pozostały czas i procent wydruku. Klawisze realizują bardzo proste funkcje: PAU - spauzowanie wydruku PAU (long press) - wyłączenie silników RUN - wznowienie wydruku RUN (long press) - podłączenie drukarki do octoprinta (np. po restarcie octoprinta, gdy drukarka jest włączona). Załączam kody zarówno demonów watchprinter i octan, jak i szkic dla Arduino: octan.zip Jedna uwaga: co prawda urządzenie miało obsługiwać dwa wyświetlacze i cztery klawisze, ale z uwagi na posiadanie jednego sprawnego wyświetlacza część kodu pozostała w strefie pobożnych życzeń. Mam nadzieję jednak, że jeśli ktoś będzie chciał coś podobnego zrobić nie będzie mu to przeszkadzać (albo skontaktuje się z informacją, że bez wersji na dwie drukarki życie mu niemiłe i muszę brakującą część kodu dopisać) 🙂 Schematu nie podaję - miejsca podłączenia dwóch klawiszy i wyświetlacza można określić na podstawie pliku .ino (a do tego sprowadza się całość). Ogólnie mogę powiedzieć, że na Wyse Zx0D (2 GB RAM, 16 GB SDD) chodzi to lepiej niż na RPi (który miał czasami problemy z dogadaniem się z drukarką z przyczyny takiej, że miał problemy).
  2. Transmisja danych przy użyciu portu szeregowego ciągle jest bardzo popularnym sposobem komunikacji używanym w rozmaitych układach kontrolno-pomiarowych. Dotyczy to zarówno projektów hobbistycznych jak również profesjonalnych rozwiązań. Obecnie mamy do wyboru wiele programów, które pozwalają obsługiwać port szeregowy z poziomu naszych komputerów. Wspomniane terminale posiadają wiele użytecznych opcji włącznie z możliwością graficznej wizualizacji odbieranych danych. Zdarza się jednak, że nawet w amatorskich zastosowaniach brakuje pewnych opcji, które pozwalały by na obsługę portu szeregowego adekwatnie do celu budowanego układu. W takim przypadku należy stworzyć własne oprogramowanie co czasami może być dosyć trudne i czasochłonne. Bardzo pomocnym rozwiązaniem może okazać się więc środowisko programistyczne LabVIEW. Ten artykuł bierze udział w naszym konkursie! 🔥 Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » Dlatego w tym artykule przedstawię: idee środowiska LabVIEW minimalne podstawy, które pomogą stworzyć pierwszy program przykład obsługi portu szeregowego dla pomiaru temperatury przy użyciu Arduino Uno i termometru DS18B20 rozwojowe możliwości środowiska LabVIEW LabVIEW jest środowiskiem programistycznym stworzonym przez firmę National Instruments. To co wyróżnia to środowisko to graficzne podejście do tworzenia programów. Kod składa się z wizualnych reprezentacji funkcji oraz zmiennych połączonych ze sobą i wykonujących się w określonej kolejności. LabVIEW używane jest przede wszystkim do prowadzenia pomiarów, akwizycji danych i współpracy z różnymi urządzeniami. Dzieje się tak, ponieważ w tym środowisku znajdziemy szeroką paletę gotowych funkcji i bibliotek, które pozwalają na szybką implementację wspomnianych funkcjonalności. Do niedawna LabVIEW było dostępne komercyjnie bądź dla studentów uczelni technicznych w ramach akademickich licencji. Jednak od 2020 roku dostępna jest wersja LabVIEW Community Edition, którą można wykorzystywać do niekomercyjnych zastosowań. Jedynym wymaganiem będzie założenie konta na platformie NI. Oprogramowanie można pobrać z pod tego linku. Instalacja jest bardzo prosta, nie trzeba nic zmieniać a jedynie postępować wedle domyślnych ustawień. W telegraficznym skrócie zaprezentuję jak obsłużyć to środowisko i stworzyć pierwszy program. Po uruchomieniu wybieramy File -> New VI i naszym oczom ukażą się dwa okna. Jest to front panel – okno z interfejsem użytkownika dostępne dla niego w trakcie działania programu oraz block diagram – miejsce w którym „projektujemy” kod naszego programu. Klikając prawym przyciskiem myszy na front panelu otwiera nam się paleta z dostępnymi kontrolkami, z których możemy budować interfejs. Reprezentacje tych kontrolek pojawią się na drugim oknie. Przechodząc na to drugie okno czyli block diagram będziemy mogli przeprowadzić na nich pożądane operacje. Klikając prawym przyciskiem myszy ukaże nam się paleta, w której będziemy mieli do wyboru wartości stałe i funkcje, z których będziemy tworzyli kod programu. Najprostszy program posłuży nam do dodawania dwóch liczb. W tym celu na front panel-u klikamy prawym przyciskiem myszy i wybieramy paletę Numeric. Wybieramy stamtąd dwa razy Numeric Control i raz Numeric Indicator. Klikając dwa razy na domyślne nazwy możemy je zmienić wedle własnego upodobania. Przechodzimy na block diagram, również klikamy prawym i z palety Numeric wybieramy funkcję Add. Kiedy najedziemy na nią pojawią się z jej lewej strony dwa wejścia a z prawej jedno wyjście. Kiedy zbliżymy się do nich kursorem zamieni się on w małą „szpulkę”. Klikając lewym przyciskiem myszy możemy podłączyć dwa Numeric Control do wejść funkcji Add i jedno Numeric Indicator do wyjścia funkcji Add. Wracając na front panel możemy wpisać jakieś wartości liczbowe w Numeric Control i kiedy wciśniemy biała strzałkę na pasku narzędzi (zaznaczona na czerwono na poniższym obrazku) uruchomimy nasz program i zobaczymy, że w Numeric Indicator pojawił się wynik dodawania wpisanych liczb. Uogólniając programowanie w LabVIEW sprowadza się do wybierania kontrolek i łączenia ich z różnymi funkcjami, strukturami i innymi kontrolkami tak, aby uzyskać zamierzony cel. Należy pamiętać przede wszystkim o tym, że można łączyć tylko te same typy danych a wiele funkcji jest przeznaczonych dla jednego typu zmiennej. Wizualnie dane oznaczone są różnymi kolorami. W dużym uproszczeniu można powiedzieć, że łączymy bloczki czy wejścia/wyjścia funkcji o tych samych kolorach. Zachęcam do zapoznania się z paletami kontrolek i funkcji oraz eksperymentów z pierwszymi prostymi programami. To co może się przydać na początek to: skrót do okna pomocy [Ctrl+H] – po najechaniu na dany bloczek wyświetli jego „dokumentacje” skrót do pozycjonowania okien [Ctrl+T] – ułoży block diagram i front panel obok siebie dopasowując się do ekranu czyszczenie block diagram-u [Ctrl+B] - usuwa niewykonywalne połączenia powstałe po usunięciu bloczków paleta narzędzi [View->Tools Palette] – pozwala wybrać obecną funkcje kursora, domyślnie funkcje przełączają się automatycznie w zależności od jego położenia Po tym wprowadzeniu minimalnych podstaw przejdźmy do meritum artykułu. Aby zademonstrować obsługę portu szeregowego w LabVIEW skorzystałem z Arduino Uno konstruując poniższy układ: Składa się on naturalnie z płytki Uno, diody LED wraz z rezystorem 220Ω i termometru cyfrowego DS18B20 wraz z wymaganym rezystorem 4,7kΩ pomiędzy linią danych a zasilaniem. Na Arduino został wgrany następujący program: #include <OneWire.h> //biblioteki potrzebne do obsługi czujnika temperatury #include <DallasTemperature.h> #define ledPin 3 // definiujemy pin do obsługi diody LED #define oneWireBus 2 // definiujemy pin do obsługi protokołu OneWire bool ledState=false; // zmienne do przechowywania aktualnej temperatury, stanu diody i progu "alarmowego" float temperature=0.0; float threshold=20.0; OneWire oneWire(oneWireBus); //inicjalizacja OneWire DallasTemperature sensors(&oneWire); void setup() { pinMode(ledPin,OUTPUT); // inicjalizacja pinu na wyjście, stan niski Serial.begin(9600); // otworzenie komunikacji szeregowej while (!Serial) { ; // oczekiwanie na połączenie } sensors.begin(); //inicjalizacja czujnika temperatury } void loop() { sensors.requestTemperatures(); //pobranie wartości temperature=sensors.getTempCByIndex(0); Serial.println(temperature); //informacja o temperaturze na port szeregowy w postaci kodów ASCII Serial.println(ledState); //informacja o stanie diody na port szeregowy w postaci kodów ASCII delay(500); while(Serial.available()>0) // jeżeli dane w buforze to czytaj kolejną prawidłową wartość float { threshold=Serial.parseFloat(); } if(temperature<threshold) //jeżeli temperatura niższa od progu to zapal diode alarmową { digitalWrite(3,HIGH); ledState=true; } else { digitalWrite(3,LOW); ledState=false; } delay(500); } Kod został opatrzony odpowiednimi komentarzami dlatego nie ma sensu go szczegółowo omawiać. Warto jednak zaznaczyć ogólną idee. Jego zadaniem jest pomiar temperatury i alarmowanie o jej spadku poniżej pewnej progowej wartości przez zapalenie diody LED. Informacje o temperaturze i stanie diody wysłane są szeregowo do danego terminala tak aby można je było wizualizować. Dodatkowo program sprawdza czy terminal nie przesyła informacji o nowej wartości progowej. Tak dobrane funkcjonalności pozwolą na pokazanie implementacji dwustronnego przesyłu danych. Teraz przejdźmy do naszego programu jaki stworzyłem w LabVIEW. Podstawową paleta jaką wykorzystałem do tego programu jest paleta Serial, którą znajdziemy w funkcjach, w kategorii Instruments I/O. Odpowiada ona za wszystkie operacje jakie możemy przeprowadzić na porcie szeregowym. Stworzony program posiada wszystkie opcje jakie narzuca oprogramowanie wgrane na Arduino. Front panel tego programu prezentuje się następująco: Patrząc od lewej strony - mamy tutaj wybór portu, który służy nam do połączenia z Arduino i miejsce do wpisania nowego progu dla temperatury. Poniżej - graficzna wizualizacja stanu diody LED i przycisk służący do zamknięcia komunikacji oraz programu. Obok znajduje się pasek, który pokazuje ostatnio odczytaną temperaturę. Dalej znajduje się wykres, który pokazuje zebrane kolejno wartości temperatury oraz obecny próg. Nad wykresem znajduje się legenda i narzędzia do nawigacji wykresu -przybliżania, zaznaczania itd. Kod tego programu znajduje się poniżej. Przy braku wcześniejszej styczności z LabVIEW program może się okazać skomplikowany ale posiada on stosowne komentarze. Po jego pobraniu i sprawdzeniu poszczególnych bloczków z użyciem okna pomocy (skrót [Ctrl+H]) można w miarę szybko przyswoić jego konstrukcję i zmodyfikować do swoich zastosowań. To co najważniejsze to odpowiednie ustawienie parametrów komunikacji. Otwierając połączenie w LabVIEW należało podać te same parametry jakie zostały przyjęte w układzie pomiarowym. Chodzi tu o prędkość transmisji, liczbę bitów danych, parzystość i bity stopu. Wszystkie ustawienia portu szeregowego związane z inicjalizacją połączenia przez Arduino można wyczytać z dokumentacji znajdującej się pod tym linkiem. Istotne było też użycie w kodzie Arduino funkcji println(), która dodaje znak nowej linii do każdego wysłanego ciągu znaków ASCII. W trakcie otwierania komunikacji w LabVIEW zaznaczyłem opcję, że każdy komunikat będzie się kończył takim znakiem co znacznie ułatwia późniejszy odczyt. Funkcja nie musi wtedy znać dokładnej ilości bajtów jakie maja nadejść tylko czyta wszystko do znaku „/n”, bez ryzyka wystąpienia jakiegoś timeout-u czy ucięcia danych. Zwłaszcza w przypadku gdy nadchodzący łańcuch danych jest zmienny. Program co 500ms sprawdza czy w buforze pojawią się dane, zgodnie z kolejnością wysyłu (temperatura, stan diody) dokonuje odczytu, konwertuje z łańcucha znakowego na odpowiedni typ danych i wyświetla. Następnie przesyła obecną wartość temperatury progowej, sprawdza czy nie wystąpił błąd albo czy ktoś nie wcisnął wyłączenia programu. Potem cykl zaczyna się od nowa. Po wyłączeniu programu połączenie się zamyka, wykres zostaje wyczyszczony i wszystko wraca do domyślnych wartości. Jest to program, który demonstruje głównie sam koncept transmisji szeregowej w LabVIEW. Sam układ nie jest mocno funkcjonalny ale pokazuje dwustronną komunikację z możliwością wizualizacji i kontroli. Biorąc pod uwagę łatwość w konstrukcji interfejsu użytkownika, mnogość rozmaitych funkcji i w miarę niski próg wejścia w naukę tego środowiska LabVIEW może okazać się bardzo przydatne. Już domyślne kontrolki pozwalają tworzyć przejrzyste i profesjonalnie wyglądające GUI a wiele rozwiązań od społeczności znacznie poszerza możliwości. Same dane mogą zostać poddane bezproblemowej obróbce, jeżeli chcemy zrobić FFT czy dopasowanie liniowe to bez problemu znajdziemy takie funkcję. Mam nadzieję, że artykuł zainteresował Was tematem i w przyszłości włączycie LabVIEW do palety narzędzi używanych w swoich projektach. Oczywiście mam świadomość, że dla osoby zupełnie nieobeznanej z tym oprogramowaniem tworzenie swojego terminalu szeregowego może okazać się niepotrzebnym wysiłkiem. Jednak gwarantuje, że podstawy można opanować bardzo szybko, a zamieszczony przeze mnie przykład łatwo przerobić na swoje potrzeby. Dodatkowo istnieją specjalne biblioteki dedykowane stricte pod Arduino, Raspberry Pi a samo środowisko wspiera współprace z Matlabem, Pythonem czy C. LabVIEW może okazać się również bardzo przydatne w innych zastosowaniach, nie tylko tych związanych z elektroniką i pomiarami. Dlatego, zachęcam do nauki i skorzystania z szerokiej gamy materiałów jakie można znaleźć na ten temat w internecie. SerialMonitorExample.rar
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.