Працюємо з 09:00 до 19:00 без вихідних
Київ біля ТЦ Квадрат бул.Перова

Простой осциллограф своими руками без паяльника

Осциллографы бывают дорогие или очень дорогие. Как же рядовому пользователю ардуино понаблюдать за формой быстро изменяющегося сигнала? Давайте рассмотрим простое минимально геморойное решение. Будем отображать осциллограф на мониторе компьютера.


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

Пинцет для монтажа SMD компонентов

Классный пинцет немагнитный и антистатичный - идеален для пайки миниатюрных SMD компонентовОчень удо..

42.39грн.

Модуль Ethernet ENC28J60 с питанием 3,3 В

Модуль Ethernet ENC28J60 с питанием 3,3 В

Ethernet модуль с коммуникацией SPI с питанием 3,3 В на основе микросхемы ENC28J60Применяется д..

103.11грн.

Радиомодуль NRF24L01+PA+LNA 2,4 ГГц

Радиомодуль NRF24L01+PA+LNA 2,4 ГГц

Модуль радио-приемника, -передатчика 2,4 ГГц для экономной безпроводной связи между любительскими ко..

86.36грн.

Радиатор 25х23х16мм

Радиатор 25х23х16мм

Радиатор алюминиевый для транзисторов, симисторов ... с установкой на печатную платуОкрашенный в чер..

11.17грн.

Трансформатор тока 0-30А

Трансформатор тока 0-30А

Аналоговый датчик переменного тока силой до 30А. Это раскрывающийся трансформатор тока с диаметром о..

171.80грн.