Arduino, LabView и датчик температуры
В статье рассмотрены основы передачи данных Arduino на персональный компьютер и в обратном направлении с использованием LabView.
Вы научитесь отсылать строки и получать данные, которые передаются через USB порт.
Вам помогут навыки программирования на Arduino и создания блок-диаграм виртуальных инструментов (ВИ) в LabView, но даже если вы ни разу не работали в LabView или Arduino IDE, интсрукция достаточно подробная и ее должно хватить.
Для проекта вам понадобятся
- Микроконтроллер Arduino UNO;
- LM35 (Или другой сенсор);
- Программа LabVIEW С установленным NI-VISA Driver;
Если вы захотите более детально ознакомиться с принципом действия сенсора LM35, рекомендую почитать его даташит.
Что такое LabVIEW?
LabVIEW (Laboratory Virtual Instrument Engineering Workbench) - это визуальный язык программирования, разработанный компанией National Instruments. Наибольшее применение LabView нашел в сферах получение данных с измерительных приборов (основная идея примера в этой статье), управления, промышленной автоматизации.
Что такое Arduino?
Arduino - это open-source платформа, которая обеспечивает разработку интерактивных проектов. В этих проектах берутся данные с различных датчиков или элементов управления (джойстики, кнопки и т.п.) и передаются дальше для управления светодиодами, моторами и т.д.
Проекты на Arduino могут быть автономными и могут передавать-получать данные с программного обеспечения на вашем персональном компьютере (для этого часто используют технологии Flash, Processing, MaxMSP). Плату Arduino можно собрать самостоятельно, а можно купить уже собранную, в том числе и у неоригинального (итальянского) производителя. Оболочка для программирования Arduino IDE доступна для скачивания совершенно бесплатно с оффициального сайта Arduino.
LabVIEW: создаем программу (виртуальный инструмент)

1. Создайте новый VI (ВИ), перейдя на вкладку File > New VI.
2. Перейдите в окно block diagram (блок-диаграмма). Выберите ВП в Data Communication > Protocols > Serial.
3. Настройте:
- VISA Configure Serial Port: установите серийный порт.
- VISA Write (2x): запись данных на подключенное устройство.
- VISA Read: считывание данных с серийного порта подключенного устройства.
- VISA Close: закрытие подключения.
- Bytes at Serial Port: проверка того, доступны ли какие-то данные.
LabVIEW: Structures (структуры) и основы создания программы
Настало время создать основу нашего ВИ в LabView.
1. Создайте цикл условия while loop Programming > Structures > While Loop.

2. Создайте три структуры Case structure внутри цикла while loop. Цикл Case находится в Programming > Structures > Case Structure.

3. Первые две структуры Case используются для записи строки, а последняя - для чтения.

4. Иконки с операторами VISA Configure Serial Port и VISA Close выносятся за пределы структуры while loop.

Вы можете разместить VISA Configure Serial Port внутри структуры while loop. В примере, который рассматривается нами вам надо будет выбрать COM порт перед запуском виртуального инструмента (ВИ). Если же вы разместите VISA Configure... внутри структуры, вы сможете выбрать COM порт в любое время.
5. Visa Bytes at Port располагается внутри структуры while Loop. Для ого, чтобы активировать условие для считывания информации, надо проверить, есть ли она вообще на серийном порту. Для этого мы проверяем количество байтов на серийном порту и сравниваем его с 0. Для этого используется Programming > Comparison > Grater than 0 VI.

6. Если количество байт на порту больше 0, активируется структура “True Case Structure” и VISA Read вернет считанные байты.
7. VISA Configure Serial Port дает пользователю возможность выбрать какой именно серийный порт будет использоваться и устанавливает скорость обмена данными. То есть “Visa resource name” и “Baud Rate” должны быть элементами управления. По умолчанию скорость обмена данными равна 9600.
8. Используйте блок VISA Write > Write Buffer. Эта строка будет передана на USB порт. В этой статье в дальнейшем будут использоваться условные обозначения ВКЛ для Включить и ВЫКЛ для Выключить.
Если вы хотите передавать команды с клавиатуры, вы можете использовать VISA Write для создания элемента управления строками. В этом примере использовались кнопки.
9. Перейдите в окно Front Panel (Интерфейс пользователя) и создайте необходимые элементы интерфейса.
10. Для того, чтобы отобразить полученные данные (температура), можно использовать Numerics > Thermometer и параллельно Graph Indicators > Chart.

