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

Comunicador Inteligente de Plantas: Arduino MKR IoT Bundle para Jardinagem Automatizada

Componentes (Kit MKR IoT Bundle)

Componente Quantidade Descrição
Arduino MKR1000 (WiFi + Crypto) 1 Placa principal SAMD21 Cortex-M0+, WiFi nativo, RTC, criptografia
Sensor de Temperatura TMP36 1 Analógico, -40 a +125°C, 10mV/°C
Fototransistor (LDR) 1 Sensor de luminosidade
Componentes para sensor de umidade DIY 1 kit 2 fios/sondas + resistor 1MΩ
LED RGB, resistores, jumpers, protoboard Vários Para indicação visual e montagem

Sobre o Projeto

Este projeto utiliza o Arduino MKR IoT Bundle para criar um monitor inteligente de plantas que mede temperatura, luminosidade e umidade do solo, enviando relatórios diários por e-mail com gráficos e alertas de emergência quando a planta precisa de água.

Nota: Este tutorial pode estar desatualizado. Consulte a versão mais recente no Arduino Project Hub.

Objetivos de Aprendizado

Configuração do Zapier (Webhook → Gmail)

O Zapier atua como ponte: recebe HTTP POST do Arduino e envia e-mail formatado.

Passos:

  1. Crie conta em zapier.com
  2. Trigger: "Webhooks by Zapier" → "Catch Hook" → copie a URL gerada
  3. Teste a URL no navegador: https://hooks.zapier.com/hooks/catch/XXXX/YYYY/?temperature=22&moisture=150&light=40&warning=Teste
  4. Action: "Gmail" → "Send Email" → conecte sua conta Google
  5. Configure: To, Subject, Body (pode usar HTML – veja #ProTip abaixo)
  6. Ative o Zap

Envio de Requisição HTTP do MKR1000

O MKR1000 usa WiFi101.h + WiFiSSLClient.h para HTTPS.

Certificados SSL (Obrigatório!)

Para HTTPS, o MKR1000 precisa dos certificados raiz do servidor de destino.

  1. Abra: Arquivo → Exemplos → WiFi101 → FirmwareUpdater
  2. No código, adicione hooks.zapier.com à lista de domínios
  3. Carregue no MKR1000 via Arduino Desktop IDE (Web Editor não suporta)
  4. Aguarde conclusão do upload de certificados

Sketch Básico de Envio


#include <WiFi101.h>
#include <WiFiSSLClient.h>

const char* ssid = SECRET_SSID;
const char* password = SECRET_PASS;
String httpsRequest = "/hooks/catch/XXXX/YYYY/"; // Sua URL Zapier (só o path)
const char* host = "hooks.zapier.com";

WiFiSSLClient client;

void setup() {
  Serial.begin(9600);
  while (!Serial); delay(2000);
  Serial.print("Conectando: "); Serial.println(ssid);
  while (WiFi.begin(ssid, password) != WL_CONNECTED) {
    Serial.print("."); delay(500);
  }
  Serial.println("\nWiFi conectado!");
}

void loop() {
  float temperature = 22.5;
  int moisture = 150;
  int light = 40;
  String warning = "Planta precisa de agua";
  warning.replace(" ", "%20"); // URL encoding
  
  sendEmail(temperature, moisture, light, warning);
  delay(20000); // Teste: a cada 20s. Produção: usar RTC alarme diário.
}

void sendEmail(float temp, int moist, int light, String warn) {
  String _temp = String(temp);
  String _moist = String(moist);
  String _light = String(light);
  
  if (client.connect(host, 443)) {
    client.println("POST " + httpsRequest + 
      "?temperature=" + _temp + 
      "&moisture=" + _moist + 
      "&light=" + _light + 
      "&warning=" + warn + 
      " HTTP/1.1");
    client.println("Host: " + String(host));
    client.println("Connection: close");
    client.println();
    
    delay(1000);
    while (client.available()) {
      Serial.write(client.read());
    }
    client.stop();
  } else {
    Serial.println("Falha conexao HTTPS");
  }
}

RTC e Alarmes Diários

O MKR1000 possui RTC interno (RTCZero.h). Use alarmes para enviar relatório diário em horário fixo.


#include <RTCZero.h>
RTCZero rtc;

const byte hora = 8;    // 08:00
const byte minuto = 0;
const byte segundo = 0;
const byte dia = 1;
const byte mes = 1;
const byte ano = 24;

bool emailEnviado = false;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  rtc.setTime(hora, minuto, segundo);
  rtc.setDate(dia, mes, ano);
  
  // Alarme diário às 08:01
  rtc.setAlarmTime(8, 1, 0);
  rtc.enableAlarm(rtc.MATCH_HHMMSS);
  rtc.attachInterrupt(alarmeDisparado);
}

void loop() {
  if (!emailEnviado) {
    // sendEmail(...); // Chame sua função de envio
    emailEnviado = true;
  }
}

void alarmeDisparado() {
  emailEnviado = false; // Permite novo envio no próximo dia
}

Importante: A ISR do alarme não pode ter delay() ou operações longas. Use apenas flags booleanas.

Sensor de Umidade DIY (Divisor de Tensão)

Dois fios/parafusos no solo formam resistor variável. Com resistor de 1MΩ em série:

3.3V ---[1MΩ]---●---[Solo/Sondas]--- GND
                │
              Pino A2 (ADC)

