Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Kit Sensor Kelembaban & Suhu Premium dengan Kotak Walnut – Arduino + NeoPixel + Layar TFT

Komponen dan Perlengkapan

Arduino UNO1
Adafruit NeoPixel Ring: WS2812 5050 RGB LED1
Sensor Suhu DHT221
Layar TFT LCD Warna 1.44 inci Adafruit dengan breakout MicroSD Card - ST7735R1
Papan roti (breadboard umum)1
Tampung baterai 4xAA1
Kabel jumper (umum)1

Alat dan Mesin yang Diperlukan

Pengkol (soldering iron umum)
Pistol lem panas (hot glue gun umum)

Tentang Proyek Ini

Di Balik Proyek Ini

Kami mempelajari cara membuat kotak pasang walnut dan menggunakan komponen Arduino yang mudah ditemukan untuk membangun pemantau kelembaban dan suhu yang stylish serta berguna untuk bengkel kayu. Proyek DIY ini menggabungkan sedikit keterampilan kayu dengan pasang walnut serta elektronika tingkat pemula menggunakan Arduino Uno dan beberapa komponen unggulan dari Adafruit.

Kami tinggal di Texas Tengah, di mana fluktuasi kelembaban dan suhu yang besar terjadi pada musim semi, yang bisa merusak proyek kayu tertentu. Proyek cerdas ini membantu memberi peringatan ketika kelembaban berubah atau mulai tinggi, sehingga kami dapat mengambil langkah pencegahan seperti memindahkan proyek kayu ke dalam rumah, atau tidak melakukan penggergajian selama cuaca kelembaban tinggi. Tampilannya juga sangat keren dan memiliki logo favorit kami!

Kami baru dalam Arduino dan elektronika, jadi kami belajar sambil membuatnya. Kami sangat bersemangat untuk membuat lebih banyak proyek sekarang setelah mengetahui seberapa mudahnya menciptakan hal-hal yang hebat.

Tonton Video Pembangunan Detail!

Video tutorial tersedia untuk memandu Anda melalui setiap langkah pembangunan.

Kode

Kode Sensor Bengkel Arduino Arduino
#include <Adafruit_NeoPixel.h>
#include <Adafruit_ST7735.h>
#include <Adafruit_GFX.h>
#include <FastLED.h>
#include <SPI.h>
#include <SD.h>
#include <cactus_io_DHT22.h>

// Definisi pin
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define DHT_PIN 2
#define PIXEL_PIN 6
#define PIXEL_NUM 24
#define SD_PIN 4
#define BMP_BUF 20

// Variabel global
int currentColor = 9999;
CRGB leds[PIXEL_NUM];
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
DHT22 dht(DHT_PIN);
int loopDelay = 2000; // ms

void setup() {
  Serial.begin(9600);
  Serial.println("Memulai...");

  dht.begin();
  tft.initR(INITR_144GREENTAB);

  Serial.print("Menginisialisasi kartu SD...");
  if (!SD.begin(SD_PIN)) {
    Serial.println("Gagal!");
    return;
  }

  tft.fillScreen(ST7735_BLACK);
  FastLED.addLeds<NEOPIXEL, PIXEL_PIN>(leds, PIXEL_NUM);
  delay(500);
}

void 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("Suhu: ");
  Serial.println(f);
  Serial.print("Kelembaban: ");
  Serial.print(h);
  Serial.println("%");

  delay(1000);
}

void bmpDraw(char *filename, uint8_t x, uint8_t y) {
  // Fungsi untuk menggambar bitmap pada layar TFT
  File bmpFile;
  int bmpWidth, bmpHeight;
  uint8_t bmpDepth;
  uint32_t bmpImageoffset;
  uint32_t rowSize;
  uint8_t sdbuffer[3 * BMP_BUF];
  uint8_t buffidx = sizeof(sdbuffer);
  boolean goodBmp = false;
  boolean flip = true;

  if ((x >= tft.width()) || (y >= tft.height())) return;

  if ((bmpFile = SD.open(filename)) == NULL) {
    Serial.print("File bitmap tidak ditemukan!");
    return;
  }

  if (read16(bmpFile) == 0x4D42) {
    read32(bmpFile);
    (void)read32(bmpFile);
    bmpImageoffset = read32(bmpFile);
    read32(bmpFile);
    bmpWidth = read32(bmpFile);
    bmpHeight = read32(bmpFile);

    if (read16(bmpFile) == 1) {
      bmpDepth = read16(bmpFile);
      if ((bmpDepth == 24) && (read32(bmpFile) == 0)) {
        goodBmp = true;
        rowSize = (bmpWidth * 3 + 3) & ~3;
        if (bmpHeight < 0) {
          bmpHeight = -bmpHeight;
          flip = false;
        }

        int w = bmpWidth;
        int h = bmpHeight;
        if ((x + w - 1) >= tft.width()) w = tft.width() - x;
        if ((y + h - 1) >= tft.height()) h = tft.height() - y;

        tft.setAddrWindow(x, y, x + w - 1, y + h - 1);
        for (int row = 0; row < h; row++) {
          uint32_t pos = flip ? bmpImageoffset + (bmpHeight - 1 - row) * rowSize : bmpImageoffset + row * rowSize;
          if (bmpFile.position() != pos) {
            bmpFile.seek(pos);
            buffidx = sizeof(sdbuffer);
          }
          for (int col = 0; col < w; col++) {
            if (buffidx >= sizeof(sdbuffer)) {
              bmpFile.read(sdbuffer, sizeof(sdbuffer));
              buffidx = 0;
            }
            uint8_t b = sdbuffer[buffidx++];
            uint8_t g = sdbuffer[buffidx++];
            uint8_t r = sdbuffer[buffidx++];
            tft.pushColor(tft.Color565(r, g, b));
          }
        }
      }
    }
  }
  bmpFile.close();
  if (!goodBmp) Serial.println("Format BMP tidak dikenali.");
}

