Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Красиво оформленный датчик влажности и температуры

Компоненты и расходные материалы

Arduino UNO
× 1
Кольцо Adafruit NeoPixel:светодиод WS2812 5050 RGB
× 1
Датчик температуры DHT22
× 1
Цветной ЖК-дисплей TFT Adafruit 1,44 "с разъемом для карты MicroSD - ST7735R
× 1
Макет (общий)
× 1
Держатель батареи 4xAA
× 1
Перемычки (общие)
× 1

Необходимые инструменты и машины

Паяльник (общий)
Пистолет для горячего клея (общий)

Об этом проекте

История этого проекта

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

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

Мы новички в Arduino и электронике, поэтому мы учились в процессе создания этого. Мы очень рады делать больше проектов, зная, как легко делать великие дела.

Посмотрите подробное видео о сборке!

Код

  • Код датчика рабочего места Arduino
Код датчика рабочего места Arduino Arduino
 #include  #include  #include  #include  #include  #include  #include  // В Интернете можно найти множество библиотек DHTXX. Все они имеют разные уровни функций. 9999; // (Числа соответствуют диаграмме. См. Ниже.) Индикаторы CRGB [PIXEL_NUM]; Adafruit_ST7735 tft =Adafruit_ST7735 (TFT_CS, TFT_DC, TFT_RST); DHT22 dht (DHT_PIN); int loopDelay =2000; // мс // НАСТРОЙКАvoid setup () {Serial.begin (9600); Serial.println («Запуск»); // Начинаем DHT dht.begin (); // Инициализировать ЖК-экран tft.initR (INITR_144GREENTAB); // Инициализируем SD-карту Serial.print («Инициализация SD-карты.»); если (! SD.begin (SD_PIN)) {Serial.println ("Ошибка!"); возвращение; } // Установить черный фон экрана tft.fillScreen (ST7735_BLACK); // Инициализируем светодиоды FastLED.addLeds  (leds, PIXEL_NUM); // Пусть все догонит перед запуском цикла delay (500);} // LOOPvoid ​​loop () {// Получить данные датчика dht.readTemperature (); dht.readHumidity (); int f =dht.temperature_F; // Градусы Фаренгейта int h =dht.humidity; // Процент // Отрисовка значка градусов tft.fillCircle (102, 42, 6, ST7735_WHITE); tft.fillCircle (102, 42, 4, ST7735_BLACK); // Рисуем температуру на ЖК-экране drawTemperature (f); // Влажность setHumidityColors (h); // Печать данных на последовательный монитор Serial.print ("Температура:"); Serial.println (f); Serial.print ("Влажность:"); Серийный отпечаток (ч); Serial.println ("%"); // Задержка задержки (1000); } // Рисуем растровое изображение - это для LCD Screenvoid bmpDraw (char * filename, uint8_t x, uint8_t y) {File bmpFile; int bmpWidth, bmpHeight; // W + H в пикселях uint8_t bmpDepth; // Битовая глубина (в настоящее время должна быть 24) uint32_t bmpImageoffset; // Начало данных изображения в файле uint32_t rowSize; // Не всегда =bmpWidth; может иметь заполнение uint8_t sdbuffer [3 * BMP_BUF]; // буфер пикселей (R + G + B на пиксель) uint8_t buffidx =sizeof (sdbuffer); // Текущая позиция в sdbuffer boolean goodBmp =false; // Устанавливается в true при правильном синтаксическом анализе заголовка boolean flip =true; // BMP сохраняется снизу вверх int w, h, row, col; uint8_t r, g, b; uint32_t pos =0, startTime =millis (); if ((x> =tft.width ()) || (y> =tft.height ())) return; // Serial.println (); // Serial.print ("Загрузка растрового изображения:'"); // Serial.print (filename); // Serial.println ('\' '); // Открыть запрошенный файл на SD-карте if ((bmpFile =SD.open (filename)) ==NULL) {Serial.print ("Bitmap file not found!"); возвращение; } // Разбираем заголовок BMP if (read16 (bmpFile) ==0x4D42) {read32 (bmpFile); (недействительно) read32 (bmpFile); bmpImageoffset =read32 (bmpFile); //Serial.println ()); read32 (bmpFile); bmpWidth =read32 (bmpFile); bmpHeight =read32 (bmpFile); если (read16 (bmpFile) ==1) {bmpDepth =read16 (bmpFile); //Serial.print("Bit Depth:"); если ((bmpDepth ==24) &&(read32 (bmpFile) ==0)) {goodBmp =true; // Строки BMP дополняются (при необходимости) до 4-байтовой границы rowSize =(bmpWidth * 3 + 3) &~ 3; // Если bmpHeight отрицательное, изображение идет сверху вниз. // Это не канон, но наблюдалось в дикой природе. если (bmpHeight <0) {bmpHeight =-bmpHeight; flip =false; } // Обрезка загружаемой области w =bmpWidth; h =bmpHeight; if ((x + w-1)> =tft.width ()) w =tft.width () - x; если ((y + h-1)> =tft.height ()) h =tft.height () - y; // Устанавливаем адресное окно TFT на обрезанные границы изображения tft.setAddrWindow (x, y, x + w-1, y + h-1); for (row =0; row  =sizeof (sdbuffer)) {bmpFile.read (sdbuffer, sizeof (sdbuffer)); buffidx =0; } // Конвертируем пиксель из формата BMP в формат TFT, нажимаем для отображения b =sdbuffer [buffidx ++]; г =SDBuffer [buffidx ++]; г =SDBuffer [buffidx ++]; tft.pushColor (tft.Color565 (r, g, b)); }}}}} bmpFile.close (); if (! goodBmp) Serial.println ("Формат BMP не распознан.");} // Это для Bitmap / LCD Screenuint16_t read16 (File f) {uint16_t result; ((uint8_t *) &результат) [0] =f.read (); // LSB ((uint8_t *) &result) [1] =f.read (); // MSB return result;} // Это для экрана Bitmap / LCD uint32_t read32 (File f) {uint32_t result; ((uint8_t *) &результат) [0] =f.read (); // LSB ((uint8_t *) &result) [1] =f.read (); ((uint8_t *) &результат) [2] =f.read (); ((uint8_t *) &результат) [3] =f.read (); // MSB return result;} // Отображение температуры на ЖК-экранеvoid drawTemperature (int temp) {// Получение количества цифр в температуре int digits =numDigits (temp); // Определение позиции курсора для рисования растровых изображений int x1_2 =62; интервал x2_2 =32; int x1_3 =1; int x2_3 =1; int x3_3 =1; int y =38; char digit1 [12]; char digit2 [12]; char digit3 [12]; char digitStr1 [24]; char digitStr2 [24]; char digitStr3 [24]; // Получить первую цифру itoa (temp% 10, digit1,10); //Serial.println(temp% 10); strcpy (digitStr1, ""); strcat (digitStr1, digit1); strcat (digitStr1, ".bmp"); // Получить вторую цифру if (digits ==2) {itoa ((temp / 10)% 10, digit2,10); strcpy (digitStr2, ""); strcat (digitStr2, digit2); strcat (digitStr2, ".bmp"); } // Получить третью цифру if (digits ==3) {itoa ((temp / 100)% 10, digit3,10); strcpy (digitStr3, ""); strcat (digitStr3, digit3); strcat (digitStr3, ".bmp"); } если (цифры> 2) {bmpDraw (digitStr1, x1_3, y); bmpDraw (digitStr2, x2_3, y); bmpDraw (digitStr3, x3_3, y); } еще {bmpDraw (digitStr1, x1_2, y); bmpDraw (digitStr2, x2_2, y); }} // Получить количество цифр температуры для определения размещения на экране int numDigits (int number) {int valLen =0; если (число> 99) valLen =3; иначе valLen =2; return valLen;} // Устанавливаем цвета светодиодовvoid setColors (int r, int g, int b) {for (int i =0; i  

Изготовленные на заказ детали и корпуса

Схема

У Fritzing не было большинства реальных компонентов, поэтому я приложил все усилия, чтобы представить поток вещей.

Производственный процесс

  1. Работа датчика влажности и его применение
  2. Датчик DHT11 и его работа
  3. Sensirion:модуль для нескольких газов, влажности и температуры для очистителей воздуха и систем отопления, вентил…
  4. Датчик температуры Python и Raspberry Pi
  5. Простая температура и влажность на Raspberry Pi
  6. Датчик температуры и освещенности Raspberry Pi
  7. Аэропоника с Raspberry Pi и датчиком влажности
  8. Датчик температуры Raspberry Pi
  9. Как проверить и откалибровать датчик влажности
  10. Лабораторный датчик расхода и температуры