Telemetry Viewer v0.6

Telemetry Viewer v0.6 Changelog (2019-09-08)

  • The x-axis of Time Domain Charts can now display elapsed time.
  • Timestamps are recorded. Exported CSV files contain the UNIX timestamp for each sample.
  • CSV files can be imported (replayed.)
  • New and existing charts are configured with a non-modal side panel instead of a pop-up window.
  • Layout files and CSV files can be imported via drag-n-drop.
  • Charts can be maximized (full-screened.)
  • The Time Domain Chart now renders properly even when the sample number is very large.
  • Samples are automatically swapped to disk if there's not enough space in RAM.
  • Binary mode supports uint8 values.
  • Binary mode supports bitfields (for showing boolean and enum values.)
  • Various small bug fixes. See the git commit log for more details.

Telemetry Viewer v0.6 Demo Video



Download

Executables (.jar) and source code (.zip) can be downloaded at http://www.farrellf.com/TelemetryViewer/ or the project can be viewed at https://github.com/farrellf/TelemetryViewer

Telemetry Viewer v0.5

This version of Telemetry Viewer focused mostly on adding support for TCP and UDP.

Telemetry Viewer v0.5 Changelog (2018-08-20)

  • Telemetry can be received over UART, TCP or UDP.
  • Tooltips can be drawn over a chart to see the numeric values for data under the mouse.
  • A notification system was added to display less-distracting (non-modal) alerts to the user.
  • Moved the GUI-related settings into a sidebar on the left side of the program.
  • Logitech smooth scrolling can now be disabled.
  • OpenGL antialiasing can now be disabled.
  • Chart rendering can be benchmarked (CPU and GPU times.)
  • Various small bug fixes. See the git commit log for more details.

Telemetry Viewer v0.5 Demo Video



Download

Executables (.jar) and source code (.zip) can be downloaded at http://www.farrellf.com/TelemetryViewer/ or the project can be viewed at https://github.com/farrellf/TelemetryViewer

Telemetry Viewer v0.4

This version of Telemetry Viewer focused mostly on making things easier and more intuitive for the user.

Telemetry Viewer v0.4 Changelog (2017-07-21)

  • The GUI now guides the user on how to connect to a serial port or open an existing layout.
  • Arduino sketch templates are generated to make it easier to write the firmware.
  • The GUI now guides the user on how to place charts.
  • The charts were re-themed to use a tile-based layout instead of a plain grid.
  • Most of the chart attributes can now be hidden (axis titles, axis scales, legends, etc.)
  • When adding a chart, the chart is drawn live so you can see the effects of the settings.
  • Chart settings can also be changed by clicking the gear icon near the top-right corner of each chart.
  • Faster rendering for the Waveform and Waterfall modes of the Frequency Domain Chart.
  • Various small bug fixes. See the git commit log for more details.

Telemetry Viewer v0.4 Demo Video



Download

Executables (.jar) and source code (.zip) can be downloaded at http://www.farrellf.com/TelemetryViewer/ or the project can be viewed at https://github.com/farrellf/TelemetryViewer

Basic Home Automation With an IR LED and Receiver

Controlling devices that have infrared remotes is an easy and low-cost form of home automation, so I decided to make a YouTube tutorial video about it. I'm using the "IRremote" library by Ken Shirriff, and wrote some firmware that uses an IR receiver and an IR LED as a computer-controlled universal remote. The end result was being able to press a key on my keyboard, and having household decives respond accordingly. I set it up so i can turn my TV and tower fan on or off.

After installing the IRremote library, the firmware is pretty simple:

#include <IRremote.h> IRrecv receiver(2); // receiver is connected to pin2 IRsend sender; decode_results results; long repetitions; long count; unsigned int durations[100]; void (*reset)(void) = 0; void setup() { Serial.begin(9600); receiver.enableIRIn(); // start receiving signals } void loop() { // check for text from the PC // the PC sends a string containing "r,n,a,b,c,d,e,..." where r is how many times to repeat the command, // n is the number of durations, and a/b/c/d/e/... are the durations. // the durations are how long each mark and space period of an infrared command should last, in microseconds. if(Serial.available()) { // parse the text repetitions = Serial.parseInt(); count = Serial.parseInt(); for(int i = 0; i < count; i++) durations[i] = Serial.parseInt(); // send the command using 40kHz PWM for(int i = 0; i < repetitions; i++) { sender.sendRaw(durations, count, 40); delay(50); } // for a bit of fault tolerance, reset the arduino after receiving any command reset(); } // check if a decoded infrared signal is available if(receiver.decode(&results)) { Serial.println(results.value, HEX); Serial.print(results.rawlen - 1); for(int i = 1; i < results.rawlen; i++) { unsigned int number = results.rawbuf[i] * USECPERTICK; Serial.print(","); Serial.print(number); } Serial.println(""); receiver.resume(); } }

