Tag Archive for arduino

TeraDMX – Arduino DMX Dimmer Shield

teradmx_1

TeraDMX is fully isolated DMX LED DIMMER Shield for Arduino is designed to connect your project to professional large size DMX networks. It can control high-current (9-24V lamps, relays, solenoids, motors, etc.) or low-current TTL (for servos and small LEDs) output. This shield has been designed to restrain EMI and to eliminate ground loops specifically. Ideal for DMX projects without risking processor damages from high voltage peaks.

The shield is based on a ST485EBDR which has very good ESD protection properties, it allows you to connect up to 256 devices on a single bus!

All components have been carefully selected on their characteristics to ensure proper isolation and performance.

The following settings are configurable via the onboard jumpers:

  • Receive data via RX or other pin via wire jumper
  • PWM ch1 via 9 PIN or other pin via wire jumper
  • PWM ch2 via 10 PIN or other pin via wire jumper
  • PWM ch3 via 11 PIN or other pin via wire jumper
  • Terminator 120 Ohm

The shield comes standard in a 5 pin XLR version, 3 pin versions is available as well. PCB is design to fit both of them.

Every board is tested before shipping to provide high quality service.

This DMX Shield is a high quality solution for reasonable costs that allows you to connect your Arduino driven artwork safely into DMX512 networks.

Features

  • Open-source (Schematics, PCB layout, GERBER files and source code ale available for everyone for free)
  • 3 x 6A PWM LED outputs
  • 9-24V input
  • PCB designed for 3 or 5 XLR PIN sockets
  • Terminator 120 Ohm selected by jumper
  • Crossable control pins
  • ESD protection (ST485EBDR transceiver)
    ± 15 kV (HBM)
    ± 8 kV (IEC-1000-4-2 contact discharge)
  • Opto isolation (6N137SDM Transoptor)
    Superior CMR – 10 kV/us

    • Galvanic decoupling (DC/DC Converter)
      Input / Output isolation 1000 VDC
  • LED Data indicator

Isolation

For a simple setup it is possible to connect the Driver chip directly to the Arduino pins but if you need a robust system, especially on a stage environment, you will have to add some more electronics to avoid electrical damage by defect equipment or accidental circumstances.

The electric potential of the DMX side of the implementation have to be isolated from the processor. There are 2 sort of chips that implement all you need:

  • A 5 volt to 5 volt DC/DC converter with galvanic decoupling. There are complete solutions in a single component available like AM1S-0505SZ that can be used to generate a 5V power supply that is galvanic isolated up to 1000V. So even if there is a high voltage attached to the DMX bus there is a chance of no or low damage.
  • High speed TTL compatible Optocoupler These chips use a LED and light sensitive transistor to isolate the DMX bus from the Arduino data pins. There are standard TTL compatible Optocouplers available like the 6N137.

Arduino Software

(https://github.com/maniakm/TeraDMX)

The Conceptinectics DMX Library for Arduino can be downloaded from the source forge website. https://sourceforge.net/projects/dmxlibraryforar/files/
Sample code for this shield is provided below.

In case you have the shield configured to use the RX pin you have to disable the shield before you can upload your new sketch onto the Arduino board. This jumper allows you to disable the shield without disconnecting it from the Arduino board which saves time.

#include <Conceptinetics.h>

#define DMX_SLAVE_ADDRESS    1 //DMX address
#define DMX_SLAVE_CHANNELS   4 //DMX channels

// Configure a DMX slave controller
DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );

//PIN configuration
const int StatusLed = 13;
const int PWM_R = 11;
const int PWM_G = 10;
const int PWM_B = 9;

unsigned long       lastFrameReceivedTime;
const unsigned long dmxTimeoutMillis = 10000UL;

