Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Kit Sensor de Umidade e Temperatura em Estojo de Nogueira Premium – Arduino + NeoPixel + Display TFT

Componentes e Materiais

ComponenteQuantidade
Arduino UNO1
Anel NeoPixel Adafruit: WS2812 5050 RGB LED1
Sensor de Temperatura DHT221
Display TFT LCD Colorido 1.44" Adafruit com MicroSD - ST7735R1
Protoboard (genérica)1
Suporte para 4 pilhas AA1
Fios jumpers (genéricos)1

Ferramentas e Máquinas Necessárias

Sobre o Projeto

A História por Trás deste Projeto

Aprenda como construímos um estojo de nogueira com encaixes tipo cauda de andorinha e usamos componentes Arduino fáceis de encontrar para criar um monitor de umidade e temperatura elegante e útil para a marcenaria. Este projeto DIY mostra um pouco de marcenaria com encaixes de nogueira e eletrônica para iniciantes usando um Arduino Uno e excelentes peças da Adafruit.

Moramos no centro do Texas, onde ocorrem grandes variações de umidade e temperatura na primavera, o que pode ser desastroso para certos projetos de marcenaria. Este projeto legal nos alerta quando a umidade está mudando ou começa a ficar alta, para que possamos tomar precauções, como mover nossos projetos de madeira para dentro de casa ou evitar usinagem durante o tempo de alta umidade. Também fica incrível e tem nosso logo!

Somos novos em Arduino e Eletrônica, então aprendemos conforme fomos fazendo. Estamos muito animados para fazer mais projetos agora que sabemos como é fácil criar coisas incríveis.

Assista ao Vídeo Detalhado da Construção!

Código

Código do Sensor da Oficina Arduino

#include 
#include 
#include 
#include 
#include 
#include 
#include 
// Existem várias bibliotecas DHTXX online. Todas têm níveis variados de recursos.
// Definição dos Pinos
#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
// Variáveis Globais
int currentColor = 9999; // (Números correspondem ao gráfico. Veja abaixo.)
CRGB leds[PIXEL_NUM];
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
DHT22 dht(DHT_PIN);
int loopDelay = 2000; //ms
// SETUP
void setup() {
  Serial.begin(9600);
  Serial.println("Iniciando.");
  // Inicia DHT
  dht.begin();
  // Inicializa Tela LCD
  tft.initR(INITR_144GREENTAB);
  // Inicializa Cartão SD
  Serial.print("Inicializando cartão SD.");
  if (!SD.begin(SD_PIN)) {
    Serial.println("Falhou!");
    return;
  }
  // Define fundo da tela como preto
  tft.fillScreen(ST7735_BLACK);
  // Inicializa LEDs
  FastLED.addLeds(leds, PIXEL_NUM);
  // Aguarda tudo estabilizar antes de iniciar o loop
  delay(500);
}
// LOOP
void loop() {
  // Obtém Dados do Sensor
  dht.readTemperature();
  dht.readHumidity();
  int f = dht.temperature_F; // Graus em Fahrenheit
  int h = dht.humidity; // Porcentagem
  // Desenha ícone de graus
  tft.fillCircle(102, 42, 6, ST7735_WHITE);
  tft.fillCircle(102, 42, 4, ST7735_BLACK);
  // Desenha Temperatura na Tela LCD
  drawTemperature(f);
  // Umidade
  setHumidityColors(h);
  // Imprime Dados no Monitor Serial
  Serial.print("Temperatura: ");
  Serial.println(f);
  Serial.print("Umidade: ");
  Serial.print(h);
  Serial.println("%");
  // Atraso
  delay(1000);
}
// Desenha Bitmap - Para a Tela LCD
void bmpDraw(char *filename, uint8_t x, uint8_t y) {
  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;
  int w, h, row, col;
  uint8_t r, g, b;
  uint32_t pos = 0, startTime = millis();
  if((x >= tft.width()) || (y >= tft.height())) return;
  if ((bmpFile = SD.open(filename)) == NULL) {
    Serial.print("Arquivo bitmap não encontrado!");
    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;
        }
        w = bmpWidth;
        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 (row=0; row= sizeof(sdbuffer)) {
              bmpFile.read(sdbuffer, sizeof(sdbuffer));
              buffidx = 0;
            }
            b = sdbuffer[buffidx++];
            g = sdbuffer[buffidx++];
            r = sdbuffer[buffidx++];
            tft.pushColor(tft.Color565(r,g,b));
          }
        }
      }
    }
  }
  bmpFile.close();
  if(!goodBmp) Serial.println("Formato BMP não reconhecido.");
}
uint16_t read16(File f) {
  uint16_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read(); // MSB
  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;
}
// Desenha Temperatura na Tela LCD
void drawTemperature(int temp) {
  int digits = numDigits(temp);
  int x1_2 = 62;
  int 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);
  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){
  int valLen = 0;
  if(number > 99) valLen = 3;
  else valLen = 2;
  return valLen;
}
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){
  // Gráfico de Cores de Umidade - Algo que criamos.
  // Vermelho - 0-17%
  // Laranja - 18-34%
  // Amarelo - 35-51%
  // Verde - 52-68%
  // Azul - 69-85%
  // Roxo - 86-100%
  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: // Vermelho
      if(currentColor == 0){ break; }
      else { setColors(cRed[0], cRed[1], cRed[2]); currentColor = 0; }
      break;
    case 1: // Laranja
      if(currentColor == 1){ break; }
      else { setColors(cOrange[0], cOrange[1], cOrange[2]); currentColor = 1; }
      break;
    case 2: // Amarelo
      if(currentColor == 2){ break; }
      else { setColors(cYellow[0], cYellow[1], cYellow[2]); currentColor = 2; }
      break;
    case 3: // Verde
      if(currentColor == 3){ break; }
      else { setColors(cGreen[0], cGreen[1], cGreen[2]); currentColor = 3; }
      break;
    case 4: // Azul
      if(currentColor == 4){ break; }
      else { setColors(cBlue[0], cBlue[1], cBlue[2]); currentColor = 4; }
      break;
    case 5: // Roxo
      if(currentColor == 5){ break; }
      else { setColors(cPurple[0], cPurple[1], cPurple[2]); currentColor = 5; }
      break;
  }
}

Peças Personalizadas e Gabinetes

Design do estojo em nogueira (arquivo CAD).

Esquemáticos

O Fritzing não tinha a maioria dos componentes reais, então fiz o melhor para representar o fluxo das conexões.

Processo de manufatura

  1. Sensores de Umidade: Como Funcionam e Principais Aplicações
  2. Sensor DHT11: Como Funciona e Principais Aplicações
  3. Sensirion SVM30: Módulo Multi-Gás, Umidade e Temperatura All-in-One para Purificadores de Ar e HVAC
  4. Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
  5. Monitoramento Contínuo de Temperatura e Umidade no Raspberry Pi com EzTemp
  6. Construa um Sistema de Monitoramento de Temperatura e Luz Multi-Sensor com Raspberry Pi e DS18B20
  7. Construa um Sistema Aeropônico Automatizado com Raspberry Pi e Sensor de Umidade
  8. Construa Monitor de Temperatura Doméstico com Raspberry Pi, MCP9808, InfluxDB e Grafana
  9. Verifique e Calibre Seu Sensor de Umidade para Medições Precisas
  10. Sensor Lab-On-Chip da NASA Goddard Fornece Monitoramento de Fluxo e Temperatura em Tempo Real