11. Добавьте кнопки (Buttons > OK Button), для того, чтобы вкл/выкл датчик. Измените Mechanical Action на Switch Until Released и добавьте числовые индикаторы (Num Inds > Num Indicator), чтобы отслеживать температуру.
Вы также можете добавить элементы управления вроде “USB Control” и “LM35”;

12. Вернитесь в окно блок-диаграмы, чтобы настроить кнопки (Buttons), графики (Graph), термометр (Thermometer) и числовые индикаторы (Num inds).
Для отображения данных, полученных с USB порта, их надо преобразовать из строки в число:
- Programming > String > String/Number Convertions > Fract/Exp String to Number: конвертирует строку в число. Этот ВИ надо добавить внуть структуры read case structure, чтобы убедиться, что все полученные данные будут конвертированы.
- Вход String данного ВИ подключен к read buffer подпрограммы VISA Read.

13. Теперь подключите Gaph, Thermometer и Num ind к выходу Number, который находится в Fract/Exp String to Number.

14. Подключите кнопку turn on (вкл) к первому условию case structure, а кнопку turn off (выкл) - ко всторому условию. Кнопку stop подключите к условию While Loop.

15. Так как процесс проходит достаточно быстро, добавьте небольшую задержку (delay) в пределах цикла while loop: Programming > Timing > Wait (ms). Выставьте задержку равной 600 мс, чтобы убедиться, что все данные были получены. При этом Arduino будет обновлять данные каждые 500 мс (смотрите скетч Arduino).
VISA Configure Serial Port находится внутри структуры while loop на рисунке выше.
LabVIEW: дополнительные фичи
- Вы можете проверить, доступен ли USB порт или проверить наличие ошибок на нем. Этот (Programming > Dialog and User Interface > Find First Error) ВИ возвращает “true”, если есть ошибка. Если ошибки нет или она устранена, COM порт будет доступен.
- Можете создать так называемый "error handler" (Programming > Dialog and User Interface > Simple Error Handler). С его помощью вы сможете не только обнаружить ошибку, но и узнать, где она, получить ее описание.
- Кроме того, вы можете перезапустить ВИ в любой момент его работы. Просто используйте VI Server Reference (Programming > Application Control> VI Server Reference) и Invoke Node (Programming > Application Control> Invoke Node).


Программа для Arduino
1. Инициализируем все переменные и пины, которые вы будете использовать. В данном случае:
- 1 светодиод (Светодиод на Arduino);
- 1 сенсор LM35.
char command;
String string;
#define led 13
#define lm A1
2. Void Setup.
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
3. Void Loop.
void loop()
{
if (Serial.available() > 0)
{string = "";}
while(Serial.available() > 0)
{
command = ((byte)Serial.read());
if(command == ':')
{
break;
}
else
{
string += command;
}
delay(1);
}
if(string == "TO")
{
TempOn();
}
if(string =="TF")
{
TempOff();
}
}
4. В коде для Arduino используются две функции: TempOn(); и TempOff();. Они управляют сенсором.
4.1: TempOn() - функция, которая запускает измерения:
Вы спокойно можете использовать другой сенсор или просто вкл/выкл светодиоды. Для это достаточно немного изменить функции;
void TempOn()
{
int x = analogRead(lm);
float temp = (5.0*x*100.0)/1024.0;
Serial.println(temp);
digitalWrite(led, HIGH);
delay(500);
}
4.2: TempOff() - функция, которая прерывает измерения:
void TempOff()
{
digitalWrite(led, LOW);
delay(500);
}
Необходимые пояснения к программе для Arduino
Цикл void loop - самая важная часть программы. Внутри этого цикла проверяется наличие подключенных устройств на серийном порту. Именно поэтому используется Serial.available(); Эта функция проверяет байты на порту.
Если на порту есть информация, формируется строка этих байтов, после чего в работу вступает Serial.read(); и благодаря строке
string =+ string + command;
полностью отрабатывает необходимый алгоритм.
Загрузки
Ниже приведены скетч для Arduino и ВИ для LabView, которые были детально рассмотрены в статье. Скачивайте и экспериментируйте!
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!