Skocz do zawartości

Przeszukaj forum

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

  • Szukaj wg tagów

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

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino, 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 - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - 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
    • Kosz

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


Znaleziono 2 wyniki

  1. Jako że wpadł do mnie na warsztat NVR z wyjściem RS485 oraz kilka kamer analogowych postanowiłem na testy zbudować sobie kamerkę z PTZ, no może bez Z. Na początek wyjaśnię co to jest PTZ skrót rozwijamy jako Pan Tilt Zoom, system wykorzystywany w kamerach do obracania kamerą oraz jeśli kamera posiada taką funkcjonalność regulacji ogniskowej. Głodnych wiedzy odsyłam do https://en.wikipedia.org/wiki/Pan–tilt–zoom_camera Zaczęło się od tego że znalazłem na stronie thingverse parę projektów: https://www.thingiverse.com/thing:107957 https://www.thingiverse.com/thing:2467743 Wydrukowałem jeden z nich i po szybkim złożeniu konstrukcji podłączeniu pod arduino nano, oraz napisaniu testowego programu wyszło coś takiego: Serwa które użyłem to Serwo TowerPro SG-90. Aby ruszyć dalej trzeba było zapoznać się z protokołem który wykorzystywany jest w komunikacji rejestrator -> kamera, padło na protokół Pelco-D. Znalazłem manual z 1999 roku dotyczący tego protokołu i całość prac programistycznych poszła dosyć sprawnie. pelco-d.pdf Szybkie podłączenie modułu rs485 do Arduino Nano i mojego nvr’a, krótki program i zaczynamy debug komunikacji. Przykład danych które odbieram poniżej: 255 4 0 4 39 0 47 SUM: 47 255 4 0 4 39 0 47 SUM: 47 255 4 0 4 39 0 47 SUM: 47 255 4 0 2 39 0 45 SUM: 45 255 4 0 2 39 0 45 SUM: 45 255 4 0 2 39 0 45 SUM: 45 Pierwszy bajt to synchronizacja, drugi to adres kamery, trzeci i czwarty to bajty w których przekazywane są polecenia, nas najbardziej interesuje bajt czwarty, gdzie 4 to obrót w lewo a 2 to obrót w prawo, dodatkowo w bajcie piątym i szóstym przekazywane są informacje o prędkości, a bajt siódmy to suma kontrolna. Teraz wystarczyło połączyć 2 programy w jeden i można kamerkę powiesić w warsztacie no i nie do końca. Od tego momentu natrafiłem na pewną trudność. Okazało się że biblioteka Servo.h oraz SoftwareSerial.h korzystają z tego samego timera, co objawiało szarpaniem serwami przy jakiejkolwiek komunikacji po rs485. ehh…. Znalazłem inną bibliotekę ServoTimer2.h która według wielu źródeł powinna usunąć opisywaną trudność, więc po przerobieniu programu tak aby korzystał z nowej biblioteki, nic nie uległo zmianie Więc postanowiłem obejść problem programowo. //Look for incoming data from Pelco-D controller if (RS485Serial.available() > 0) { servo1.detach(); servo2.detach(); Wyłączając serwa na czas odczytu danych po rs485. Od tej pory wszystko zaczęło działać płynnie. Tak jak na poniższym filmie. Dodatkowo dorobiłem kontaktron na drzwi do warsztatu, tak aby kamera przy otwarciu drzwi ustawiała się na wchodzącego, a po zadanym czasie z powrotem kierowała się na okno. Program przewiduje obroty kamerą w wszystkie strony z uwzględnieniem prędkości wysyłanej z NVR’a, scan kamerą po pomieszczeniu, oraz presety. switch (data) { case 0x00 : break; case 0x02 : pulseWidth1 = pulseWidth1 + turnRate1; break; // right case 0x04 : pulseWidth1 = pulseWidth1 - turnRate1; break; // left case 0x10 : pulseWidth2 = pulseWidth2 - turnRate2; break; // down case 0x08 : pulseWidth2 = pulseWidth2 + turnRate2; break; // up case 0x0C : pulseWidth1 = pulseWidth1 - turnRate1; pulseWidth2 = pulseWidth2 + turnRate1; break; // left-up case 0x0A : pulseWidth1 = pulseWidth1 + turnRate1; pulseWidth2 = pulseWidth2 + turnRate1; break; // right-up case 0x14 : pulseWidth1 = pulseWidth1 - turnRate1; pulseWidth2 = pulseWidth2 - turnRate2; break; // left-down case 0x12 : pulseWidth1 = pulseWidth1 + turnRate1; pulseWidth2 = pulseWidth2 - turnRate2; break; // right-down case 0x1B : scan = 1; break;// scan on case 0x1D : scan = 0; break;// scan off case 0x07 : // presets if (byteReceived[5] == 1) // drukarka { pulseWidth1 = 90; pulseWidth2 = 140; } else if (byteReceived[5] == 2) // tv { pulseWidth1 = 35; pulseWidth2 = 140; } else if (byteReceived[5] == 3) // drzwi { pulseWidth1 = drzwiS1; pulseWidth2 = drzwiS2; } else if (byteReceived[5] == 4) // okno { pulseWidth1 = oknoS1; pulseWidth2 = oknoS2; } break; } W planach mam funkcjonalność ustawiania presetów z rejestartora, lecz nie było mi to potrzebne w tej chwili, a dostęp do ardiuno mam na wyciągnięcie ręki, więc zawsze mogę go przeprogramować. Zastanawiała mnie również żywotność serwomechanizmów, jak narazie cała konstrukcja wisi już ponad pół roku, do warsztatu wchodzę przynajmniej 5 razy dziennie, w soboty i niedziele licznik wejść myślę że dobija do jakiś 20 i jak dotychczas nic złego im się nie dzieje. Poniżej udostępniam również kod do arduino gdyby ktoś chciał się również pobawić. Lista użytych elementów: Arduino nano Nano Expansion Adapter Serwomechanizmy moduł RS485 Kod źródłowy: PTZ_rs485.zip
  2. Witam, moj pierwszy post na tym forum wiec pozdrawiam wszystkich Przy okazji instalacji fotowoltaniki w gospodarstwie domowym stwierdziłem, ze fajnie by było monitorować bilans energetyczny. W tym celu zakupiłem licznik, po pierwszych nieudanych próbach połączenia z NodeMcu stwierdziłem ze wygodniej będzie postawić tam jakieś Raspberry - licznik jest w trudno dostępnym miejscu, Arduino OTA się nie sprawdziło, wiec postawiłem na wygodę czyli SSH. Zakupiłem Raspberry Pi Zero oraz nakładkę z interfejsem RS485 https://botland.com.pl/pl/raspberry-pi-hat-komunikacja/11722-rs485-pi-sn65hvd72-interfejs-rs485-dla-raspberry-pi-7426787870163.html?search_query=RS485+hat&results=3. Przygotowałem raspberry tak jak jest napisane tutaj http://minimalmodbus.readthedocs.io/en/master/installation.html i napisalem spkrypt: import minimalmodbus SLAVE_ADDRESS = 1 REGISTER_ADDRES = 0 # przykladowo minimalmodbus.BAUDRATE = 9600 minimalmodbus.PARITY = 'E' ins = minimalmodbus.Instrument('/dev/ttyAMA0' SLAVE_ADDRESS) print(ins.read_register(REGISTER_ADDRESS)) Problem w tym, ze skrypt zachowuje się losowo, czasem zadziała czasem wyrzuci IOError (No connection with module), kiedy np dla rejestru 32 bitowego używam read_long() lub dla floata read_float() wyrzuca albo IOError lub ValueError. Czy ktoś ma doświadczenie w tej materi i wie co posprawdzać, co może byc nie tak? Jak będę w domu wrzucę pełne opisy błędów. z gory dzięki
×
×
  • Utwórz nowe...