Подключить к компьютеру датчики arduino

Как Arduino подключить к компьютеру и вывести график температуры.

Для реализации своих задумок, мне нужно с компьютера управлять Arduino. Поэтому стал изучать программы, которые помогут реализовать обмен данных между ПК и Arduino. Сперва начал с самой распространённой программы для данных целей Processing. Сделал программу, которая позволяет управлять реле. Но когда я приступил к реализации более сложных проектов, столкнулся с проблемой возможности реализации на Processing задуманных функций. Поэтому я стал думать какой язык и IDE будем оптимальным для быстрого освоения и реализации связи Arduino с компьютером. После некоторого времени поисков и тестирования остановился на Visual Studio и языке программирования C#. Первый проект, который я реализовала это подключение Arduino к компьютеру и передача данных с датчика температуры DS18B20.

Visual Studio приложение Windows Forms для получения данных от Arduino.

Первое приложение Visual Studio буду делать Windows Forms C#. Для этого нужно создать новый проект и выбрать язык программирования C#. И соответственно Windows Forms.

Затем с помощью визуального редактора создать интерфейс приложения для получения данных с Arduino. Останавливаться на данном моменте не буду, так как в интернете очень много уроков и достаточно хорошая документация на русском языке, которую можно почитать на официальном сайте или тут.

Также вы можете скачать исходные материалы проекта и приложение в формате .exe внизу статьи в разделе «Файлы для скачивания».

Описание приложения построения графиков по данным с датчика температуры.

Для получения данных с датчика температуры достаточно запустить приложения, для этого откроем файл «Monitor temperature.exe».

При загрузке мы сразу получаем список всех доступных com-портов.

За это отвечает вот этот кусок кода.

Если вы подключили Arduino поле запуска программы и не видите нужный порт для подключения, список портов можно обновить с помощью кнопки «Обновить список портов».

После выбора нужного порта нажимаем кнопку «Подключиться». При подключении увидим, как мигнут светодиоды на плате Arduino. Это означает, что подключение прошло успешно.

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

Для работы с монитором порта добавим невидимый компонент в проект и назовем его «mySerialPort».

Для получения данных от Arduino добавим функцию «mySerialPort_DataReceived».

В данной функции реализуем считывание полученных данных из порта и выведем температуру в текстовое поле.

А также вывод значений полученных с датчика на график.

Чтобы график был читабельным при получении данных длительное время, сделаем ограничение выводимых значений на график. Для этого создадим еще один выводящий список «comboBox» и пропишем необходимые значения для выбора.

В коде ограничим диапазон в зависимости от выбора «Диапазона времени».

Также сделал вывод текущего времени и даты.

Но это просто как дополнительный параметр, который можно и не выводить в данном проекте.

Кроме этого настроим приложение. Отключил кнопку развернуть на весь экран, и ограничим минимальный и максимальный размер окна. Сейчас окно открывается одного размера, и изменить его нельзя.

Пример изменения диапазона времени на графике.

Давайте подробнее рассмотрим, что такое диапазон времени и как его менять в приложении.

На график значение температуры выводиться по умолчанию 30 секунд. Данное значение мы можем изменить на 60, 90 120 сек. Данные диапазоны задаются в программе и их можно изменить и дополнить.

Изменяя данное значение, например, на 120 сек. На графике будем видеть изменение температуры, уже не 30 сек, а минимум 120 сек. Почему минимум? Это связанно с тем, что сдвиг графика происходит при достижении числа кратного значению 10. И диапазон выводимых значений будет на 9 секунд больше до момента сдвига.

Скетч для Arduino отправки значений температуры в монитор порта.

Измерять температуру будем датчиком DS18B20 выполненного в виде модуля KY-001. По работе с данным модулем у меня есть отдельный урок. Скетч возьмем из урока и немного подправим для нашего проекта.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

В связи с тем, что будим использовать модуль KY-001 (DS18B20) подключение к Arduino будет достаточно простым и понадобиться всего 3 соединительных провода.

Подведем итог.

Как видим сделать в Visual Studio приложение Windows Forms достаточно просто. А при сочетании с C# возможности взаимодействия Arduino с компьютером становятся достаточно большими. Можно реализовать не только получение данных с Arduino, но и реализовать управление, получая данные с ПК, Интернета и т.д.

Если вам интересны уроки по данной теме, пишите в комментарии. При заинтересованности сделаю блок уроков Visual Studio Arduino.

Понравился проект Пульт для презентаций своими руками на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Источник

Подключение аналоговых датчиков к Ардуино, считывание показаний датчиков

