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

Модуль реле 12В одноканальний

Одноканальний модуль реле з напругою живлення котушки 12 ВРеле спрацьоване при нульовому сигналі..

32.16грн.

Кінцевий вимикач вологозахищений 5А

Кінцевий вимикач вологозахищений 5А

Надійний пило та бризько-захищений кінцевик з роліком та регульованою довжиною плеча.Застосовується ..

111.97грн.

Увімкнення тиристорів змінним струмом. Фазове управління

Увімкнення тиристорів змінним струмом. Фазове управління

Особенности работы с тирист-ми на переменном токеУправление тиристорами в цепях переменного тока име..

Корпус для Arduino MEGA

Корпус для Arduino MEGA

Акриловий прозорий корпус для плати контролера Arduino Mega 2560 R3В комлекті крепіж та схема з..

98.62грн.

Датчик вологості та температури високої точності Si7021

Датчик вологості та температури високої точності Si7021

Цифровий сенсор температури та відносної вологості високої точності Датчик Si7021 I2C вологості..

89.32грн.