Índice:
- Etapa 1: Introdução
- Etapa 2: reunindo as peças e ferramentas
- Etapa 3: Instalando o Arduino IDE
- Etapa 4: O Código
- Etapa 5: Diagrama de Circuito
- Etapa 6: juntando tudo
- Etapa 7: Conclusão
Vídeo: O Artificial Plant Emotion Expressor (A.P.E.X.): 7 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Mas espere … Tem mais!
Etapa 1: 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
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
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
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:
- Incluindo Bibliotecas e Criando Variáveis
- A função de configuração
- Funções para expressões faciais
- A função Write Arduino On Matrix
- 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
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
É 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
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:
Inteligência artificial e reconhecimento de imagem usando HuskyLens: 6 etapas (com fotos)
Inteligência Artificial e Reconhecimento de Imagem Usando HuskyLens: Ei, e aí, pessoal! Akarsh aqui da CETech. Neste projeto, vamos dar uma olhada nas HuskyLens da DFRobot. É um módulo de câmera alimentado por IA capaz de realizar várias operações de Inteligência Artificial, como Reconhecimento de Face
Emotion Expresser: 4 etapas
Emotion Expresser: Intro: Esta máquina é um expressor de emoções, funciona ajudando pessoas que não são boas em expressar seus sentimentos a expressarem seus sentimentos. Esta máquina pode ajudar pessoas que precisam de ajuda ou precisam de alguém para ouvi-los reclamar de coisas que são
Automatic Smart Plant Pot - (DIY, 3D Printed, Arduino, Self Watering, Project): 23 etapas (com imagens)
Automatic Smart Plant Pot - (DIY, 3D Printed, Arduino, Self Watering, Project): Olá, Às vezes, quando saímos de casa por alguns dias ou estamos muito ocupados, as plantas da casa (injustamente) sofrem porque não são regadas quando estão preciso disso. Esta é a minha solução. É um vaso de plantas inteligente que inclui: Reservatório de água embutido. Um senso
IoT Plant Monitoring System (com IBM IoT Platform): 11 etapas (com imagens)
IoT Plant Monitoring System (com IBM IoT Platform): Visão geral O Plant Monitoring System (PMS) é um aplicativo desenvolvido com indivíduos que estão na classe trabalhadora com o polegar verde em mente. Hoje, os trabalhadores estão mais ocupados do que nunca; avançando em suas carreiras e administrando suas finanças
Fale com o Pick e o bate-papo de inteligência artificial usando o Cleverbot: 14 etapas (com imagens)
Fale com o Pick e o Bate-papo de Inteligência Artificial usando o Cleverbot: Aqui, tento não apenas o comando de voz, mas também o Bate-papo de Inteligência Artificial com o computador usando o Cleverbot. Na verdade a ideia surgiu quando encontraram crianças misturando cores na caixa de colorir ao tirar a cor de uma cor para a mais próxima. Mas finalmente impleme