Arduino и отображение данных в Windows.

Привет Всем. Хочу поделиться с Вами записью о том, каким образом можно отображать данные с Arduino UNO (или подобной платы) в окне ОС Windows. В этом конкретном примере будем считывать данные с цифрового датчика температуры и влажности DHT22, подключенного к плате Arduino UNO и отправлять полученные данные в COM-порт компьютера для их дальнейшего вывода на экран. Вот картинка для понимания того, что мы получим, реализовав задуманное =))

Вывод данных с Arduino в окне Windows
Вывод данных с Arduino в окне Windows

На картинке запечатлен момент отображения относительной влажности (48%), считанной платой Arduino UNO с датчика DHT22. А теперь о том, что нам понадобится для реализации этого небольшого проектика. Итак, для начала «железная составляющая»:

  1. Arduino UNO или подобная плата;
  2. DHT22 — цифровой датчик температуры и влажности (мы будем использовать модуль с тремя проводами);
  3. USB кабель для соединения Arduino с компом.

Теперь о используемом софте. Для программирования Arduino будем использовать распространенную и всем хорошо известную среду разработки «Arduino IDE». Скачать ее можно перейдя по этой ссылке. Для работы с датчиком DHT22 дополнительно понадобится установить библиотеку «DHT sensor library». Для этого достаточно в «менеджерe библиотек» (ctrl+shift+i) осуществить поиск этой библиотеки и нажать на кнопку установки, после чего перезагрузить среду разработки Arduino IDE. Кстати, в блокноте есть есть более подробная об этом запись — Подключение датчика DHT11/DHT22 к Arduino UNO.

Программу-отображалку мы сделаем сами, используя среду разработки «Processing 3». Скачать ее можно с сайта разработчика, заглянув сюда — https://processing.org/download/. Качайте, устанавливайте, пригодится она нам чуть позже.

Софт «заряжен», железки «на руках», подсоединим модуль DHT22 к Ардуино как показано на рисунке:

Соединение DHT22 с Arduino UNO
Соединение DHT22 с Arduino UNO

Прежде чем производить соединение датчика или готового модуля DHT22 посмотрите на маркировку его контактов. Вывод «GND» («-«) соедините с «GND» Arduino. «VCC«, он же «+» соедините с «3V3» или «5V» на ардуино. Вывод «Data» подсоедините к цифровому входу на ардуино,в нашем примере — это GPIO2 (№2). Вообще диапазон напряжения питания датчика DHT22, по данным из даташита, составляет от 3.3В до 6В. И тут просто как рекомендация — при длине соединительной линии датчика с платой более 1 метра использовать для питания ногу ардуино с 5В.

Скетч для Arduino. Соединим Ардуино с компом и зальем простенький скетч:

#include "DHT.h"
#define DHTPIN 2     // pin к которому подключен датчик
#define DHTTYPE DHT22   // тип датчика

DHT dht(DHTPIN, DHTTYPE);

unsigned long timer_ms; //таймер для смены отправки темп. или влаж.
bool change_sensor = true; //флажок для смены отправки темп. или влаж.
char deg[] = "\260"; //Знак "градуса" для процессинга в win1251 (Oct)

void setup() {
  Serial.begin(9600); 
  dht.begin();
}//setup


void loop() {
     
 //здесь каждые 5 секунд поднимаем или опускаем "флаг" change_sensor 
  if (change_sensor && millis() - timer_ms > 5000){
    timer_ms = millis();
    change_sensor = false;
  } else if (!change_sensor && millis() - timer_ms > 5000){
    change_sensor = true;
    timer_ms = millis();

  }

  //считываем с датчика значение влажности и отправляем в COM, если "флаг" поднят
  if (change_sensor){
  int h = dht.readHumidity();
  Serial.print(h);
  Serial.println("%");
  } else {
  // Иначе считываем температуру и отправляем в COM 
  int t = dht.readTemperature();
  Serial.print(t);
  Serial.print(deg);
  Serial.println("C");

  }

} //loop

Код работает таким образом, что в COM-порт поочередно, с интервалом в 5 секунд, отправляются значения то влажности, то температуры. Вот как это выглядит в мониторе COM порта:

Отправка данных в COM порт
Отправка данных в COM порт

Скетч для Processing. «Отображалку» с ардуино данных температуры и влажности в Windows сделаем в среде разработки «Processing 3». Скопируем и вставим в окно вот такой небольшой скетч:

import processing.serial.*;

Serial myPort;
String data = "";
PFont myFont;


void setup() {
   fullScreen(); //окно без "рамки"
   surface.setSize(150, 100); //размер окошка для отображения
   surface.setResizable(true);
   surface.setLocation(1100, 25); //положение окна на раб. столе
   surface.setAlwaysOnTop(true); //окно всегда сверху
   noStroke();
   myFont = loadFont("Arial-Black-55.vlw"); 
  textFont(myFont, 50); //шрифт, размер
   
  
  // отобразим список всех доступных COM-портов 
  printArray(Serial.list());
  // Зададим номер порта, с которого будем принимать данные:
  myPort = new Serial(this, Serial.list()[1], 9600);
  
  
  
}
void draw() {
  background(180); //цвет фона окна
  fill(0);
  textAlign(CENTER);
  text(data, 90, 80);
  if (myPort.available() > 0) {
    data = myPort.readString();
    print(data);
   
}
 }
 

Если вдруг у вас на компе задействовано несколько COM портов, то после запуска скетча вы увидите их список. И не факт, что в скетче вы сразу правильно выберете порт, к которому подключена Arduino. Вот картинка где выбран нулевой по списку порт, а всего найдено было два:

Processing и вывод данных с ардуино
Processing и вывод данных с ардуино

Я знаю, что Arduino UNO у меня подключена к COM5 порту, поэтому вписываю [1] в «myPort = new Serial(this, Serial.list()[___], 9600):». В результате в небольшом сереньком окошке у нас поочередно отображаются данные с ардуино. Если честно, то хотел, чтобы это маленькое окошко было прозрачным, то есть чтобы его вообще как-бы и не было =)). Но решения на Processing.org я так и не нашел. Еще перед запуском проги не забывайте закрывать другие проги, которые задействуют порт, например, монитор COM порта в Arduino IDE. Вот такую ошибку вам выдаст Processing в случае занятого порта:

Processing COM port busy
Processing COM port busy

Теперь, если программа правильно работает, экспортируем ее и получим самостоятельный EXE-файл. Идем в меню «Файл -> экспорт приложения» (ctrl+shift+E), в появившемся окошке выбираем платформу под которую будет компилироваться код и жмем кнопку «экспорт».

Processing - экспорт приложения
Processing — экспорт приложения

После экспорта будет открыта папка в которой содержаться EXE-шники под выбранные платформы (ОС). Мой — под 64-х разрядную ОС Windows:

Запускаем его и проверяем работу «Отображалки» с ардуино =))

Отображение данных с ардуино
Отображение данных с ардуино

А если вдруг Вы столкнулись с проблемой отображения отрицательных температур при использовании датчика DHT22, то, возможно, Вам поможет эта запись — Отображение отрицательных температур при использовании датчика DHT22 с библиотекой «DHT sensors library».

Вот так, с помощью Processing можно несложно вывести данные с Arduino на рабочий стол Windows (и другие ОС тоже). Всем спасибо!

Поделиться ссылкой:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *