Comunicador de planta
Componentes e suprimentos
| × | 1 |
Aplicativos e serviços online
| ||||
|
Sobre este projeto
Observação:este tutorial pode estar desatualizado, vá aqui para uma versão mais atual.
Introdução
Como o poeta inglês William Wordsworth disse uma vez:
"Sua mente é o jardim, seus pensamentos são as sementes, a colheita pode ser flores ou ervas daninhas."
Manter suas plantas vivas pode ser um grande desafio, pois elas são muito ruins em comunicação.
Uma maneira de mantê-los felizes é trazer suas plantas com você, mas talvez você não queira arrastar esse cacto ou samambaia grande saindo dos bolsos de sua jaqueta de inverno. Além disso, a maioria das plantas não gosta do frio.
Depois de passar meses tentando nos comunicar com nossa planta aranha, desistimos e usamos os componentes MKR IoT Bundle para criar um dispositivo que analisa remotamente o bem-estar de qualquer planta.
Em poucas palavras:
Neste experimento, você aprenderá como proteger suas plantas e garantir que elas sobrevivam usando a magia do Arduino.
Ao monitorar a umidade, temperatura e luz, você pode ter certeza de que suas plantas estão felizes. Pode enviar e-mails e gráficos diariamente e notificá-lo de suas necessidades.
Componentes
- sensor de temperatura TMP36
- Fototransistor
- Sensor de umidade faça você mesmo
Metas de aprendizagem
- Apresentando o serviço de Internet Zapier
- Envio de solicitações HTTP
- Gerenciando relógios e alarmes em tempo real
- Construindo um sensor de umidade faça você mesmo
- Traçando valores com thingSpeak #ProTips
- Estilize seu e-mail com HTML e CSS #ProTips
- Teste APIs com PostMan #ProTips
Quer saber mais?
Este tutorial é parte de uma série de experimentos que o familiarizam com o MKR1000 e a IoT. Todos os experimentos podem ser construídos usando os componentes contidos no MKR IoT Bundle.
- Travesseiro Amo você
- Caixa de quebra-cabeça
- Gato de Pavlov
- O Nerd
- Comunicador de planta
Configure o Zapier
Zapier é uma ferramenta de automação online que pode facilmente gerenciar as APIs de outros aplicativos para nós. É uma ótima ferramenta para combinar múltiplas tarefas ou se o aplicativo que queremos usar possui API complexa que não pode ser gerenciada por um Arduino.
No nosso caso, vamos usá-lo para enviar um e-mail com os dados recuperados do Arduino.
Siga estes poucos passos simples para criar seu próprio zap!
Para prosseguir, precisamos testar nosso gancho, primeiro copiando o URL fornecido e, em seguida, selecionando o botão Testar e revisar que aparece quando você pressiona Continuar. Adicione estes parâmetros ao URL:
custom_webhook_URL? temperatura =0 &umidade =0 &luz =0 &aviso =0
Agora basta copiar e colar este URL em uma nova página do navegador.
Você deve ver uma resposta como esta:
Parabéns! Você acabou de enviar uma solicitação http!
Isso é exatamente o que faremos com nossa placa Arduino. Mas em vez de colar esse URL em uma página do navegador, vamos enviá-lo diretamente para o servidor Zapier. Além disso, modificaremos os valores dos parâmetros que agora estão definidos como zero com os valores de nossos sensores.
Para uma maneira mais avançada de testar e trabalhar com API, dê uma olhada no #ProTip na parte inferior da página.
Depois de testar sua solicitação, você pode continuar criando o Zap.
Prossiga na edição com Faça isto ...
Verifique sua caixa de correio para ver o e-mail gerado por Zapier. Será da conta que você usou na primeira etapa da configuração do gmail.
Configure o Conselho
Para implementar todas as funcionalidades, vamos usar as seguintes bibliotecas:
- WiFi101 // para se conectar à internet e verificar as redes
- RTCZero // para gerenciar eventos acionados por tempo
Você pode baixá-los do gerenciador de biblioteca conforme explicado neste guia.
Para usar a API de Zapier, primeiro precisamos fazer upload dos certificados no MKR1000. Isso se aplica à maioria dos serviços online e APIs!
Faça upload do exemplo do Firmware Updater da biblioteca WiFi101 e adicione hooks.zapier.com para os domínios.
> examples> WiFi101> FirmwareUpdater
Se você estiver usando o Editor da Web do Arduino, esse recurso ainda não foi implementado e você precisa fazer isso por meio do Aplicativo de desktop Arduino.
Enviando solicitação HTTP
Agora estamos prontos para enviar a solicitação HTTP da placa Arduino.
Por enquanto vamos definir um valor arbitrário para o nosso parâmetro que mais tarde será substituído por valores reais do sensor.
temperatura flutuante =22; umidade interna =150; luz interna =40; String warning ="Esta é uma mensagem de aviso"; warning.replace ("", "% 20");
Observe que a string deve ser codificada , uma vez que os espaços em branco não podem ser enviados em uma solicitação HTTP. Todos os espaços em branco são substituídos pelo equivalente codificado
% 20
Depois de configurar nossos parâmetros, chamaremos o
send_email ()
função, que irá converter todos eles em Strings e irá reconstruir o mesmo URL que usamos antes para publicá-lo no servidor Zapier. Preencha este esboço com sua credencial de WiFi e o pedaço de URL que você recebeu do Zapier e faça upload.
#include #include const char * ssid =SECRET_SSID; // SSID (nome) da sua rede const char * password =SECRET_PSWD; // sua senha de rede String httpsRequest =SECRET_REQUEST; // seu URL Zapier const char * host ="hooks.zapier.com"; Cliente WiFiSSLClient; void setup () {Serial.begin (9600); while (! Serial); atraso (2000); Serial.print ("Conectando Wifi:"); Serial.println (ssid); while (WiFi.begin (ssid, senha)! =WL_CONNECTED) {Serial.print ("."); atraso (500); } Serial.println (""); Serial.println ("WiFi conectado"); } loop vazio () {temperatura flutuante =22; umidade interna =150; luz interna =40; String warning ="Esta é uma mensagem de aviso"; warning.replace ("", "% 20"); send_email (temperatura, umidade, luz, aviso); delay (20000)} void send_email (temperatura flutuante, umidade interna, luz interna, aviso de String) {// converter valores para String String _temperature =String (temperatura); String _moisture =String (umidade); String _light =String (luz); String _warning =aviso; if (client.connect (host, 443)) {client.println ("POST" + httpsRequest + "? temperature =" + _temperature + "&umidade =" + _moisture + "&light =" + _light + "&warning =" + _warning + "HTTP / 1.1"); client.println ("Host:" + String (host)); client.println ("Conexão:fechar"); client.println (); atraso (1000); while (client.available ()) {// Imprime no console a resposta do servidor char c =client.read (); Serial.write (c); } client.stop (); // Desconectar do servidor} else {Serial.println ("Falha ao conectar ao cliente"); }}
Ele enviará um e-mail para o endereço que você escolher a cada 20 segundos.
Tenha cuidado com os pedidos, o Zapier permite apenas 100 pedidos grátis por mês.
RTC e alarmes
Podemos usar o relógio de tempo real do MKR1000 para enviar um e-mail todos os dias a uma determinada hora.
Este esboço definirá a hora e a data para 16h do dia 4 de dezembro de 2017 e, em seguida, disparará um alarme todos os dias às 16h01.
Observe que, uma vez que o alarme está associado a uma interrupção função não podemos incluir atrasos , mas podemos usar a variável booleana para disparar ações no
loop ()
#include RTCZero rtc; // cria objeto RTC / * Altere esses valores para definir a hora inicial atual * / const byte segundos =0; minutos de byte const =0; horas de bytes const =16; / * Altere esses valores para definir a data inicial atual * / const byte day =4; const byte mês =12; ano const byte =17; bool email_already_sent =false; void setup () {Serial.begin (9600); while (! Serial); atraso (2000); rtc.begin (); // inicializa o formato RTC 24H rtc.setTime (horas, minutos, segundos); rtc.setDate (dia, mês, ano); rtc.setAlarmTime (16, 1, 0); // Defina a hora para o Arduino enviar o e-mail rtc.enableAlarm (rtc.MATCH_HHMMSS); rtc.attachInterrupt (alarmMatch); } void loop () {if (! email_already_sent) {// send_email (); email_already_sent =true; }} void alarmMatch () {// disparado quando o alarme dispara Serial.println ("Alarm Match!"); email_already_sent =false; }
Sensor de umidade do solo faça você mesmo
Dois fios colocados no pote de solo formam um resistor variável, cuja resistência varia de acordo com a umidade do solo .
Esse resistor variável é conectado em uma configuração de divisor de tensão e o Arduino coleta uma tensão proporcional à resistência entre os 2 fios.
O que significa que quanto mais úmido for o solo, menos voltagem será medida no Arduino.
Usando o resistor de 1 Mega Ohm e dois fios, podemos criar nosso sensor DIY de umidade do solo!
Fazendo o upload do seguinte esboço, você pode começar a ler os valores do sensor, sugerimos que comece testando-o primeiro em um solo seco ee anote o valor que você leu.
Esse valor será usado para definir um limite para que o Arduino saiba quando suas plantas precisam de água e envie a você um e-mail de emergência .
int umidadePin =A2; // Defina este limite de acordo com a resistência que você usou // A maneira mais fácil de calibrar este valor é testar o sensor em solo seco e úmido int limite =800; void setup () {Serial.begin (9600); while (! Serial); atraso (2000); } void loop () {Serial.println (get_average_moisture ()); atraso (5000); } int get_average_moisture () {// faça uma média de 10 valores para ser mais preciso int tempValue =0; // variável para armazenar temporariamente o valor da umidade para (int a =0; a <10; a ++) {tempValue + =analogRead (moistPin); atraso (100); } return tempValue / 10; }
Adicionar temperatura e sensor de luz
Veja o esquema abaixo para conectar os dois sensores. Usaremos essas duas funções para ler os valores dos sensores:
float get_temperature () {int reading =analogRead (A1); tensão flutuante =leitura * 3,3; tensão / =1024,0; // Imprime a temperatura em Celsius float temperatureC =(voltagem - 0,5) * 100; // convertendo de 10 mv por grau com deslocamento de 500 mV // Converter para Fahrenheit float temperatureF =(temperatureC * 9.0 / 5.0) + 32.0; temperatura de retornoC; } int get_light () {int light_value =analogRead (A0); return light_value; }
Observe que você pode usar as unidades Fahrenheit retornando
temperaturaF
em vez de temperaturaC
#ProTip:Plote valores usando ThingSpeak
Para todos vocês maníacos por controle, aqui estão as instruções para traçar todos os dados coletados em um lindo gráfico como este:
Usaremos a plataforma ThingSpeak para traçar gráficos, siga estas etapas para começar.
Baixe a biblioteca ThingSpeak e vamos começar. Este esboço abaixo irá carregar os valores dos sensores para a nuvem a cada minuto, basta preencher suas credenciais WiFi e as chaves API do seu canal e fazer o upload.
#include #include #include "ThingSpeak.h" const char * ssid =SECRET_SSID; // SSID (nome) da sua rede const char * password =SECRET_PSWD; // sua senha de rede WiFiClient ThingSpeakClient; não assinado long myChannelNumber =356392; const char * myWriteAPIKey =SECRET_WRITE_API; int lightPin =A0; // o pino analógico ao qual o sensor de luz está conectado int tempPin =A1; // o pino analógico do pino Vout (sentido) do TMP36 está conectado a int moistPin =A2; void setup () {Serial.begin (9600); while (! Serial); atraso (2000); Serial.print ("Conectando Wifi:"); Serial.println (ssid); while (WiFi.begin (ssid, senha)! =WL_CONNECTED) {Serial.print ("."); atraso (500); } Serial.println (""); Serial.println ("WiFi conectado"); ThingSpeak.begin (ThingSpeakClient);} void loop () {ThingSpeak.setField (1, get_light ()); ThingSpeak.setField (2, get_temperature ()); ThingSpeak.setField (3, get_average_moisture ()); ThingSpeak.writeFields (myChannelNumber, myWriteAPIKey); Serial.println ("mensagem enviada para nuvem"); atraso (60.000); // envia valores a cada 1 minuto} float get_temperature () {int reading =analogRead (tempPin); tensão flutuante =leitura * 3,3; tensão / =1024,0; // Imprime a temperatura em Celsius float temperatureC =(voltagem - 0,5) * 100; // convertendo de 10 mv por grau com deslocamento de 500 mV // Converter para Fahrenheit float temperatureF =(temperatureC * 9.0 / 5.0) + 32.0; temperatura de retornoC; } int get_average_moisture () {// faça uma média de 10 valores para ser mais preciso int tempValue =0; // variável para armazenar temporariamente o valor da umidade para (int a =0; a <10; a ++) {tempValue + =analogRead (moistPin); atraso (10); } return tempValue / 10; } int get_light () {int light_value =analogRead (A0); return light_value; }
No esboço completo do Pro abaixo você pode ver como anexar esse upload a um alarme RTC que é acionado a cada minuto.
Infelizmente o Gmail não nos permite incorporar gráficos e iframes no corpo do e-mail, mas podemos enviar o link por e-mail em um botão lindo, veja a dica abaixo.
Escolhemos ThingSpeak, mas existem inúmeras alternativas por aí! Dê uma olhada em Dweet.io e freeboard.io, por exemplo.
#ProTip:Estilize seu e-mail
Zapier nos permite incorporar algum código html e css no corpo do e-mail. Podemos usar isso para enviar e-mails bem estilizados como este:
Para obter este resultado, basta alterar o tipo de corpo para html na interface do Zapier e adicione seu HTML e CSS personalizados.
Copie e cole este modelo:
OLÁ!
Aqui está sua atualização diária sobre seu jardim e # 9752;
9832; Temperatura:{{querystring__temperature}} C
9748; Umidade:{{_querystring__moisture}}
9728; Claro:{{querystring__light}}
{{querystring__warning}}
VEJA O GRÁFICO
#ProTip:Teste a API com PostMan
Trabalhar com solicitação HTTP pode ser difícil. Felizmente, existem várias ferramentas que podem nos ajudar a construir a URL de que precisamos.
Postman é um ótimo exemplo:
Basta colar a URL inicial fornecida pelo Zapier, adicionar parâmetros e enviar. Ele imprimirá a resposta do servidor e redigirá a URL para você.
Código
Esboço completo
#ProTips esboço completo
Esquemas
Processo de manufatura
- Componentes do circuito
- Fertilizante
- Circuito Integrado
- Apresentando a planta confiável
- MOSMusic
- O que é manutenção de fábrica?
- Aproveitando ao máximo as fábricas de produtos químicos a granel
- Componentes da máquina de perfuração
- Entendendo a manutenção da planta
- Componentes do motor de combustão interna