Контроллеры Arduino можно использовать как простейший осциллограф, для наблюдения за быстро изменяющимися электрическими сигналами.

Скачиваем программу Processing , после чего её устанавливать не нужно - она запускается с EXE-файла.

Открываем Arduino IDE и вставляем такой код:


#define ANALOG_IN 0
void setup() {
  Serial.begin(9600); 
  //Serial.begin(115200); 
}
void loop() {
  int val = analogRead(ANALOG_IN);                                              
  Serial.write( 0xff );                                                         
  Serial.write( (val >> 8) & 0xff );                                            
  Serial.write( val & 0xff );
}

Загружаем этот код в контроллер Arduino.

Открываем программу Processing и вставляем в неё следующий код:

import processing.serial.*;
Serial port;  // Создание объекта класса Serial
int val;      // Данные, получаемые из сом-порта
int[] values;
float zoom;
void setup() 
{
  size(1280, 480);


// Открываем порт, к которому подключена плата

//контроллера используя скорость (9600 bps)
  port = new Serial(this, Serial.list()[0], 9600);
  values = new int[width];
  zoom = 1.0f;
  smooth();
}
int getY(int val) {
  return (int)(height - val / 1023.0f * (height - 1));
}
int getValue() {
  int value = -1;
  while (port.available() >= 3) {
    if (port.read() == 0xff) {
      value = (port.read() << 8) | (port.read());
    }
  }
  return value;
}
void pushValue(int value) {
  for (int i=0; i<width-1; i++)
    values[i] = values[i+1];
  values[width-1] = value;
}
void drawLines() {
  stroke(255);
  
  int displayWidth = (int) (width / zoom);
  
  int k = values.length - displayWidth;
  
  int x0 = 0;
  int y0 = getY(values[k]);
  for (int i=1; i<displayWidth; i++) {
    k++;
    int x1 = (int) (i * (width-1) / (displayWidth-1));
    int y1 = getY(values[k]);
    line(x0, y0, x1, y1);
    x0 = x1;
    y0 = y1;
  }
}
void drawGrid() {
  stroke(255, 0, 0);
  line(0, height/2, width, height/2);
}
void keyReleased() {
  switch (key) {
    case '+':
      zoom *= 2.0f;
      println(zoom);
      if ( (int) (width / zoom) <= 1 )
        zoom /= 2.0f;
      break;
    case '-':
      zoom /= 2.0f;
      if (zoom < 1.0f)
        zoom *= 2.0f;
      break;
  }
}
void draw()
{
  background(0);
  drawGrid();
  val = getValue();
  if (val != -1) {
    pushValue(val);
  }
  drawLines();
}

Нажимаем кнопку пуск этой программы и видим временной график того, что происходит у нас на аналоговом входе A0 контроллера.

Я таким образом, например наблюдал, что на выход выдает модуль измерения напряжения сети 220В, так как на него нет никакой документации в интернете. При этом я лицезрел синусоиду, но на этом графике нет привязок ко времени и величине сигнала. И по-этому трудно измерять частоту и амплитуду этого сигнала.

Нужно так же отметить, что COM-порт должен быть в системе только один. Если на компьютере есть физический порт COM1, то его нужно деактивировать в диспетчере устройств.

Так же можно увеличивать частоту дискретизации нашего осциллографа, увеличивая скорость СОМ-порта в контроллере и в программе Processing.

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо

Новое

Радиатор алюминиевый 40х40х20 мм

Радиатор алюминиевый 40х40х20 мм

Радиатор алюминиевый без наклейки.Используется для охлаждения греющихся элементов электронной констр..

ЦАП цифро-аналоговый преобразователь I2C

ЦАП цифро-аналоговый преобразователь I2C

Цифро-аналоговый преобразователь с I2C интерфейсомИспользуется для организации аналогового выхо..

USB амперметр вольтметр тестер

USB амперметр вольтметр тестер

Этот тестер показывает напряжение и ток потребления устройства, подключенного к USB-порту компьютера..

Аналого-цифровой преобразователь I2C четырехканальный

Аналого-цифровой преобразователь I2C четырехканальный

Модуль аналого-цифрового преобразователя для подключения аналоговых датчиков и других источников сиг..

CNC шилд для Arduino NANO

CNC шилд для Arduino NANO

Шилд для Arduino NANO для управления 3D-принтером или CNC-станком.На шилде предусмотрены три пл..

Вентилятор 5В 40мм

Вентилятор 5В 40мм

Вентилятор системы охлаждения греющихся элементов электронной конструкции.Используется для обдува ра..

Вольтметр аналоговый 0 ... 20В 0,25

Вольтметр аналоговый 0 ... 20В 0,25

Аналоговый стрелочный вольтметр с классом точности 0,25Диапазон измеряемого напряжения 0 ... 20 ВПре..

Вольтметр аналоговый 0 ... 5В 0,25

Вольтметр аналоговый 0 ... 5В 0,25

Аналоговый стрелочный вольтметр с классом точности 0,25Диапазон измеряемого напряжения 0 ... 5 ВПред..