If you aim a remote at the IR receiver and press a button, details about that waveform will be printed to the serial port. To have the Arduino send that IR command, just send that text back to the Arduino, but add a number and comma to the beginning. That number specifies how many times to repeat the command. Some protocols, like Sony's, require a command be sent three times. So you would send "3," followed by the text the Arduino printed out.

We now have the hardware and firmware all setup, but it's a pain to send those IR commands (copy-and-pasting text into the Serial Monitor.) We can create some batch files to automate the sending of text to the Arduino. These will need to be adjusted for your IR commands and COM port, but for me it was:

fan_on_off.bat

mode COM3 baud=9600 parity=n data=8 stop=1 echo "1,23,1200,450,1250,400,400,1300,1200,450,1200,450,400,1250,400,1250,400,1300,350,1300,400,1250,400,1250,1250" > COM3

tv_on_off.bat

mode COM3 baud=9600 parity=n data=8 stop=1 echo "3,25,2400,600,600,600,1150,600,1200,600,1150,650,1150,600,1150,650,550,600,1200,600,600,600,550,660,600,600,600" > COM3

By default the Arduino will reset immediately after you connect to it's serial port, so that needs to be disabled. I show how in the video, you just need to cut a trace on the PCB. After that, double clicking on those batch files will send the IR commands.

I used AutoHotKey to have key presses trigger those batch files. A simple script tells AutoHotKey to turn my tv on/off if I press F12, and turn my fan on/off if I press F11:

f12:: Run, C:\Users\FarrellF\Desktop\tv_on_off.bat Return f11:: Run, C:\Users\FarrellF\Desktop\fan_on_off.bat Return

See the video for more details.

This is the infrared LED and receiver that I used in the first part of the video: http://amzn.to/2lZ7pTy

For a higher-power LED: http://amzn.to/2lZ6oLk

Telemetry Viewer v0.3

I started developing a telemetry visualization tool around half a year ago but never got around to making a post on my blog. This tool makes it easy to chart data received over a UART. Line charts, Fourier transforms, histograms and dials (gauges) are currently supported. The main goal was to be able to plot large amounts of data, live, without requiring a very powerful CPU or GPU. With antialiasing enabled, I'm currently able to plot around 600,000 points, at 4k60, with a mobile Core i7 (and no discrete GPU.) With antialiasing disabled, I can more than double that.

Since there are no blog posts for v0.2 and v0.1, I'll list the changelog and demo videos for all three versions:

Telemetry Viewer v0.3 Changelog (2017-02-11)

  • Added manual ranging (the y-axis) to Time Domain Charts.
  • Added manual ranging (the power axis) to Frequency Domain Charts.
  • Added new Waveform and Waterfall views to Frequency Domain Charts. These visualize the frequency domain's history over a period of time.
  • Added manual domains (the x-axis) and autoscaled-but-fixed-center domains to Histogram Charts.
  • Added manual ranging (the y-axis) to Histogram Charts.
  • Added y-axis scale choices to Histogram Charts: relative frequency, frequency, or both.
  • Added user-specified bin counts to Histogram Charts.
  • Added manual ranging to Dial Charts.
  • Added the ability to remove statistics from Dial Charts.
  • New Quaternion Chart to visualize orientation (rotation in three dimensions.)
  • For line charts, if you are zoomed-in enough that there are relatively few points on screen, dots are now rendered at each point.
  • Automatic logging has been removed and replaced with an "Export CSV Log" button.
  • Added support for high-resolution scrolling when using certain Logitech mice, such as the M705.
  • Various small bug fixes. See the git commit log for more details.

Telemetry Viewer v0.3 Demo Video




Telemetry Viewer v0.2 Changelog (2016-11-24)

  • Ported / rewrote all charts for OpenGL. Massive speed improvements. No longer using JFreeChart.
  • Added automatic logging to "log.csv"
  • Added timeshifting: use your scroll wheel to rewind and fast-forward through time.
  • Added zomming: use your scroll wheel while holding down Ctrl to zoon in and out.
  • Added display scaling: use your scroll wheel while holding down Shift to make fonts/lines/etc bigger or smaller.
  • Added ability to remove specific charts by clicking on an "X" at the top-right corner of a chart.
  • Added a "Help" button with a brief user guide.
  • Various small bug fixes. See the git commit log for more details.

Telemetry Viewer v0.2 Demo Video




Telemetry Viewer v0.1 Changelog (2016-09-27)

  • Initial release.
  • Five chart types: Time Domain, Time Domain Cached, Frequency Domain, Histogram, and Statistics.
  • The Time Domain, Frequency Domain and Histogram charts used the JFreeChart library, the others were written by me.
  • Very basic functionality.

Telemetry Viewer v0.1 Demo Video



Download

Executables (.jar) and source code (.zip) can be downloaded at http://www.farrellf.com/TelemetryViewer/ or the project can be viewed at https://github.com/farrellf/TelemetryViewer

< Prev  2  Next >