uint16_t read16(File f) {
  uint16_t result;
  ((uint8_t *)&result)[0] = f.read();
  ((uint8_t *)&result)[1] = f.read();
  return result;
}

uint32_t read32(File f) {
  uint32_t result;
  ((uint8_t *)&result)[0] = f.read();
  ((uint8_t *)&result)[1] = f.read();
  ((uint8_t *)&result)[2] = f.read();
  ((uint8_t *)&result)[3] = f.read();
  return result;
}

void drawTemperature(int temp) {
  int digits = numDigits(temp);
  int x1_2 = 62, x2_2 = 32;
  int x1_3 = 1, x2_3 = 1, x3_3 = 1;
  int y = 38;
  char digit1[12], digit2[12], digit3[12];
  char digitStr1[24], digitStr2[24], digitStr3[24];

  itoa(temp % 10, digit1, 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");
  }

  if (digits > 2) {
    bmpDraw(digitStr1, x1_3, y);
    bmpDraw(digitStr2, x2_3, y);
    bmpDraw(digitStr3, x3_3, y);
  } else {
    bmpDraw(digitStr1, x1_2, y);
    bmpDraw(digitStr2, x2_2, y);
  }
}

int numDigits(int number) {
  return (number > 99) ? 3 : 2;
}

void setColors(int r, int g, int b) {
  for (int i = 0; i < PIXEL_NUM; i++) {
    leds[i].setRGB(r, g, b);
    leds[i].fadeLightBy(125);
    FastLED.show();
    delay(100);
  }
}

void setHumidityColors(int humidity) {
  int cRed[3] = {255, 0, 0};
  int cOrange[3] = {255, 90, 0};
  int cYellow[3] = {255, 255, 0};
  int cGreen[3] = {0, 255, 0};
  int cBlue[3] = {0, 175, 255};
  int cPurple[3] = {255, 0, 255};

  int range = map(humidity, 0, 100, 0, 6);
  switch (range) {
    case 0:
      if (currentColor != 0) setColors(cRed[0], cRed[1], cRed[2]);
      currentColor = 0;
      break;
    case 1:
      if (currentColor != 1) setColors(cOrange[0], cOrange[1], cOrange[2]);
      currentColor = 1;
      break;
    case 2:
      if (currentColor != 2) setColors(cYellow[0], cYellow[1], cYellow[2]);
      currentColor = 2;
      break;
    case 3:
      if (currentColor != 3) setColors(cGreen[0], cGreen[1], cGreen[2]);
      currentColor = 3;
      break;
    case 4:
      if (currentColor != 4) setColors(cBlue[0], cBlue[1], cBlue[2]);
      currentColor = 4;
      break;
    case 5:
      if (currentColor != 5) setColors(cPurple[0], cPurple[1], cPurple[2]);
      currentColor = 5;
      break;
  }
}

Bagian Kustom dan Kotak

Kit Sensor Kelembaban & Suhu Premium dengan Kotak Walnut – Arduino + NeoPixel + Layar TFT

Skematik

Fritzing tidak memiliki sebagian besar komponen aktual, jadi saya melakukan representasi terbaik dari alur rangkaian.

Kit Sensor Kelembaban & Suhu Premium dengan Kotak Walnut – Arduino + NeoPixel + Layar TFT Kit Sensor Kelembaban & Suhu Premium dengan Kotak Walnut – Arduino + NeoPixel + Layar TFT

Proses manufaktur

  1. Sensor Kelembaban: Cara Kerja dan Aplikasi Utama
  2. Sensor DHT11: Cara Kerja dan Aplikasi Utama
  3. Sensirion SVM30: Modul Multi-Gas, Kelembaban & Suhu All-in-One untuk Pembersih Udara & HVAC
  4. Membuat Sensor Suhu Jarak Jauh dengan Raspberry Pi dan Python – Panduan Langkah demi Langkah
  5. Pemantauan Suhu & Kelembaban Mulus di Raspberry Pi dengan EzTemp
  6. Bangun Sistem Pemantauan Suhu & Cahaya Multi-Sensor dengan Raspberry Pi & DS18B20
  7. Membangun Sistem Aeroponik Otomatis dengan Raspberry Pi dan Sensor Kelembaban
  8. Membangun Pemantau Suhu Rumah Raspberry Pi dengan MCP9808, InfluxDB & Grafana
  9. Verifikasi dan Kalibrasikan Sensor Kelembaban Anda untuk Pengukuran yang Akurat
  10. Sensor Lab-on-Chip NASA Goddard Mengukur Aliran dan Suhu Cairan secara Real-Time