Hi there,
I was wondering if it is possible to use the time plot as an oscilloscope by adjusting the speed of the time axis. I am measuring oscillations with a fixed frequency and it would be very helpful if I could some how fix the sine waves in place in the time plot, so that I can see if the phase shift of the data from my two sensors.
Would be great if someone could at least tell me if should keep trying realising this in Megunolink or that I should just give up and buy an oscilloscope
Cheers, Tjeerd
Oscilloscope with time plot? Solved!
Hi There!
I found a way to make it work
Instead of using a time plot , I used a XY plot, as suggested by Phil in reply to another question I had. The time counter plotted on X resets every time a certain trigger is met.
The trigger I used in the following sketch detects when the value of Y crosses the running average of Y. By adding an additional counter, it is possible to set the amount of cycles that are displayed, before the time jumps back to zero.
The result looks pretty good. It is not as stable as an oscilloscope, but very usable for my application. (To test the set-up eventually I bought an USB oscilloscope )
This is the sketch that generates the result in the attached screenshot:
I found a way to make it work
Instead of using a time plot , I used a XY plot, as suggested by Phil in reply to another question I had. The time counter plotted on X resets every time a certain trigger is met.
The trigger I used in the following sketch detects when the value of Y crosses the running average of Y. By adding an additional counter, it is possible to set the amount of cycles that are displayed, before the time jumps back to zero.
The result looks pretty good. It is not as stable as an oscilloscope, but very usable for my application. (To test the set-up eventually I bought an USB oscilloscope )
This is the sketch that generates the result in the attached screenshot:
Code: Select all
const int sensorPin = A0;
unsigned long sampleTime = 0; // Relative time to display on X axis
unsigned long startTime = 0; // Start time of sine wavein millis
unsigned long currentTime = 0; // Current time of measurement in millis
byte counter = 0; // Counter for sine wave cycles
#include "MegunoLink.h"
#include "CommandHandler.h"
#include <RunningAverage.h>
XYPlot Acc1 ("Acc1");
CommandHandler<> Commands;
InterfacePanel AccPanel;
RunningAverage Yavg(100); // amount of samples used for running average
float Yprevious = 0; // previous value to check agains average for reset trigger
void setup() {
Serial.begin(115200);
Yavg.clear(); // actively clear the running average
}
void loop() {
Commands.Process();
int Yvalue = analogRead(sensorPin); // read sensor
Yavg.addValue(Yvalue); // add read value to running average calculation
int Yaverage = Yavg.getAverage(); // get running average for comparison
if ((Yvalue > Yprevious) && (Yvalue > Yaverage) && (Yaverage > Yprevious)) { // compare current value and previous value with running average (trigger in upslope at average value)
counter++;
if (counter == 2) { // counter set at 2 to display two cycles
startTime = millis(); // set start time
sampleTime = 0; // reset sample time
counter = 0; // reset counter
}
}
currentTime = millis(); // set current time
sampleTime = currentTime - startTime; // calculate sample time by subtracting the start time from the current time
Yprevious = Yvalue; // make current Y value the previous value
Acc1.SendData(F("Acc1"), sampleTime, Yvalue); // send sample time (X) and Y value (Y) to XY plot
}
- Attachments
-
- Standing sine wave in XY plot.jpg (196.64 KiB) Viewed 12317 times