#include <LiquidCrystal_I2C.h> // Inclui a biblioteca para o controle de displays LCD com interface I2C
#include <Servo.h> // Inclui a biblioteca para controle de servos
int servoPin = 11; // Define o pino do Arduino onde o servo está conectado
Servo servo1; // Cria um objeto Servo para controlar o servo
LiquidCrystal_I2C lcd(0x27, 16, 2); // Cria um objeto LCD com o endereço I2C 0x27, e display de 16 colunas e 2 linhas
#define ECHO_PIN 2 // Define o pino de recepção (Echo) do sensor ultrassônico
#define TRIG_PIN 3 // Define o pino de disparo (Trig) do sensor ultrassônico
int buzzer = 4; // Define o pino onde o buzzer está conectado
void setup() {
lcd.init(); // Inicializa o display LCD
lcd.backlight(); // Liga a luz de fundo do LCD
servo1.attach(servoPin); // Inicializa o servo no pino definido
Serial.begin(9600); // Inicializa a comunicação serial a 9600 bps
pinMode(LED_BUILTIN, OUTPUT); // Define o LED integrado como saída
pinMode(TRIG_PIN, OUTPUT); // Define o pino TRIG do sensor ultrassônico como saída
pinMode(ECHO_PIN, INPUT); // Define o pino ECHO do sensor ultrassônico como entrada
pinMode(buzzer, OUTPUT); // Define o pino do buzzer como saída
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW); // Garante que o pino TRIG esteja LOW
delayMicroseconds(2); // Espera 2 microssegundos
digitalWrite(TRIG_PIN, HIGH); // Envia um pulso HIGH no pino TRIG para iniciar a medição
delayMicroseconds(10); // Aguarda 10 microssegundos
digitalWrite(TRIG_PIN, LOW); // Termina o pulso de disparo no pino TRIG
int duration = pulseIn(ECHO_PIN, HIGH); // Mede o tempo que o pino ECHO fica HIGH
return duration * 0.034 / 2; // Calcula a distância em cm com base na duração do pulso
}
void loop() {
const float BETA = 3950; // Coeficiente beta do termistor (para conversão de resistência para temperatura)
int analogValue = analogRead(A0); // Lê o valor analógico do termistor no pino A0
// Calcula a temperatura em Celsius utilizando a fórmula de um termistor (Lei de Steinhart-Hart)
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0, 0); // Posiciona o cursor na primeira linha do display LCD
lcd.print(celsius); // Exibe a temperatura em Celsius no LCD
lcd.print("C"); // Exibe o símbolo "C" para indicar que a unidade é Celsius
float distance = readDistanceCM(); // Lê a distância do sensor ultrassônico
bool isNearby = distance < 100; // Verifica se o objeto está a menos de 100 cm de distância
digitalWrite(LED_BUILTIN, isNearby); // Acende o LED integrado se a distância for menor que 100 cm
Serial.print("Measured distance: "); // Exibe no monitor serial a distância medida
Serial.println(distance);
delay(100); // Aguarda 100 ms antes de executar o próximo ciclo
tone(buzzer, 200); // Emite um som de 200 Hz no buzzer
delay(2000); // Aguarda 2 segundos
tone(buzzer, 250); // Emite um som de 250 Hz no buzzer
delay(2000); // Aguarda 2 segundos
servo1.write(0); // Move o servo para a posição 0 graus
delay(1000); // Aguarda 1 segundo
servo1.write(90); // Move o servo para a posição 90 graus
delay(1000); // Aguarda 1 segundo
servo1.write(180); // Move o servo para a posição 180 graus
delay(1000); // Aguarda 1 segundo
}