Простой осциллограф своими руками без паяльника
Осциллографы бывают дорогие или очень дорогие. Как же рядовому пользователю ардуино понаблюдать за формой быстро изменяющегося сигнала? Давайте рассмотрим простое минимально геморойное решение. Будем отображать осциллограф на мониторе компьютера.

Контроллеры 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, то его нужно деактивировать в диспетчере устройств.
Муфта на шаговый двигатель 8x8x25мм
Данная муфта служит переходником между валами 8 мм и 8 мм. Тоесть имеет с обеих сторон отверстие диа..
61.62грн.
Arduino 3 пина на 6 светодиодов чарлиплексинг
ЧарлиплексингПредлагаю вашему вниманию полезное рабочее решение, как при помощи трех пинов контролле..
Ниодимовый магнит 10mm x 2mm N50
Цилиндрический ниодимовый магнит N50Размеры 10мм x 2ммИдеально подходит для работы в связке с магнит..
12.09грн.
PT100 2м платиновый датчик температуры
PT100 – платиновый датчик температуры (кабель 2 м)Платиновый датчик температуры PT100 — это высокото..
270.72грн.
NRF24L01+PA+LNA модуль 2,4 ГГц SMD с разъёмом IPEX, 18×14 мм
NRF24L01+PA+LNA модуль 2,4 ГГц (SMD) с разъёмом IPEX (u.FL), 18×14 мм ..
109.98грн.





