Vamos por começar por incluir as bibliotecas PCF8574, Stepper e SoftwareSerial.
Em seguida, criamos os objetos Bluetooth e pcfBotoes.
Para simplificar a interação com o PCF8574, criamos dois arrays: o primeiro contém as portas do PCF que serão utilizadas, e o segundo especifica o modo de operação de cada uma dessas portas. Além disso, declaramos uma constante que armazena o número de portas em uso no PCF, permitindo a criação de ciclos para manipulação eficiente do dispositivo.
Para simplificar a interação com as portas digitais do Arduino e o estado de cada um dos dispositivos, criamos três arrays: o primeiro contém as portas do Arduino que serão utilizadas, o segundo especifica o modo de operação de cada uma dessas portas e o terceiro com a indicação se o dispositivo se encontra ligado ou desligado. Além disso, declaramos uma constante que armazena o número de portas digitais em uso no Arduino, permitindo a criação de ciclos para manipulação eficiente do dispositivo, e uma variável para receber o valor de cada um dos botões usados no sistema.
Por fim, para o motor de passo, declaramos uma constante com o número de passos necessários para que o veio do motor complete uma volta, criamos o objeto myStepper, especificando o número de passos por volta e as portas digitais associadas, declaramos uma variável 'aberto' do tipo booleana, que indica se o portão está aberto ou fechado, uma constante 'limitBt', com a posição do array que contém a indicação da porta digital que está a ser usada pela Chave Fim de Curso, e 'valueLMB' do tipo inteiro, que recebe o valor proveniente da Chave Fim de Curso.
No bloco de código void setup()
, inicializamos o monitor de série, para facilitar a monitorização do nosso código, e iniciamos a comunicação série com o módulo Bluetooth, configurando a taxa de baud. Definimos modo das portas digitais do PCF e do Arduino e indicamos a velocidade do motor de passo.
Em seguida, inicializamos o sistema, garantindo que as luzes e as ventoinhas estão desligadas e o portão está fechado.
Dentro do bloco de código void loop()
, começamos por ler os valores provenientes dos botões, chamando a função leituraBotoes()
, e do Bluetooth.
Tendo os valores lidos, implementamos a lógica para ligar ou desligar as luzes da casa, ventoinhas e abrir ou fechar o portão da garagem, garantindo a atualização contínua do array booleano 'estadoDivisao[]
'.
Como podemos ver, foram desenvolvidas várias funções para simplicar o código. Passemos à explicação de cada uma delas:
leituraBotoes()
- Serve exclusivamente para ler o estado de cada um bos botões utilizado no sistema;
ligaDesligaLuz()
- Esta função recebe dois parâmetros: value
- valor do botão; divisao
- índice do array portasARD com indicação do LED a ligar ou a desligar, ao mesmo tempo, este índice serve para atualizar o array estadoDivisão[]
com o estado do dispositivo.
fechaPortaoAutomatico()
- Esta é utilizada para fechar o portão de garagem, desce o portão 10 passos de cada vez até que a Chave Fim de Curso seja pressionada.
abreFechaPortaoGaragem()
- Como o próprio nome indica, serve para abrir e fechar o portão da garagem. Esta é executada sempre que o botão da garagem seja pressionado, isto é, que o seu valor, passado por parâmetro (valueBtPortão
), seja 1.
Após a conclusão da Etapa 5, alcançamos a materialização do projeto através da programação de uma maquete que integra de maneira harmoniosa todas as funcionalidades desenvolvidas. É possível perceber nesta maquete uma integração completa entre a automatização dos sistemas de iluminação, ventilação e abertura do portão. Isso faz dela mais que uma simples representante física palpável; é um exemplo concreto da alta eficiência alcançada ao utilizar o Arduino para automatizar processos residenciais. Assim sendo, esta etapa tem o propósito de validar tanto a viabilidade técnica completa do projeto quanto enfatizar o sucesso da interconexão e integração entre as várias partes que compõem o sistema domótico.