// the setup routine runs once when you press reset:
void setup() {             

  // Enable DMX slave interface and start recording
  // DMX data
  dmx_slave.enable ();  

  // Set start address to 1, this is also the default setting
  // You can change this address at any time during the program
  dmx_slave.setStartAddress (DMX_SLAVE_ADDRESS);

  //
  // Register on frame complete event to determine signal timeout
  //
  dmx_slave.onReceiveComplete ( OnFrameReceiveComplete );

  // Set led pin as output pin
  pinMode ( PWM_R, OUTPUT );
  pinMode ( PWM_G, OUTPUT );
  pinMode ( PWM_B, OUTPUT );
  pinMode ( StatusLed, OUTPUT );
}

// the loop routine runs over and over again forever:
void loop() 
{

  float M = dmx_slave.getChannelValue (1) / 255.0f;
  int R = dmx_slave.getChannelValue (2) * M;
  int G = dmx_slave.getChannelValue (3) * M;
  int B = dmx_slave.getChannelValue (4) * M;

  analogWrite(PWM_R,R);
  analogWrite(PWM_G,G);
  analogWrite(PWM_B,B);

  if(millis() - lastFrameReceivedTime > 3000)
  {
    digitalWrite(StatusLed,HIGH);
    analogWrite(PWM_R,255);
    analogWrite(PWM_G,0);
    analogWrite(PWM_B,0);
  }
}

bool sta = false;
void OnFrameReceiveComplete (unsigned short channelsReceived)
{
  if ( channelsReceived == DMX_SLAVE_CHANNELS)
  {
    // All slave channels have been received
    //digitalWrite(StatusLed,LOW);    
  }
  else
  {
    // We have received a frame but not all channels we where 
    // waiting for, master might have transmitted less
    // channels
  }

  digitalWrite(StatusLed,sta);
  sta = !sta;
  // Update receive time to determine signal timeout
  lastFrameReceivedTime = millis ();
}

PC Software

You can use PC with DMX controller via USB (Enttec Open DMX) and special software (Q Light Controller).
We provide configuration file for Q Light Controller as well.

teradmx_3

How it’s made

Shield is designed and produced by me. Here you can see soldering process.

 

 

Real Time GPS Tracker

GpsTrackingSystemCase

Real Time GPS Tracking system.
This one was made for special purposes. Mostly for TV transmission from Tour de Pologne cycling race.

 

 

 

 

 

 

 

This system must meet some extra requirements:

- Real time GPS(lat/lon/alt/speed) positions update (every 2 seconds)
- Accurate distance to finish in meters
- Precise position (I use GPS and GLONASS)
- Log current environment temperature
- Log battery level and work whole day on one charge
- Be able to work 99% of race time which is mostly at mountains where GSM signal is sometimes very week.

To meet last requirement I design this tracker to keep simultaneously two independent GPRS connections to two independent GSM providers.
So each device have two GPRS modems. This solution work very well.
Every thing is custom made for this project (hardware and software).
Case was 3D printed on Dynamake Trinity.

