Контролери 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 основи програмування

Arduino основи програмування

Arduino основи програмуванняТут ми навчимося писати елементарну програму, здатну зробити що-небудь ц..

Шестерня для зубчатого ременю на 40 зубців під вісь 8 мм

Шестерня для зубчатого ременю на 40 зубців під вісь 8 мм

Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 8 ммКількість зубц..

61.15грн.

Гвинтовий конектор на три дроти

Гвинтовий конектор на три дроти

Монтується на друковану плату або макетну платуВідстань між виводами 5 мм..

4.22грн.

Набір перетинок (папа-папа) 40шт 10см

Набір перетинок (папа-папа) 40шт 10см

Набір з'єднувальних дротів для поєднання плат контролера з периферією без пайки. Підходять під станд..

28.25грн.

Модуль WAV-плеєра

Модуль WAV-плеєра

Читає аудіо-файли формату WAV ADCPM 4біт (AD4)Напруга логічних рівнів 3,3 ВУправління від контр..

87.89грн.

Нове

Мідний чулок для видалення припою 2мм 1,5м

Мідний чулок для видалення припою 2мм 1,5м

Мідна оплітка - застосовується для залужування доріжок друкованої плати, а також для видалення надли..

Модуль твердотільного реле 4-канальний

Модуль твердотільного реле 4-канальний

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

Оптопара EL817 SMD

Оптопара EL817 SMD

Оптопара з транзистором на виходіЗастосовується для гальванічної розв'язки дискретного сигналу, а та..

Стабілізатор напруги 5В 2А мікросхема L78S05CV

Стабілізатор напруги 5В 2А мікросхема L78S05CV

Мікросхема стабілізатор напруги L78S05CVЗастосовується для стабілізації пульсуючої напруги в блоках ..

Програматор AVR-контролерів USBASP

Програматор AVR-контролерів USBASP

Програматор для завантаження та відлагодження програм в мікроконтролери компанії ATMEL.Інтерфейс про..

Зсувний регістр 74HC595N

Зсувний регістр 74HC595N

Цю мікросхему використовують для керування світлодіодними гірляндами та символьними індикаторами.Вон..

Світлодіод ультраяскравий 3мм

Світлодіод ультраяскравий 3мм

Над-яскравий світлодіод діаметром 3 ммКорпус прозорий в світлодіодів різного кольору світіння. Тобто..

Вентилятор для Orange PI товщиною 10мм

Вентилятор для Orange PI товщиною 10мм

Вентилятор для охолодження процесора міні-комп'ютера Orange PI або Raspberry PIПрацює дуже тихоЖивле..

Термінальний роз'ємний конектор кутовий 4д

Термінальний роз'ємний конектор кутовий 4д

Роз'ємний 4-дротовий конектор для пайки на друковану платуДроти підводяться паралельно платі та з'єд..

Шестерня для зубчатого ременю на 20 зубців під вісь 5 мм

Шестерня для зубчатого ременю на 20 зубців під вісь 5 мм

Використовується для передачі та редукції обертаючого моменту від двигунаКількість зубців 20 шт.Діам..

Термінальний роз'ємний конектор кутовий 3д

Термінальний роз'ємний конектор кутовий 3д

Роз'ємний трьохдротовий конектор для пайки на друковану платуДроти підводяться паралельно платі та з..

Термінальний роз'ємний конектор кутовий 2д3.81mm

Термінальний роз'ємний конектор кутовий 2д3.81mm

Роз'ємний двохдротовий конектор для пайки на друковану платуДроти підводяться паралельно платі та з'..

Мікроконтролер ATTINY13A

Мікроконтролер ATTINY13A

Мініатюрний економічний AVR 8-бітний мікроконтролер, який можна програмувати як програматором, так і..

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

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

Надписи на корпусі можуть відрізнятись від наведених на картинці, але сутність приладу незмінна.Цифр..

Лінійний підшипник 8мм

Лінійний підшипник 8мм

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

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

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

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