Контроллеры 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо

Новое

Джойстик шилд для Arduino UNO MEGA

Джойстик шилд для Arduino UNO MEGA

Шилд джойстика для контроллеров Arduino UNO и MEGAМожно использовать для самодельных игр, а так же д..

Светодиодная матрица 8х8 с управляющим контроллером MAX7219

Светодиодная матрица 8х8 с управляющим контроллером MAX7219

Готовый блок светодиодной матрицы 8х8 с поддержкой каскадного включения нескольких идентичных модуле..

Динамик 30х40 мм 3 Вт 4 Ом

Динамик 30х40 мм 3 Вт 4 Ом

Миниатюрный легкий широкополосный динамик для компактных электронных устройствМаксимальная мощность ..

Гироскоп GY-50

Гироскоп GY-50

Цифровой инерциальный трёхосевой гироскоп GY-50 на MEMS микросхеме L3G4200D.Используе..

Вентилятор 12В 60мм

Вентилятор 12В 60мм

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

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

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

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

Шилд CNC для Arduino UNO

Шилд CNC для Arduino UNO

Шилд для платы контроллера Arduino UNO  для управления CNC-станком или 3D-принтером.4 разъема п..

Гайка Т8 с креплением

Гайка Т8 с креплением

Гайка с трапецеидальной трёхзаходной резьбой и отверстиями под крепление.Применяется в 3D-принтерах ..