Для измерения величин, условий окружающей среды, реакции на изменение состояний и положений применяются датчики. На их выходе могут присутствовать как цифровые сигналы, состоящие из единиц и нулей, так и аналоговые, состоящие из бесконечного множества напряжений в определенном промежутке.

О датчиках

Соответственно датчики делят на две группы:

Для считывания цифровых значений могут использоваться как цифровые, так и аналоговые входы микроконтроллера, в нашем случае авр на плате Arduino. Аналоговые же датчики должны подключаться через аналогово-цифровой преобразователь (АЦП). ATMEGA328, именно он установлен в большинстве плат АРДУИНО (подробнее об этом на сайте есть статья), содержит в своей схеме встроенный АЦП. На выбор доступно целых 6 аналоговых входов.

Если вам этого не хватает, вы можете с помощью дополнительного внешнего АЦП подключить к цифровым входам, но это усложнит код и увеличит его объём, из-за добавления алгоритмов обработки и управление АЦП. Тема аналогово-цифровых преобразователей достаточно широка что можно сделать о них отдельную статью или цикл. Проще использовать плату с их большим количеством или мультиплексоры. Давайте рассмотрим, как подключить аналоговые датчики к Arduino.

Общая схема аналоговых датчиков и их подключения

Датчиком может быть даже обычный потенциометр. По сути – это резистивный датчик положения, на таком принципе реализуют контроль уровня жидкостей, угла наклона, открытия чего-либо. Его можно подключить к ардуино двумя способами.

Схема выше позволит считывать значения от 0 до 1023, благодаря тому, что всё напряжение падает на потенциометре. Здесь работает принцип делителя напряжения, в любом положении движка напряжение распределяется по поверхности резистивного слоя линейно или в логарифмическом масштабе (зависит от потенциометра) на вход попадает та часть напряжения, которая осталась между выводом ползунка (скользящего контакта) и землёй (gnd). На макетной плате такое соединение выглядит так:

Второй вариант подключен по схеме классического резистивного делителя, здесь напряжение в точке максимального сопротивления потенциометра зависит от сопротивления верхнего резистора (на рисунке R2).

Вообще резистивный делитель очень важен не только в области работы с микроконтроллерами, но и в электронике в целом. Ниже вы видите общую схему, а также расчётные соотношения для определения значения напряжения на нижнем плече.

Такое подключение характерно не только для потенциометра, а для всех аналоговых датчиков, ведь большинство из них работают по принципу изменения сопротивления (проводимости) под действием внешних источников – температуры, света, излучений разного рода и пр.

Ниже приведена простейшая схема подключения терморезистора, в принципе, на его базе можно сделать термометр. Но точность его показаний будет зависеть от точности таблицы перевода сопротивления в температуру, стабильности источника питания и коэффициентов изменения сопротивлений (в т.ч. резистора верхнего плеча) под действием той же температуры. Это можно минимизировать путем подбора оптимальных сопротивлений, их мощности и рабочих токов.

Таким же образом можно подключить фотодиоды, фототранзисторы как датчик освещенности. Фотоэлектроника нашла применения в датчиках определяющих расстояние и наличие предмета, один из таких мы рассмотрим позже.

Рисунок показывает подключение фоторезистора к ардуино.

Программная часть

Прежде чем рассказать о подключении конкретных датчиков, я решил рассмотреть программные средства для их обработки. Все аналоговые сигналы считываются с таких же портов с помощью команды analogRead(). Стоит отметить, что у Arduino UNO и других моделей на 168 и 328 атмеге 10-разрядный АЦП. Это значит, что микроконтроллер видит входной сигнал в виде числа от 0 до 1023 – итого 1024 значения. Если учесть, что напряжение питания 5 вольт, то чувствительность входа:

5/1024=0.0048 В или 4.8 мВ

То есть при значении 0 на входе, напряжение равно 0, а при значении 10 на входе – 48 мВ.

В отдельных случаях для преобразования значений до нужного уровня (например для передачи в шим выход) 1024 делят на число, а в результате деления должно должен получится необходимый максимум. Более наглядно работает функция map(источник, нч, вч, внч, ввч), где:

нч – нижнее число до преобразования функцией;

внч – нижнее число после обработки функцией (на выходе);

Практическое применение для преобразования функцией входного значения для передачи в ШИМ (максимальное значение 255, для преобразования данных из ацп в выход шим 1024 делят на 4):

Вариант 1 – деление.

x = analogRead(pot) / 4;

// будет получено число от 0 до 1023

