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

Новое

Логический анализатор 8 каналов

Логический анализатор 8 каналов

Цифровой логический анализатор на 8 каналовПодключается к USB-порту компьютера и работает с родной п..

Линейный подшипник 8мм

Линейный подшипник 8мм

Подшипник для линейного скольжения рабочего органа 3D-принтера или CNC по своим осям.Одевается на ци..

Подшипник для зубчатого ремня GT2 без зубьев

Подшипник для зубчатого ремня GT2 без зубьев

Подшипник для натяжения зубчатого ремня GT2 6мм на ось 5 ммПрименяется в 3D-принтерах и CNCШирина 10..

Подшипник для зубчатого ремня GT2 20 зубьев

Подшипник для зубчатого ремня GT2 20 зубьев

Подшипник для натяжения зубчатого ремня GT2 6мм на ось 5 мм20 зубьевШирина 10 мм..

HTTP запрос через GSM GPRS модуль NEOWAY M590

HTTP запрос через GSM GPRS модуль NEOWAY M590

Постановка задачи. В этом проекте посмотрим на практический пример отправки http get запроса при по..

GSM GPRS модуль A6

GSM GPRS модуль A6

Один из самых продвинутых модулей GSM для использования в любительских проектахК контроллеру подключ..

Модуль твердотельного реле 1-канальный

Модуль твердотельного реле 1-канальный

Модуль предназначен для коммутации нагрузки с переменным напряжением питания 75 ... 264 ВМаксимальны..

Модуль твердотельного реле 2-канальный

Модуль твердотельного реле 2-канальный

Модуль предназначен для коммутации двух нагрузок с переменным напряжением питания 75 ... 264 ВМаксим..

Светодиод ультраяркий 5мм

Светодиод ультраяркий 5мм

Сверхяркий светодиод диаметром 5 ммКорпус прозрачный у светодиодов разного цвета свечения. То есть р..

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

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

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

Кусачки PLATO 170

Кусачки PLATO 170

Долгоиграющие кусачки с удобными мощными ручкамиПрименяются при монтаже любительских электронных про..

Направляющая с линейным подшипником 8 мм ширина 30 мм

Направляющая с линейным подшипником 8 мм ширина 30 мм

Направляющая в составе 3D-принтера или CNC для крепления подвижного рабочего органа к направляющим ц..

Модуль часов реального времени DS1302 + батарейка

Модуль часов реального времени DS1302 + батарейка

Модуль часов для любительских контроллеров на основе специализированной микросхемы DS1302Напряж..

Датчик влажности и температуры DHT21

Датчик влажности и температуры DHT21

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

Твердотельное реле 240В 2А

Твердотельное реле 240В 2А

Реле без механических переключающихся контактов на основе симистораТакие реле из-за их быстродействи..

Кулиса с подшипником 3х10х4 мм

Кулиса с подшипником 3х10х4 мм

Подшипник с ограничительным кольцом применяется в качестве колеса для движущихся рабочих органов 3D-..