
Контролери 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, то його потрібно деактивувати в диспетчері пристроїв.
Таймери та FreeRTOS на ESP32
Таймери та FreeRTOS на ESP32 ESP32 працює під керуванням FreeRTOS, і окрім апаратних таймерів (hw..
Модуль гальванорозв'язки 4-канальний
Модуль захисту та гальванічної розв'язки 4-х дискретних входів контролера з гвинтовими клемниками. ..
114.76грн.
Магнітний сенсор A3144. Датчик Холла з дискретним виходом.
Магнітний сенсор A3144 (датчик Холла з дискретним виходом)Магнітний сенсор A3144 — це однополюсний д..
10.10грн.
ЦАП цифро-аналоговий перетворювач I2C
Цифро-аналоговий перетворювач з I2C інтерфейсом на основі мікросхеми MCP4725Використовуєть..
139.58грн.
Як Arduino взаємодіє із зовнішніми пристроями через бездротовий зв’язок та які модулі використовуються
Як Arduino взаємодіє із зовнішніми пристроями через бездротовий зв’язок та які модулі використов..





