Содержание статьи
Содержание

Главная / Проекты с Arduino / Arduino, LabView и датчик температуры

Arduino, LabView и датчик температуры

В статье рассмотрены основы передачи данных Arduino на персональный компьютер и в обратном направлении с использованием LabView.

Вы научитесь отсылать строки и получать данные, которые передаются через USB порт.

Вам помогут навыки программирования на Arduino и создания блок-диаграм виртуальных инструментов (ВИ) в LabView, но даже если вы ни разу не работали в LabView или Arduino IDE, интсрукция достаточно подробная и ее должно хватить.

Для проекта вам понадобятся

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

Что такое LabVIEW?

LabVIEW (Laboratory Virtual Instrument Engineering Workbench) - это визуальный язык программирования, разработанный компанией National Instruments. Наибольшее применение LabView нашел в сферах получение данных с измерительных приборов (основная идея примера в этой статье), управления, промышленной автоматизации.

Что такое Arduino?

Arduino - это open-source платформа, которая обеспечивает разработку интерактивных проектов. В этих проектах берутся данные с различных датчиков или элементов управления (джойстики, кнопки и т.п.) и передаются дальше для управления светодиодами, моторами и т.д.

Проекты на Arduino могут быть автономными и могут передавать-получать данные с программного обеспечения на вашем персональном компьютере (для этого часто используют технологии Flash, Processing, MaxMSP). Плату Arduino можно собрать самостоятельно, а можно купить уже собранную, в том числе и у неоригинального (итальянского) производителя. Оболочка для программирования Arduino IDE доступна для скачивания совершенно бесплатно с оффициального сайта Arduino.

LabVIEW: создаем программу (виртуальный инструмент)

LabVIEW: создаем программу

1. Создайте новый VI (ВИ), перейдя на вкладку File > New VI.

2. Перейдите в окно block diagram (блок-диаграмма). Выберите ВП в Data Communication > Protocols > Serial.

3. Настройте:

LabVIEW: Structures (структуры) и основы создания программы

Настало время создать основу нашего ВИ в LabView.

1. Создайте цикл условия while loop Programming > Structures > While Loop.

LabView While loop

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

LabView Case

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

LabView Case 2

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

LabView VISA Configure Serial Port

Вы можете разместить VISA Configure Serial Port внутри структуры while loop. В примере, который рассматривается нами вам надо будет выбрать COM порт перед запуском виртуального инструмента (ВИ). Если же вы разместите VISA Configure... внутри структуры, вы сможете выбрать COM порт в любое время.

5. Visa Bytes at Port располагается внутри структуры while Loop. Для ого, чтобы активировать условие для считывания информации, надо проверить, есть ли она вообще на серийном порту. Для этого мы проверяем количество байтов на серийном порту и сравниваем его с 0. Для этого используется Programming > Comparison > Grater than 0 VI.

LabView Grater than

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.

LabView Chart

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

Вы также можете добавить элементы управления вроде “USB Control” и “LM35”;

LabView USB Control

12. Вернитесь в окно блок-диаграмы, чтобы настроить кнопки (Buttons), графики (Graph), термометр (Thermometer) и числовые индикаторы (Num inds).

Для отображения данных, полученных с USB порта, их надо преобразовать из строки в число:

LabView VISA Read

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

LabView Exp String to Number

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

LabView Stop

15. Так как процесс проходит достаточно быстро, добавьте небольшую задержку (delay) в пределах цикла while loop: Programming > Timing > Wait (ms). Выставьте задержку равной 600 мс, чтобы убедиться, что все данные были получены. При этом Arduino будет обновлять данные каждые 500 мс (смотрите скетч Arduino).

VISA Configure Serial Port находится внутри структуры while loop на рисунке выше.

LabVIEW: дополнительные фичи

LabVIEW: дополнительные фичи 1 LabVIEW: дополнительные фичи 2

Программа для Arduino

1. Инициализируем все переменные и пины, которые вы будете использовать. В данном случае:

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, которые были детально рассмотрены в статье. Скачивайте и экспериментируйте!

LabVIEW_Write_Read.ino

Arduino and LabVIEW.vi

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!