//O programa anterior é um exemplo de como utilizar um sensor de
// ultrassom, um potenciômetro, um sensor DHT11 ou DHT22 e um servo motor
// com a placa Arduino. O programa é responsável por medir a distância
// de um objeto utilizando o sensor de ultrassom e, caso haja
//uma variação na distância maior que 1 cm, o programa aciona
//o servo motor para se mover de acordo com a posição do potenciômetro.
//Além disso, o programa também lê a temperatura e umidade do ambiente
// utilizando o sensor DHT11 e exibe essas informações no monitor serial
// da placa Arduino. O programa utiliza funções da biblioteca Servo.h
//para controlar o movimento do servo motor, bem como funções da
// biblioteca DHT.h para ler os valores de temperatura e umidade.
// Na prática é necessário colocar uma resistencia no DHT entre 5k e 10k
#include <Servo.h> // Importa a biblioteca Servo
#include <DHT.h> // Importa a biblioteca DHT
#define TRIGGER_PIN 2 // Define o pino do trigger do sensor de ultrassom
#define ECHO_PIN 3 // Define o pino do echo do sensor de ultrassom
#define DHT_PIN 4 // Define o pino do sensor DHT
#define POT_PIN A0 // Define o pino do potenciômetro
#define LED_PIN 5 // Define o pino do LED
#define SERVO_PIN 9 // Define o pino do servo
Servo myservo; // Cria um objeto do tipo Servo
DHT dht(DHT_PIN, DHT22); // Cria um objeto do tipo DHT e especifica o tipo de sensor
long duration, distance, aux; // Variáveis para armazenar os valores do sensor de ultrassom
int pos = 0; // Variável para armazenar a posição do servo
int potValue = 0; // Variável para armazenar o valor do potenciômetro
void setup() {
pinMode(LED_PIN, OUTPUT); // Define o pino do LED como saída
pinMode(TRIGGER_PIN, OUTPUT); // Define o pino do trigger do sensor de ultrassom como saída
pinMode(ECHO_PIN, INPUT); // Define o pino do echo do sensor de ultrassom como entrada
myservo.attach(SERVO_PIN); // Anexa o servo ao pino especificado
dht.begin(); // Inicializa o sensor DHT
Serial.begin(9600); // Inicializa a comunicação serial a uma taxa de 9600 bauds
}
void loop() {
// Read ultrasonic sensor
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
// Read potentiometer value
potValue = analogRead(POT_PIN);
// Lê o valor do sensor de ultrassom apenas se
//houve uma variação maior que 2cm em relação
// à última leitura
if (abs(distance-aux) > 2) {
// Envia um pulso para o sensor de ultrassom
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
// Mede a duração do pulso de retorno do sensor de ultrassom
duration = pulseIn(ECHO_PIN, HIGH);
// Calcula a distância em centímetros
aux = distance;
distance = duration * 0.034 / 2;
// Lê o valor do potenciômetro
potValue = analogRead(POT_PIN);
// Lê a temperatura e a umidade do sensor DHT11
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Move o servo para a posição correspondente ao
// valor do potenciômetro
pos = map(potValue, 0, 1023, 0, 180);
myservo.write(pos);
// Imprime os valores dos sensores
Serial.print("Potentiometer: ");
Serial.println(potValue);
Serial.print("Ultrasonic Sensor: ");
Serial.print(distance);
Serial.println(" cm");
Serial.print("DHT11 Sensor - Temperature: ");
Serial.print(temperature);
Serial.print(" °C - Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
}