// делим его на 4, получится целое число в от 0 до 255 analogWrite(led, x);

Вариант 2 – функция MAP – открывает более широкие возможности, но об этом позже.

val = map(val, 0, 1023, 0, 255);

analogWrite(led, map(val, 0, 1023, 0, 255))

Далеко не у всех датчиков на выходе присутствует 5 Вольт, т.е. число 1024 не всегда удобно делить для получения тех же 256 для ШИМа (или любых других). Это может быть и 2 и 2.5 вольта и другие значения, когда максимумом сигнала будет, например 500.

Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств

Популярные аналоговые датчики

Общий вид датчика для ардуино и его подключение изображено ниже:

Обычно есть три выхода, может присутствовать четвертый – цифровой, но это особенности.

Расшифровка обозначения выводов аналогового датчика:

G – минус питания, общая шина, земля. Может обозначаться как GND, «-»;

V – плюс питания. Может обозначаться как Vcc, Vtg, «+»;

S – выходной сигнал, возможные обозначения – Out, SGN, Vout, sign.

Новички для освоения считывания значения датчиков выбирают проекты всевозможных термометров. Такие датчики бывают в цифровом исполнении, например DS18B20, и в аналоговом – это всевозможные микросхемы типа LM35, TMP35, TMP36 и другие. Вот пример модульного исполнения такого датчика на плате.

Погрешность датчика от 0.5 до 2 градуса. Построен на микросхеме TMP36, как и её многие аналоги его выходные значения равняются 10 мВ/°С. При 0° выходной сигнал – 0 В, а дальше прибавляется по 10 мВ на 1 градус. То есть при 25.5 градусах напряжение – 0.255 В, возможно отклонение в пределах погрешности и собственного нагрева кристалла ИМС (до 0.1°С).

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

Однако, для качественного термометра нельзя просто считать значения и вывести их на LCD индикатор или последовательный порт для связи с ПК, для стабильности выходного сигнала всей системы в целом нужно усреднять значения с датчиков, как аналоговых, так и цифровых в определенных пределах, при этом, не ухудшая их быстродействие и точность (всему есть предел). Это связано с наличием шумов, наводок, нестабильных контактов (для резистивных датчиков на основе потенциометра, см. неисправности датчика уровня воды или топлива в баке автомобиля).

Коды для работы с большинством датчиков довольно объёмны, поэтому я их приводить все не буду, их легко найти в сети по запросу «название датчик + Arduino».

Следующий датчик, который часто используют ардуинщики-роботостроители – это датчик линии. Он основан на фотоэлектронных приборах, типа фототранзисторов.

С их помощью робот, который двигается по линии (используется на автоматизированных производствах для доставки деталей) определяет наличие белой или черной полосы. В правой части рисунка видно два прибора похожих на светодиоды. Один из них это и есть светодиод, может излучать в невидимом спектре, а второй – фототранзистор.

Свет отражается от поверхности, если она темная – фототранзистор не получает отраженного потока, а если светлая получает и он открывается. Алгоритмы которые вы заложите в микроконтроллер обрабатывают сигнал и определяют правильность и направление движения и корректируют их. Подобным образом устроена и оптическая мышь, которую вы, скорее всего, держите в своей руке читая эти строки.

Дополню смежным датчиком – датчик расстояния от фирмы Sharp, тоже используется в робототехнике, а также в условиях контроля положения предметов в пространстве (с соответствующей ТХ погрешностью).

Работает на том же принципе. Библиотеки и примеры скетчей и проектов с ними в большом количестве есть на сайтах посвященных Arduino.

Пошаговое обучение программированию и созданию устройств на микроконтроллерах AVR: Программирование микроконтроллеров для начинающих

Заключение

Применение аналоговых датчиков очень просто, а с легким в освоении языком программирования Arduino вы быстро освоите простые устройства. У такого подхода есть существенные недостатки в сравнении с цифровыми аналогами. Это связано с большим разбросом параметров, от этого возникают проблемы при заменах датчика. Возможно, придется править исходный код программы.

Правда, отдельные аналоговые приборы имеют в своем составе источники опорного напряжения и токовых стабилизаторов, что сказывается положительным образом на конечном продукте и повторяемости устройств при массовом производстве. Всех проблем можно избежать, если использовать цифровые приборы.

Цифровая схемотехника как таковая уменьшает необходимость отстройки и наладки схемы после сборки. Это даёт вам возможность на одном исходном коде собрать несколько одинаковых устройств, детали которых будут выдавать одинаковые сигналы, с резистивными датчиками такое случае редко.

Источник

Adblock
detector