Princípio: Solo úmido → menor resistência → maior tensão no pino A2.

Leitura com média (reduz ruído):


int moisturePin = A2;
int threshold = 800; // Calibre: teste solo seco vs. molhado

int getAverageMoisture() {
  long sum = 0;
  for (int i = 0; i < 10; i++) {
    sum += analogRead(moisturePin);
    delay(10);
  }
  return sum / 10;
}

void checkMoisture() {
  int val = getAverageMoisture();
  Serial.print("Umidade: "); Serial.println(val);
  if (val < threshold) {
    // Enviar e-mail de ALERTA URGENTE
  }
}

Sensores de Temperatura (TMP36) e Luz (Fototransistor)

TMP36 – Temperatura

TMP36: Pin 1 (VCC) → 3.3V, Pin 2 (Vout) → A1, Pin 3 (GND) → GND

float getTemperature() {
  int reading = analogRead(A1);
  float voltage = reading * 3.3 / 1024.0;
  float tempC = (voltage - 0.5) * 100.0; // 10mV/°C, offset 500mV
  return tempC;
}

Fototransistor – Luminosidade

LDR + Resistor 10kΩ em divisor:
3.3V ---[LDR]---●---[10kΩ]--- GND
                │
              Pino A0

int getLight() {
  return analogRead(A0); // 0-1023 (maior = mais luz)
}

#ProTip: Plotagem no ThingSpeak

Visualize dados em tempo real com gráficos automáticos.

  1. Crie conta em thingspeak.com
  2. New Channel → 3 fields: Temperature, Moisture, Light
  3. Copie Write API Key
  4. Instale biblioteca ThingSpeak via Gerenciador

#include <ThingSpeak.h>
WiFiClient tsClient;
unsigned long channelID = 123456;
const char* writeAPIKey = "SUA_WRITE_KEY";

void setup() {
  // ... WiFi connect ...
  ThingSpeak.begin(tsClient);
}

void loop() {
  ThingSpeak.setField(1, getLight());
  ThingSpeak.setField(2, getTemperature());
  ThingSpeak.setField(3, getAverageMoisture());
  ThingSpeak.writeFields(channelID, writeAPIKey);
  delay(60000); // 1 min (limite free: 15s)
}

Combine com RTC alarme para envio a cada minuto exato.

#ProTip: E-mails Estilizados com HTML/CSS no Zapier

No Zapier, na ação Gmail, mude "Body Type" para HTML e use este template:


<!doctype html>
<html><head><meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container{margin:10%; background:#ECF1F1; padding:5% 10%; font-family:monospace; letter-spacing:2px;}
.title{text-align:center; color:#0CA1A6; font-size:1.5em; padding:0.2vh;}
.subtitle{text-align:center; color:#0CA1A6; font-size:1.1em; padding:4%;}
.data{padding:2% 5%; margin:0 15%; background:#F7F9F9; color:#4E5B61; font-weight:bold;}
.bttn{padding:3%; margin:10% 25% 0; background:#00979D; text-align:center; color:#F7F9F9; font-size:1.4em;}
.disclaimer{text-align:center; color:#DA5B4A; font-weight:bold; margin-top:10%;}
.bttn:hover{background:#008184;}
a{text-decoration:none;}
</style></head><body>
<div class="container">
  <h2 class="title">OLÁ!</h2>
  <h4 class="subtitle">Atualização diária do seu jardim ☘</h4>
  <div class="data">🌡 Temperatura: {{querystring__temperature}} °C</div>
  <div class="data">💧 Umidade: {{querystring__moisture}}</div>
  <div class="data">☀ Luz: {{querystring__light}}</div>
  <div class="disclaimer">{{querystring__warning}}</div>
  <a href="https://thingspeak.com/channels/SEU_CANAL">
    <div class="bttn">VER GRÁFICOS</div>
  </a>
</div></body></html>

Variáveis {{querystring__campo}} vêm dos parâmetros da URL do webhook.

#ProTip: Teste APIs com Postman

Antes de programar o Arduino, teste sua URL Zapier no Postman:

  1. Método: POST
  2. URL: https://hooks.zapier.com/hooks/catch/XXXX/YYYY/
  3. Params: temperature=22, moisture=150, light=40, warning=Teste
  4. Send → veja resposta e URL final composta

Esquemático de Ligação

Ver seção "Schematics" para diagrama completo. Resumo:

Limitações e Considerações

Expansões Futuras

Processo de manufatura

  1. Dominando a Sintaxe de Netlist SPICE: Nomenclatura de Componentes, Elementos Passivos e Ativos, e Definição de Fontes
  2. Fertilizantes: Ciência, Produção e Futuros Sustentáveis
  3. Circuitos Integrados (CIs): Chips Compactos e Poderosos Impulsionando a Eletrônica Moderna
  4. Lançamento da Reliable Plant: Seu Guia Confiável para Excelência em Manutenção
  5. Kit MOSMusic: MOSFET, Arduino e Mais - Iluminação Sincronizada com Música
  6. Manutenção de Planta Desmistificada: Melhores Práticas para Indústrias Modernas
  7. Desbloqueando Valor em Plantas Químicas a Granel: Estratégias para Crescimento
  8. Componentes Essenciais de uma Máquina de Furar: Visão Geral Completa
  9. Dominando a Manutenção de Usinas: Práticas Comprovadas para Produção Confiável de Energia
  10. Principais Componentes de um Motor de Combustão Interna