Índice:

O Artificial Plant Emotion Expressor (A.P.E.X.): 7 etapas (com imagens)
O Artificial Plant Emotion Expressor (A.P.E.X.): 7 etapas (com imagens)

Vídeo: O Artificial Plant Emotion Expressor (A.P.E.X.): 7 etapas (com imagens)

Vídeo: O Artificial Plant Emotion Expressor (A.P.E.X.): 7 etapas (com imagens)
Vídeo: The Tunnels Below | Critical Role | Campaign 3, Episode 15 2024, Dezembro
Anonim
Image
Image

Mas espere … Tem mais!

Etapa 1: Introdução

Introdução
Introdução
Introdução
Introdução
Introdução
Introdução

O que é APEX?

APEX é um dispositivo de monitoramento de planta inteligente (para não mencionar bonito). Basta conectá-lo a qualquer planta e ele exibirá o nível de "felicidade" da planta! Este é um ótimo lembrete para regar suas plantas se você tem o mau hábito de esquecer de regá-las.

Como funciona?

Magia. Estou brincando! O APEX usa um Arduino conectado a um sensor de umidade, que é inserido no solo da planta. Esse sensor lerá o teor de umidade do solo e, em seguida, o Arduino calculará qual face exibir.

Mas por que?

Por que não?

Etapa 2: reunindo as peças e ferramentas

Reunindo as peças e ferramentas
Reunindo as peças e ferramentas
Reunindo as peças e ferramentas
Reunindo as peças e ferramentas
Reunindo as peças e ferramentas
Reunindo as peças e ferramentas

Vamos entrar nisso! Para este Instructable, você precisará de algumas peças e ferramentas. Felizmente para você, todos eles estão listados abaixo:

No espírito do Concurso de Microcontroladores, este projeto foi totalmente feito por peças adquiridas na Amazon! (não patrocinado)

Lista de peças:

  • Arduino Uno
  • Display LED 8x8
  • Sensor de toque capacitivo
  • Sensor de Umidade
  • Conector de bateria 9V
  • Bateria 9V

Lista de ferramentas:

  • Fio de bitola 22
  • Fita isolante
  • Decapantes de fio
  • Ferro de solda
  • Bomba Desoldering

Depois de coletar todo o equipamento necessário, é hora de configurar o software Arduino!

Etapa 3: Instalando o Arduino IDE

Instalando o Arduino IDE
Instalando o Arduino IDE
Instalando o Arduino IDE
Instalando o Arduino IDE
Instalando o Arduino IDE
Instalando o Arduino IDE

Para que este projeto funcione, precisaremos ser capazes de programar o Arduino. Isso requer o download e a instalação do Arduino Integrated Development Environment (IDE) em seu computador. É uma explicação bastante simples, mas vou orientá-lo ao longo do processo:

1. Visite o site do Arduino

2. Navegue até a página de downloads (Software> Downloads)

3. Clique no link de download para o seu sistema operacional

Nota lateral: O programa funcionará em Windows, Mac e Linux.

4. Instalando no Windows

  • Clique duas vezes no arquivo baixado para executá-lo
  • Clique em "Concordo" para concordar com a Licença
  • Siga o resto das instruções
  • O programa agora deve ser instalado!

(Certifique-se de olhar as capturas de tela se você se perder)

5. Instalando no Mac

  • Clique no arquivo baixado
  • Escolha "Abrir"
  • O programa será instalado e executado automaticamente!

(Certifique-se de verificar as capturas de tela se você ficar confuso)

6. É isso aí

E pronto! Agora você tem o Arduino IDE baixado em seu sistema!

Etapa 4: O Código

O código
O código
O código
O código
O código
O código

Esta etapa é toda sobre o código. É um programa bastante curto, então irei examiná-lo com você e explicarei como funciona. Primeiro, uma breve visão geral, depois uma explicação detalhada e, finalmente, como enviar para o Arduino!

A Breve Visão Geral

Para aqueles de vocês não interessados na explicação detalhada do código, estou fornecendo um segmento TL; DR! Aqui está a explicação básica. O Arduino captura valores do sensor de umidade a cada poucos segundos. Esta informação é então usada para calcular e exibir um determinado rosto! Há também um código no final que permite que o botão de toque capacitivo ligue e desligue a tela. Muito simples, certo?

