Працюємо з 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Корпус під міні-комп'ютер Orange PI PC

Корпус під міні-комп'ютер Orange PI PC

Корпус прозорийМатеріал - акрил..

145.62грн.

Адаптер для радіо модуля NRF24L01

Адаптер для радіо модуля NRF24L01

Модуль, що полегшує підключення радіо приймача-передавача NRF24L01 до любительських к..

15.38грн.

Модуль стабілізатора напруги 3,3 В

Модуль стабілізатора напруги 3,3 В

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

13.37грн.

Резистори 0,250 Вт

Резистори 0,250 Вт

Мініатюрні резистори різних номіналів з точністю +-1%. Товщина виводів добре підходить під стандартн..

0.57грн.

Фольгований текстоліт односторонній 70х100мм

Фольгований текстоліт односторонній 70х100мм

Односторонній фольгований міддю текстоліт для виготовлення друкованих платТолщина 1,5 ммРозміри 70 х..

27.94грн.