цифровая электроника
вычислительная техника
встраиваемые системы

 

Простой осциллограф на Arduino своими руками

Автор: Mike(admin) от 21-08-2016, 12:04

Хотите самостоятельно сделать дешевый осциллограф, который удовлетворял основные потребности в плане измерения электрических величин? Это возможно благодаря плате Arduino. На основе Arduino можно собрать простой осциллограф для ПК, который по себестоимости будет менее $5.


Простой осциллограф на Arduino своими руками

Характеристики и особенности самодельного осциллографа на Arduino:


  • 50000 выборок в секунду (можно довести до 110000, но тогда сигнал будет очень зашумленным)
  • Автотриггер
  • Счетчик частоты
  • Достаточно точные показания напряжения (в зависимости от точности резисторов, используемых для делителей напряжения)
  • Дополнительно можно выбрать диапазон напряжения: 5В, 6.6В, 10В, 20В

Компоненты для осциллографа:


  • Arduino Leonardo или Arduino Micro
  • Два зажима типа крокодил
  • Конденсатор 0.1 мкФ (опционально)
  • Стабилитрон 5.1В (опционально)
  • ПК с установленным компилятором языка Processing

Также дополнительно для делителей напряжения (если вы хотите измерять напряжение выше 5 В) потребуется:


  • Два двухполюсных переключателя
  • Два резистора 3 КОм
  • Два резистора 1.5 КОм
  • Один резистор 1 КОм
  • Небольшая макетная плата

Простой осциллограф на Arduino своими руками

Если вам нужно измерять только напряжение до 5 В, то можете не подключать делители напряжения, а контакты щупов подключить непосредственно на землю и на аналоговый порт A1 на плате Arduino. Тогда вам придется немного изменить код. В коде для Arduino поменяйте:



ADMUX =  B00000000;         // выбор внешнего опорного напряжения и порта 5 (A0)

на



ADMUX =  B01000000;         // выбор внутреннего опорного напряжения (Vcc - 5V) и порта 5 (A0)

В коде для processing поменяйте:



 boolean switch1=((buffer[writeIndex*2]&(byte)8)==8);                                                 
 boolean switch2=((buffer[writeIndex*2]&(byte)4)==4);
 if (!switch1&&!switch2) voltageRange=20;
 if (!switch1&&switch2) voltageRange=10;
 if (switch1&&!switch2) voltageRange=6.64;
 if (switch1&&switch2) voltageRange=5;

на



voltageRange=5;

Скетч для Arduino и код на processing:


scope.ino
scopeP2.pde
scopeP3.pde


Схема осциллографа на Arduino с делителями напряжения:


Простой осциллограф на Arduino своими руками

В левой стороне схемы расположен делитель напряжения с коэффициентом 1:4. То есть к нему можно подключать напряжение да 20 В.


Справа расположен делитель напряжения, переключающийся между линиями 5 В и опорного напряжения (Aref). Вы можете использовать переключатели для установки диапазона измерения: 5В, 6.64В, 10В или 20В. Второй контакт каждого переключателя соединяется с цифровым входом Arduino (D3 и D4). Это работает следующим образом. Если программа настроена на работу с опорным напряжением, АЦП сравнивает напряжение аналоговых входов с Aref вместо 5В. Например, мы измеряем 5 В, тогда напряжение на A1 будет 5В/4=1.25 В. Если оба переключателя разомкнуты, то напряжение на Aref будет 5В, АЦП прочитает 1.25/5=25%. Если первый переключатель разомкнут, а второй замкнут, напряжение на Aref будет 2.5В, АЦП прочитает 1.25/2.5=50%. Если первый переключатель замкнут, а второй разомкнут, напряжение на Aref будет 1.66В, АЦП прочитает 1.25/1.66=75%. Если оба переключателя замкнуты, напряжение на Aref будет 1.25В, АЦП прочитает 1.25/1.25=100%.


Дополнительными элементами в схеме являются конденсатор между линией щупа и землей и Стабилитрон 5.1V. Конденсатор позволяет уменьшить шумы измеряемых сигналов, а стабилитрон защищает Arduino от перенапряжения.


Помните:


Если аналоговое опорное напряжение выбрано внутреннее (по умолчанию), и вы подводите напряжение питания к AREF, то это может вывести из строя Arduino.


Аналоговые входы не могут работать с отрицательным напряжением.


Не превышайте напряжения 5 В непосредственно на выводах Arduino.




© digitrode.ru


<Via>


Теги: Arduino, осциллограф



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Добрый день, почему для данного проекта используется конкретно Arduino Leonardo или Micro. Возможно ли их заменить хотя бы на Uno или Nano?
Цитата
  • Группа: Администраторы
  • ICQ:
  • Регистрация: 28.08.2013
  • Статус: Пользователь Онлайн
  • Комментариев: 15
  • Публикаций: 1686
^
Цитата: Александр
Добрый день, почему для данного проекта используется конкретно Arduino Leonardo или Micro. Возможно ли их заменить хотя бы на Uno или Nano?

Да, можно использовать платы Arduino других типов, только следите, чтобы выводы соответствовали своему назначению.
Цитата
  • Макс

  • 23 января 2018 22:40
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
А как выглядит схема без делителей напряжения?
Цитата
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
немогу понятть про подключение переключателей не могли бы вы дать схему самих переключателей и какие SW с каким SW парны
Цитата
  • Роброй

  • 9 марта 2018 21:01
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Переключатели sw1 и sw2. Два переключателя с двумя группами контактов, на схеме крест-накрест
Цитата
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
почему при проверке скетча выдает ошибку? Arduino: 1.8.5 (Windows 8.1), Плата:"Arduino Leonardo"

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\F83CAKKIKFRUNNW (1).ino: In function 'void setup()':

F83CAKKIKFRUNNW (1):10: error: redefinition of 'void setup()'

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\sketch_jun16b.ino:1:
6: note: 'void setup()' previously defined here

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\F83CAKKIKFRUNNW (1).ino: In function 'void loop()':

F83CAKKIKFRUNNW (1):23: error: redefinition of 'void loop()'

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\sketch_jun16b.ino:6:
6: note: 'void loop()' previously defined here

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde: At global scope:

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde:1:1: error: 'import' does not name a type

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde:2:1: error: 'import' does not name a type

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde:5:20: warning: overflow in implicit constant conversion [-Woverflow]

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde:6:16: warning: overflow in implicit constant conversion [-Woverflow]

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde:14:1: error: 'Serial' does not name a type

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde:15:5: error: expected unqualified-id before '[' token

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde: In function 'void settings()':

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde:24:17: error: 'size' was not declared in this scope

C:\Users\Сергей\Documents\Arduino\sketch_jun16b\FKY4FRJIKMXGCSA (1).pde: In function 'void setup()':



exit status 1
redefinition of 'void setup()'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"