O âmago da questão

Esta parte do tutorial é para aqueles que estão muito interessados em como todo o programa funciona, linha por linha. Fornecerei capturas de tela acima para ajudá-lo a entender do que estou falando, bem como incluir algumas das linhas de código nesta descrição.

Este programa está dividido em cinco seções:

  1. Incluindo Bibliotecas e Criando Variáveis
  2. A função de configuração
  3. Funções para expressões faciais
  4. A função Write Arduino On Matrix
  5. A Função Loop

Incluindo Bibliotecas e Criando Variáveis:

A primeira seção deste código é sobre as variáveis e bibliotecas que usaremos.

#include "LedControlMS.h"

#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool iniciado = falso; bool on = true; booleano pressionado = LOW;

A primeira linha inclui uma biblioteca chamada LedControlMS. Esta biblioteca é necessária para enviar valores ao display LED. A próxima linha é uma instrução define que define o pino para o sensor de toque em 7. Depois disso, temos mais três variáveis que definem os pinos para o display LED, o sensor de umidade e seu valor. As últimas três linhas são booleanas que regulam o estado do botão de toque e da tela. Depois disso, temos nossos valores de byte:

sorriso de byte [4] = {B00000100, B00110010, B01100100, B01100000}; surpresa de byte [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte triste [4] = {B00000010, B01100100, B00110010, B00110000}; byte morto [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; erro de byte [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Byte do rosto do mal esmile [4] = {B00000010, B00101010, B01000100, B01000000}; byte elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; byte eplain [4] = {B00000010, B00101010, B00100100, B00100000}; byte eyell [4] = {B00000001, B01101001, B01100010, B01100000}; byte etalk [4] = {B00000001, B00101001, B01100010, B01100000};

Esses valores representam todas as faces do APEX. Cada byte é uma matriz que contém vários bits que determinam o estado de cada pixel em uma determinada linha. "1" e "0" representam On / Off respectivamente.

A função de configuração:

Passando para a próxima seção, temos nossa função de configuração.

void setup () {// MS Serial Output Serial.begin (9600);

pinMode (TouchSensor, INPUT);

// Configuração da matriz de LED lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }

O nome explica muito bem. É aqui que "configuramos" nosso sensor de toque e tela. As primeiras duas linhas começam nossa saída serial (usada para depuração). A terceira linha define o pino do sensor de toque para uma entrada e as últimas quatro linhas iniciam o display.

Funções para expressões faciais:

Esta é provavelmente a seção mais longa de todas, mas é muito simples e repetitiva.

void broken () {lc.setRow (0, 0, erro [0]); lc.setRow (0, 1, erro [1]); lc.setRow (0, 2, erro [2]); lc.setRow (0, 3, erro [3]); lc.setRow (0, 4, erro [4]); lc.setRow (0, 5, erro [5]); lc.setRow (0, 6, erro [6]); lc.setRow (0, 7, erro [7]); }

void happy () {

lc.setRow (0, 0, sorriso [0]); lc.setRow (0, 1, sorriso [1]); lc.setRow (0, 2, sorriso [2]); lc.setRow (0, 3, sorriso [3]); lc.setRow (0, 4, sorriso [3]); lc.setRow (0, 5, sorriso [2]); lc.setRow (0, 6, sorriso [1]); lc.setRow (0, 7, sorriso [0]); }

void plain () {

lc.setRow (0, 0, meh [0]); lc.setRow (0, 1, meh [1]); lc.setRow (0, 2, meh [2]); lc.setRow (0, 3, meh [3]); lc.setRow (0, 4, meh [3]); lc.setRow (0, 5, meh [2]); lc.setRow (0, 6, meh [1]); lc.setRow (0, 7, meh [0]); }

vazio surpreso () {

lc.setRow (0, 0, surpresa [0]); lc.setRow (0, 1, surpresa [1]); lc.setRow (0, 2, surpresa [2]); lc.setRow (0, 3, surpresa [3]); lc.setRow (0, 4, surpresa [3]); lc.setRow (0, 5, surpresa [2]); lc.setRow (0, 6, surpresa [1]); lc.setRow (0, 7, surpresa [0]); }

void dying () {

lc.setRow (0, 0, morto [0]); lc.setRow (0, 1, morto [1]); lc.setRow (0, 2, morto [2]); lc.setRow (0, 3, morto [3]); lc.setRow (0, 4, morto [4]); lc.setRow (0, 5, morto [5]); lc.setRow (0, 6, morto [1]); lc.setRow (0, 7, morto [0]); }

vazio chorando () {

lc.setRow (0, 0, sad [0]); lc.setRow (0, 1, triste [1]); lc.setRow (0, 2, triste [2]); lc.setRow (0, 3, sad [3]); lc.setRow (0, 4, sad [3]); lc.setRow (0, 5, sad [2]); lc.setRow (0, 6, sad [1]); lc.setRow (0, 7, sad [0]); }

void evilsmile () {

lc.setRow (0, 0, esmile [0]); lc.setRow (0, 1, esmile [1]); lc.setRow (0, 2, esmile [2]); lc.setRow (0, 3, esmile [3]); lc.setRow (0, 4, esmile [3]); lc.setRow (0, 5, esmile [2]); lc.setRow (0, 6, esmile [1]); lc.setRow (0, 7, esmile [0]); }

void evillaugh () {

lc.setRow (0, 0, elaugh [0]); lc.setRow (0, 1, elaugh [1]); lc.setRow (0, 2, elaugh [2]); lc.setRow (0, 3, elaugh [3]); lc.setRow (0, 4, elaugh [3]); lc.setRow (0, 5, elaugh [2]); lc.setRow (0, 6, elaugh [1]); lc.setRow (0, 7, elaugh [0]); }

void evilplain () {

lc.setRow (0, 0, eplain [0]); lc.setRow (0, 1, eplain [1]); lc.setRow (0, 2, eplain [2]); lc.setRow (0, 3, eplain [3]); lc.setRow (0, 4, eplain [3]); lc.setRow (0, 5, eplain [2]); lc.setRow (0, 6, eplain [1]); lc.setRow (0, 7, eplain [0]); }

void evilyell () {

lc.setRow (0, 0, eyell [0]); lc.setRow (0, 1, eyell [1]); lc.setRow (0, 2, eyell [2]); lc.setRow (0, 3, eyell [3]); lc.setRow (0, 4, eyell [3]); lc.setRow (0, 5, eyell [2]); lc.setRow (0, 6, ilhó [1]); lc.setRow (0, 7, eyell [0]); }

void eviltalk () {

lc.setRow (0, 0, etalk [0]); lc.setRow (0, 1, etalk [1]); lc.setRow (0, 2, etalk [2]); lc.setRow (0, 3, etalk [3]); lc.setRow (0, 4, etalk [3]); lc.setRow (0, 5, etalk [2]); lc.setRow (0, 6, etalk [1]); lc.setRow (0, 7, etalk [0]); }

Essas funções são usadas para definir cada expressão facial usando nossos valores de byte da primeira seção. Cada linha define uma posição x e valores de byte e, em seguida, aplica os valores a essa coluna. Algumas funções requerem mais linhas porque há mais linhas usadas para exibir os valores daquela face. Cada face é simétrica, por isso repetimos as linhas.

A função WriteArduinoOnMatrix:

A quarta seção é usada para calcular e escrever as faces adequadas no display LED. Consiste em uma série de instruções else if que verificam os valores da água e, em seguida, definem a exibição chamando diferentes funções da seção anterior.

void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {surpreso (); } else {broken (); }}

Você pode notar que adicionamos faces "quebradas" para o caso de o sensor sair da faixa de trabalho. Isso evita alguns erros nulos estranhos que acontecem e nos dá uma melhor compreensão visual do que está acontecendo dentro do código.

A função de loop:

Por último, mas não menos importante, está a função de loop. Este código faz exatamente o que seu nome diz, ele faz um loop! Embora existam algumas linhas nesta função, na verdade é bastante simples. O código primeiro lê o estado do botão e vê se o display está "Ligado". Se achar que isso é verdade, ele chamará a função WriteArduinoOnMatrix, que desenhará uma face no APEX. Como essa função entra em loop, ela atualizará a exibição com a freqüência que desejarmos. Esse atraso é ditado pela variável de tempo de atraso.

void loop () {if (started == true) {delaytime = 3000; } // Botão de leitura pressionado = digitalRead (TouchSensor);

if (pressionado) {

if (on == true) {lc.clearDisplay (0); on = false; atraso (delaytime); } else {on = true; atraso (delaytime); }} sensorValue = analogRead (sensorPin); atraso (delaytime); if (on == true) {// Desenhar Faces writeArduinoOnMatrix (); }

iniciado = verdadeiro;

}

Isso é tudo que há no código. Esperamos que agora você compreenda melhor como tudo funciona e possa usar esse conhecimento para começar a personalizá-lo para o seu projeto!

Enviando o código para o Arduino

Agora que cobrimos todo o código, é hora de colocá-lo no Arduino! Felizmente, o IDE torna isso muito simples. Tudo o que você precisa fazer é conectar seu Arduino ao computador com um cabo USB e, em seguida, clicar na seta para a direita no canto superior esquerdo do IDE. Deixe o código ser enviado e você verá uma mensagem de sucesso na parte inferior do programa se tiver feito isso da maneira certa!

Etapa 5: Diagrama de Circuito

Diagrama de circuito
Diagrama de circuito

Da mesma forma que o código, o diagrama de circuito não é muito complicado. Ele consiste apenas em três sensores e o Arduino, então vou te dizer as pinagens de cada um, e se você precisar de qualquer outra ajuda, basta consultar o diagrama acima.

O display LED:

  • VCC -> 5V
  • GRD -> GRD
  • DIN -> Pino 12
  • CS -> Pino 10
  • CLK -> Pino 11

O Sensor de Umidade:

  • Positivo -> 5V
  • Negativo -> GRD
  • Sinal -> A5

O sensor capacitivo de toque:

  • VCC -> 5V
  • GRD -> GRD
  • SIG -> 7

Não é muito difícil, certo? Se você tiver qualquer problema com esta pinagem, certifique-se de consultar o vídeo abaixo, onde eu o orientarei sobre como conectá-la.

Etapa 6: juntando tudo

Juntando tudo
Juntando tudo
Juntando tudo
Juntando tudo
Juntando tudo
Juntando tudo

É difícil explicar por meio de texto como tudo se encaixa, então eu definitivamente sugiro dar uma olhada no vídeo para esta parte. Não vou explicar exatamente como montei o meu, é muito difícil. Mas, para explicar as coisas vagamente, soldei as conexões dos fios e envolvi-as na parte de trás da placa. Em seguida, posicionei os sensores e usei fita isolante para mantê-los todos juntos. Por último, testei com a bateria de 9 V e, quando soube que funcionava, coloquei a bateria na parte de trás e fixei-a também. Como eu disse antes, VERIFIQUE O VÍDEO PARA ESTE PASSO, ele tem um pequeno segmento de solda bacana que é acelerado e vai te ajudar a enrolar os fios corretamente. Sinta-se à vontade para pausá-lo ou reproduzi-lo na metade da velocidade se você se perder.

Parabéns! Se tudo correr bem, agora você deve ter uma unidade APEX totalmente funcional!

Para testar sua unidade, encontre uma planta regada e conecte-a! Você deve descobrir que ele está feliz ou surpreso e isso significa que deve estar funcionando !!! Excelente trabalho por concluir o projeto!

Etapa 7: Conclusão

Conclusão
Conclusão

E isso é tudo Instructable! Obrigado por verificar o projeto! Deixe suas perguntas e comentários abaixo e certifique-se de seguir o Urban Farming Guys para mais tutoriais legais como este! Gostaríamos muito de saber como foi sua construção APEX, e as fotos são muito apreciadas! Obrigado novamente pela visita, tenha um ótimo dia!

(Este Instructable foi inspirado em um projeto mais antigo, o Plant Emoji!)

P. S. Este Instructable está inscrito no concurso Microcontroladores, então não se esqueça de votar em nós! Agradecemos muito:)

P. P. S. Vamos pegar o APEX na Make Magazine! Vote aqui! Obrigado:)

Recomendado: