Você está na página 1de 6

Instrutor:

Rita Barbosa

Participante:

Gabriel da Silva

Data de Início: Data de Término:


16/10/2023
20/10/2023

Problema/Solução
Problema:
Uma senhora tem um problema com o seu horário e fica fora de casa por vários dias
dependendo do seu trabalho, então ela acaba não tendo tempo para cuidar da ração do seu
cachorro, ela então pediu a sua ajuda para criar um projeto que ajude ela a alimentar seu
cachorro enquanto ela estiver fora de casa.

Solução:
A solução para esse problema será criar um alimentador automático para ela usando o
ESP32, um servo motor que será conectado ao ESP32 e vai ser o responsável por abrir o
compartimento onde está armazenado a ração, um Módulo RTC (Real Time Clock),
também conectado ao ESP32 para definir os horários que o cachorro se alimenta e assim
ativar o servo motor.

Miniprojeto Wokwi
Desenho do Projeto:

Código do Projeto:
Código do projeto sem estar conectado no Wi-Fi:
#include <ESP32Servo.h>
#include "RTClib.h"

const int servoPin = 18;

Servo servo;
RTC_DS3231 rtc;

void setup() {
servo.attach(servoPin, 500, 2400);
Serial.begin(115200);

if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
}

void loop() {
DateTime now = rtc.now();
String horaAtual = String(now.hour()) + ":" + String(now.minute());

if (horaAtual == "9:10" || horaAtual == "12:30" ||horaAtual == "20:30") {


alimentarPet();
}

delay(5000);

void alimentarPet() {
servo.write(0);
delay(20000);
servo.write(90);
delay(40000);

Código do projeto conectado no Wi-Fi:

#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include "RTClib.h"

#define WIFI_SSID "Wokwi-GUEST"


#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 1
int status = WL_IDLE_STATUS;

const char* mqtt_server = "test.mosquitto.org";


char* my_topic_SUB = "FIT/SUB";
char* my_topic_PUB = "FIT/PUB";

WiFiClient espClient;
PubSubClient client(espClient);
Servo servo;
RTC_DS3231 rtc;

const int servoPin = 18;


int contador = 1;
char mensagem[30];
unsigned long lastMillis = 0;

void setup() {
servo.attach(servoPin, 500, 2400);
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
conectawifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}

void loop() {

int alimentar = 0;
DateTime now = rtc.now();
String horaAtual = String(now.hour()) + ":" + String(now.minute());
if (horaAtual == "9:10" || horaAtual == "12:30" ||horaAtual == "20:30") {
alimentarPet();
alimentar = 1;
}
if (!client.connected()) {
reconnect();
}
if (millis() - lastMillis > 10000) {
lastMillis = millis();
sprintf(mensagem, "%d", alimentar);
Serial.print("Mensagem enviada: ");
Serial.println(mensagem);
client.publish(my_topic_PUB, mensagem);
Serial.print(contador);
Serial.println("-Mensagem enviada com sucesso...");
contador++;
}
delay(40000);
}

void alimentarPet() {
servo.write(0);
delay(20000);
servo.write(90);
}
void conectawifi(){
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Conectando ao WiFi ");
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {


String string;
Serial.print("Chegou a mensagem [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
string+=((char)payload[i]);
}
Serial.print(string);

void reconnect() {
while (!client.connected()) {
Serial.print("Tentando conectar ao MQTT ...");
if (client.connect("ESPClient")) {
Serial.println("Conectado");
client.subscribe(my_topic_SUB);
}
else {
Serial.print("falhou, rc=");
Serial.print(client.state());
Serial.println(" Tente novamente em 5 segundos");
}
}
}
Parabéns por concluir o curso e por se dedicar ao
desenvolvimento de habilidades em IoT na área de
Energia!

Você também pode gostar