Projeto: Porta inteligente com Arduino

Como prometido no post passado hoje vou mostrar um projeto em que o objetivo é: Construir um prototipo de uma porta ou portão inteligente usando sensor ultrasonico, servo motor e um led. A principio o projeto é simples, e pode ser aplicado em rotinas diárias onde é necessário algum tipo de automação e/ou inteligência em ambientes como casas, lojas etc.

Bem, onde e como se encaixam os componentes do projeto: O sensor ultrasonico verifica a distancia de uma pessoa até a porta ou portão, se essa distancia for igual a um determinado valor o servo motor é acionado fazendo com que a porta se abra e logo após liga o led, então espera-se um determinado tempo para que a pessoa possa entrar ou sair do ambiente e novamente é verificado a distancia, caso a distancia seja maior que o valor estipulado o servo motor é acionado novamente fechando a porta e o led (luz) apaga. Simples não?!

Entendido o objetivo do projeto, vamos ao que interessa. Veja o esquema eletrico (hardware) do projeto:

Vamos a uma breve explicação sobre esse esquema:

SERVO MOTOR
O servo motor tem 3 fios: um de cor preta (terra) que deve ser ligado ao pino terra do arduino (GND). Um fio vermelho (corrente) que deve ser ligado ao pino 5 volts do arduino. E um fio amarelo (dados) que deve ser ligado ao pino digital 9 do arduino.

SENSOR ULTRASONICO
O sensor ultrasonico tem 4 pinos: VCC, Trig, Echo e  GND. O pino VCC deve ser ligado ao pino 5 volt do arduino. O pino Trig deve ser ligado ao pino digital 12 do arduino. O pino Echo deve ser ligado ao pino digital 13 do arduino. O pino GND deve ser ligado ao pino terra do arduino.

LED
O led tem dois pinos onde um é maior que o outro. No esquema acima o pino maior (corrente) é ligado a um resistor para regular a tensão que vem do pino digital 10 do arduino. O pino menor (terra) é ligado ao GND (terra) do arduino.

Não vou explicar o código nessa pagina por questões de estética do código e para que fique melhor a visualização, mas ao final do post tem um link para o download de todo o projeto incluindo o código explicado linha a linha.

/*******************************
Autor: Fernando Krein Pinheiro
Data: 26/05/2011
Linguagem: C/C++ (Arduino)
======== IMPORTANTE ============
O código esta livre para usar,
citar e compartilhar desde que
mantida sua fonte e seu autor.
Obrigado.
********************************
Codigo baseado nos originais de:
Blink: by David Cuartielles
Knob: by Michal Rinott
Sweep: by BARRAGAN
*******************************/
#include <Ultrasonic.h>
#include <Servo.h>
#define echoPin 13
#define trigPin 12

Servo servo_objeto;
Ultrasonic ultrasonic(12,13);

int posicao_inicial_servo = 0;
int ledPin =  10;
/*-----------------------------------------*/
void setup()
{
  Serial.begin(9600);
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  servo_objeto.attach(9);

}
/*-----------------------------------------*/
void loop()
{
   digitalWrite(ledPin, LOW);
   servo_objeto.write(posicao_inicial_servo);
   int valor = func_distancia_ultrasonico();
    if(valor <=15)
    {
        func_controladora();
        delay(5000);
    }

  delay(500);
}
/*----------------------------------------*/
void func_controladora()
{
   func_liga_led();
   func_chama_servo();
}
/*----------------------------------------*/
void func_liga_led()
{
  digitalWrite(ledPin, HIGH);
}
/*----------------------------------------*/
void func_chama_servo()
{
  int posicao_final_servo = 90;
  servo_objeto.write(posicao_final_servo);
}
/*----------------------------------------*/
int func_distancia_ultrasonico()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);
  int distancia = (ultrasonic.Ranging(CM));
  Serial.print("Distancia em CM: ");
  Serial.println(distancia);
  return distancia;
}
/*------------------------------------------*/

Confira os testes iniciais:

Confira os testes finais e montado em uma maquete. Devo me desculpar pela qualidade do video e ainda mais da maquete que foi feita as pressas com uma caixa de sapatos e fita adesiva. Mas mesmo assim da para ser ter a ideia de como funciona.

Faça o download do projeto AQUI. (Inclui código comentado, esquema de hardware e imagens).

22 comentários em “Projeto: Porta inteligente com Arduino

  1. Achei bem legal e simples o tutorial, porém, me deparei com 2 problemas: 1° não tenho o arduino, quanto custa? qual melhor lugar para comprar? qual comprar? resumindo recomendações se possível; 2° Eu não sei praticamente nada de eletrônica estou começando a a me interessar agora, gostaria de recomendações nesse assunto também, um material introdutório. Obrigado R(A)Sk8.

  2. Cara nao tenho palavras para descrever quao nobre é sua iniciativa de fazer um blog tao bem explicado, vc ajuda muitos amantes do arduino, parabens por todos os projetos e continue assim generoso e paciente compartilhando conhecimentos, vou estar sempre aqui a espera de projetos novos, abraços.

  3. po cara to me inteirando agora no asunto arduino mas adorei seu prototipo apesar de eu ser eletricista nao manjo muito de eletronica mas to me ajustando por a eletrica em si vai caminhando cada vez mais para eletronica ,isso é o futuro nao tao longe hoje um prototipo amahan uma uma revoluçao, valeu camarada pela sua capacidade de saber repassar o que sabe.

    • não precisa, o servo pode ser parafusado proximo a dobradiça da porta, daí vc pra dar amplitude numa das aletas do servo parafusa uma haste maior, o servo tem naturalmente esse movimento de abre/fecha por que ele tem umas aletas no lugar de um eixo rotatorio simples… já vi projetos de abrir lixeira com servo e sensor de distancia que o professor so parafusou o servo na tampa da lixeira.

  4. Olá amigo, primeiramente, obrigado pela postagem!
    Gostaria de saber qual outro sensor poderia ser usado em lugar deste “SENSOR ULTRASONICO”, visto o mesmo ser de um tamanho um pouco grande. Desejo aproveitar este projeto para fazer, por exemplo, uma “lixeira eletrônica” – obrigado

  5. Procurei maiores informações para o mecanismo da porta e não encontrei.
    Uma sugestão seria incluir uma lista com todo o material utilizado no projeto.
    Gostaria muito de uma orientação para uma alteração, onde o input seja dado não com sensores de proximidade, mas com um temporizador.
    Muito boa a iniciativa.
    Obrigado

  6. Olá Boa tarde gostei demais do seu projeto só que coloco pra testar o programa ele me da uma mensagem de erro em
    int distância = (ultrasonic.Ranging (CM) ;
    A mensagem diz o seguinte
    clas Ultrasonic has no member named Ranging.
    Ficaria grato pela ajuda

  7. olá, parabens pelo trabalho.
    queria reproduzir seu projeto porém o código esta dando erro na linha 77.a seguinte mensagem é exibida:

    exit status 1
    ‘class Ultrasonic’ has no member named ‘Ranging’
    poderia me ajudar?

  8. olá amigo está dando erro nesta linha
    int distancia = (ultrasonic.Ranging(CM));
    o que pode ser?

  9. Professor, ta dando um bug no codigo na linha de definição das variaveis, mais precisamente no servo, tentei ler exatamente do jeito que vc colocou aqui no tinkercad mas da um erro, desculpe qualquer coisa, sou estudante ainda, peguei seu projeto pra treinar em casa enquanto nao volta as aulas na escola.

Deixe um comentário