Tracking system consist:
- 3 trackers (leader, escape and peleton
- 1 tracker for judge
- .Net Web Server Application which receive data
- .Net WinForms Application to process and control system
- .Net Web Application to present real time posiotion on Google Maps
- .Net Special Application which provide processed data for Blackburst GFX engine which is displaying gfx on TV signal.

DSC000802

Web interface
Zrzut ekranu 2014-07-28 11.15.49

Web tool which helps processing path
Zrzut ekranu 2014-02-26 13.52.57

Control application
Zrzut ekranu 2014-08-03 19.34.01

You can watch how it is working here:

Look at the graphics on top/botom left corner.

Self Balancing Robot

Od kilku lat można zaobserwować wzrost zainteresowania pojazdami balansującymi. Przyczyniły się one do rozwoju różnego rodzaju platform transportowych. Najpopularniejszą z nich jest „Segway”. Roboty tego typu są niczym innym jak odwróconym, mobilnym wahadłem. Idea ta zakłada, że środek ciężkości w takim układzie znajduje się powyżej osi obrotu. Takie wahadło jest więc układem niestabilnym. W związku z tym wymagane jest aktywne regulowanie położenia w celu utrzymania pojazdu w pozycji pionowej. Jest to możliwe dzięki odpowiedniemu dawkowaniu momentu obrotowego dwóm silnikom umieszczonym w podstawie pojazdu. Moment obrotowy jaki trzeba przekazać na koła, które są na stałe sprzęgnięte z silnikami elektrycznymi zamocowanymi w podstawie robota jest wyliczany kilkadziesiąt razy na sekundę za pomocą zestawu czujników takich jak akcelerometr, żyroskop i enkodery silników. Aby opracować algorytmy sterowania konieczne okazało się filtrowanie sygnałów pomiarowych z czujników, co zrealizowano wykorzystując dyskretny filtr Kalmana. Następnie opracowano dedykowany system sterowania silnikami z wykorzystaniem sterowników PID.

Roboty balansujące są bardzo ciekawym przedmiotem badań, ze względu na swoją niestabilną naturę. Pozwalają na zastosowanie różnych metod przetwarzania sygnałów, sterowania silnikami oraz wymagają uwzględnienia ograniczeń związanych z pracą części mechanicznych.

Przedstawiam konstrukcję, którą udało się mi wykonać:

 

 

Poniższy schemat przedstawia schemat ideowy połączeń między modułami.

 

Schemat połączeń

 

 

Utrzymywanie równowagi

Utrzymanie pojazdu w pozycji pionowej sprowadza się do rozwiązania dwóch głównych problemów, które dotyczą pojazdów balansujących. Pierwszym problemem jest określenie orientacji pojazdu w przestrzeni, natomiast drugim utrzymanie pojazdu w dynamicznie stabilnej pozycji.

Utrzymanie pojazdu w pozycji stabilnej przeważnie polega na ciągłym pomiarze kąta odchylenia od pozycji równowagi. W konstrukcjach robotów balansujących zwykle wykorzystuje się do tego celu dane z żyroskopu, akcelerometru i enkoderów umieszczonych w napędzie robota. Dane z czujników są filtrowane i poddawane fuzji poprzez filtr komplementarny lub filtr Kalmana. Do sterowania silnikami wykorzystywane są również sterowniki PID.

Pomiar kąta odchylenia pojazdu od pionu

Pomiar kąta odchylenia można zrealizować na różne sposoby. Kąt może być wyznaczony na podstawie czujnika odległości platformy od podłoża, lecz to rozwiązanie jest dosyć wrażliwe ze względu na rodzaj podłoża po jakim porusza się robot. Innym sposobem może być zamontowanie ramienia dotykającego podłoże, którego oś obrotu zamontowana jest na enkoderze lub potencjometrze. Takie dodatkowe ramie może stwarzać kolejne problemy przy poruszaniu się robota, jest ono wrażliwe na nierówności itp. Zdecydowanie lepszym sposobem, który został wykorzystany w niniejszej pracy jest pomiar kąta odchylenia względem wektora przyspieszenia grawitacyjnego w połączeniu z pomiarem prędkości obrotowej. W tym celu zastosowano czujnik przyspieszenia, czyli akcelerometr oraz czujnik prędkości obrotowej (żyroskop).

Odwrócone wahadło

Robot bazuje na idei odwróconego wahadła. Środek obrotu w takim układzie znajduje się powyżej osi obrotu.

wahadło

Rysunek: Schemat obróconego wahadła,
m – masa; g – przyspieszenie grawitacyjne; F- siła działająca na masę m; θ – wychylenie od pozycji pionowej; l – długość ramienia

Odwrócone wahadło jest przykładem układu niestabilnego. W związku z tym, aby utrzymać je w stanie równowagi niezbędna jest aktywna regulacja. Utrzymanie wahadła w pionie możliwe jest dzięki ściśle określonemu przemieszczaniu osi x układu współrzędnych.

W omawianym pojeździe przemieszczanie osi X jest uzyskane poprzez zamontowanie osi obrotu wahadła na ułożyskowanych kołach, które są dynamicznie napędzane przez niezależne silniki prądu stałego.

Taki układ umożliwia ciągłe przekazywanie odpowiedniego momentu obrotowego na koła dążąc do uzyskania stanu równowagi wahadła.

 

Podsumowanie

Tak powstał pojazd samodzielnie utrzymujący równowagę na dwóch kołach. Podczas budowy wielokrotnie zmieniano koncepcje w kwestii mechanicznych, elektronicznych i programistycznych. Powstały 3 różne konstrukcje mechaniczne, wiele wersji oprogramowania oraz użyto dwóch różnych czujników przyspieszenia i prędkości kątowej. Na każdej konfiguracji zostały przeprowadzone testy, które pozwoliły wybrać rozsądne rozwiązanie. Znaczącym problemem były przekładnie użyte do przeniesienia napędu. Niestety posiadały znaczące luzy, które utrudniały poprawne utrzymywanie równowagi. Bezwładność przekładni silnikowej nie została nigdzie uwzględniona w obliczeniach. Powodowało to wpadanie robota w wibracje.

Konstrukcja jest w dalszym ciągu rozwijana. W przyszłości planowana jest budowa pełnowymiarowego transportera, który będzie mógł przewodzić człowieka. Już w tej chwili część elementów nadaje się do przeniesienia 1:1 do pełno wymiarowego pojazdu. Są to sterowniki silników, czujniki odchylenia od pionu, elektronika sterująca. Do zbudowania potrzebna jest całkowicie nowa konstrukcja mechaniczna, silniki, zasilanie, enkodery oraz modyfikacja oprogramowania.

W trakcie budowy zebrano wiele interesujących informacji i zdobyto bezcenne doświadczenie, które zostanie wykorzystane do budowy pełno wymiarowego pojazdu.

Po zbudowaniu modelu okazało się, że wybrana metoda pomiaru odchylenia od pionu na podstawie przyspieszeń w dwóch osiach oraz przyspieszenia kątowego ma dość dobrą dynamikę oraz udało się wyeliminować dryft żyroskopu gdy pojazd jest w stanie statycznym. Robot jest w stanie utrzymywać równowagę i powracać do stanu stabilnego po wystąpieniu przyłożeniu siły z zewnątrz. Taki układ ma jednak pewne ograniczenia. Sprawdza się jedynie podczas przemieszczania się po płaskiej powierzchni oraz nachylone zgodnie z kierunkiem jazdy. Nie sprawdza się gdy pojazd porusza się po powierzchni przechylonej na boki. Można by uwzględnić to w obliczeniach mierząc również odchylenie w kolejnej osi robota. Jednak prowadzi to do znacznego skomplikowania oprogramowania.

Wykonano również oprogramowanie umożliwiające kontrolowanie parametrów pracy pojazdu w czasie rzeczywistym na ekranie komputera zarówno w postaci surowych liczb jak również wykresów. Taka analiza danych bardzo ułatwiła dalsze pisanie oprogramowania i kalibracje.

 

Możliwości rozbudowy

Opisywany pojazd osiągnął etap samodzielnego utrzymywania równowagi. Jest to kluczowa funkcjonalność którą można rozwinąć o wiele innych dodatkowych zarówno elektronicznych, mechanicznych jak i programistycznych. Oto kilka możliwych przykładów rozwoju:

  • Zastosowanie silników bezszczotkowych (BLDC). Pozwoli to na kontrolowanie prędkości obrotowej prawie niezależnie od mocy silnika.
  • Zastosowanie precyzyjniejszej przekładni. Zredukuje to luzy, które utrudniają utrzymanie równowagi.
  • Zamontowanie dokładniejszych enkoderów. Zwiększy to dokładność odczytu prędkości i przemieszczenia.
  • Stworzenie modelu dynamicznego pojazdu oraz implementacja nieliniowego sterownika. Pozwoli to na lepsze zachowanie przy dużych odchyleniach od pionu.
  • Zamontowanie urządzeń służących do skanowania otoczenia. Pozwoli to na eksploracje terenu, budowanie mapy, omijanie przeszkód itp.
  • Budowa pełnowymiarowego transportera dla człowieka.