Abrindo lixeira sem as mãos


DSCF2651

Estou reformando a casa e por isso tá difícil postar aqui. Mas foi por causa da reforma que saiu esse post.

Estava comprando puxadores e vi as lixeiras que se abrem automagicamente. O.o Interessante, higiênico e caro pra $@#$@#! Mais de 100 reais uma bem feinha, cara de chinesa.

Minha esposa “Quero uma!!! Bla bla bla”. Eu “100 pilas? tá loca?! Vou fazer uma pra você!”. Ela ficou meio cética, mas foi um dos projetos mais rápidos que já fiz. 3 horas e estava tudo funcionando! Olhem o vídeo:

Dessa vez vou postar o esquema e o código fonte, para caso alguém queria fazer também. Veja a seguir!

Bom, como vocês podem ver, peguei uma lixeira já judiada. Provavelmente o pedreiro subiu nela e amassou a tampinha. Também usei um servo 9g (padrão, comprado no dealextreme) e um sonar ultrassônico.

#include <NewPing.h>
#include <Servo.h> 

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

//representa o sonar
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

//representa o servo
Servo myservo;  // create servo object to control a servo

//armazena o estado da aplicacao
int state = 0; //0= leitura, 1=lendo, 2= abrindo, 3= mantendo aberto, 4= fechando

//guardo as leituras de marcos de tempo
unsigned long firstRead;

//abre a lixeira
void openTrash () {
  myservo.write(105);
  delay(500)  ;
}

//fecha a lixeira devagar
void closeTrash () {
  int i = 105;
  for (i = 105; i< 177; i+=1) {
   myservo.write(i);
  delay(20);
  }

}

void setup()
{
    myservo.attach(14);  //analog pin 0
    Serial.begin(9600);
    myservo.write(176); //fecha a lixeira

}

void loop()
{

  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  //calcula os CMs do sonar
  unsigned int cm = uS / US_ROUNDTRIP_CM;

  //se for 0, a medida nao eh valida e jogamos para o infinito
  if (cm==0)
   cm = 1000;

 //estado 0. Leu medicao > 10 cm
 if (state == 0) {
    if (cm < 10) {
       firstRead = millis ();
       state = 1;
     }
 } else //estado 1. se continuar lendo a medicao por meio segundo, manda pro proximo estado //senao volta pro estado inicial
 if (state == 1) {
    if (cm > 10) {
       state = 0;
    } else {
       unsigned long now = millis();
       if (now - firstRead > 500) {
          state = 2;
       }
     }
 } else
 //estado 2. abre a lixeira e inicia o marco para calcular
 //o tempo de fechamento 1seg, e passa para o proximo estado
 if (state == 2) {
    openTrash ();
    firstRead = millis ();
    state = 3;
 } else
 //estado 3. Se a mao continuar a menos de 10cm, zerar o marco
 //se jah passou 1seg do marco, entao vai para o estado 4 de fechamento
 if (state == 3) {
    if (cm < 10)
    firstRead = millis ();
    unsigned long now = millis();
    if (now - firstRead > 1000) {
       state = 4;
    }
 } else
 //fecha o lixo
 if (state == 4) {
    closeTrash ();
    state = 0;
 }

}

PS: A lixeira continua feia. auhauhauhuha

UPDATE:

Nos comentários, pediram fotos da parte mecânica. Bom, simplesmente parafusei o motor de passo na lixeira usando as próprias pontas do motor (em cruz) e parafusos normais.

Parte mecânica da lixeira em detalhe

Parte mecânica da lixeira em detalhe

Anúncios

23 Comentários

Arquivado em Arduino, Eletrônica, Gadget, Geek

23 Respostas para “Abrindo lixeira sem as mãos

  1. Arduineiro

    Olá,
    Como você fez a montagem da parte mecânica? Pode colocar foto?

  2. Anderson

    tá dando esse erro:

    sketch_aug26a.ino:1:9: error: #include expects “FILENAME” or
    sketch_aug26a.ino:2:9: error: #include expects “FILENAME” or
    sketch_aug26a:9: error: ‘NewPing’ does not name a type
    sketch_aug26a:12: error: ‘Servo’ does not name a type
    sketch_aug26a.ino: In function ‘void openTrash()’:
    sketch_aug26a:22: error: ‘myservo’ was not declared in this scope
    sketch_aug26a.ino: In function ‘void closeTrash()’:
    sketch_aug26a:30: error: ‘myservo’ was not declared in this scope
    sketch_aug26a.ino: In function ‘void setup()’:
    sketch_aug26a:38: error: ‘myservo’ was not declared in this scope
    sketch_aug26a.ino: In function ‘void loop()’:
    sketch_aug26a:47: error: ‘sonar’ was not declared in this scope
    sketch_aug26a:49: error: ‘US_ROUNDTRIP_CM’ was not declared in this scope
    sketch_aug26a:59: error: ‘else’ without a previous ‘if’
    sketch_aug26a.ino: At global scope:
    sketch_aug26a:65: error: expected unqualified-id before ‘else’
    sketch_aug26a:72: error: expected unqualified-id before ‘else’

    • Estava de férias, por isso a demora em responder. É o seguinte, estão faltando bibliotecas para sua IDE do Arduino.

      A NewPing você puxa aqui: http://code.google.com/p/arduino-new-ping/ e copia para a pasta libraries dentro da pasta da IDE do Arduino. Parece que ele está reclamando também da biblioteca Servo, mas essa já vem na ultima IDE, a Arduino 1.0.5

      Espero ter ajudado.

  3. Anderson

    Valeu brother, obrigado!

  4. Alessandro Ramos Santiago

    amigo to tentando fazer funcionar este projeto mais não estou conseguido esta dando falha na biblioteca

  5. Amigo, qual é o torque do servo motor que você usou?

    Quero fazer algo parecido, mas não sei qual servo comprar.

    Valeu e parabéns pelo blog.

  6. Raul Quevedo

    Boa tarde, hoje a tarde fui tentar fazer esse seu projeto porem quando copio o seu codigo acima da alguns erros e nao é por falta de biblioteca voce poderia me ajudar ?

  7. Raul, seu código está incompleto. Faltam as bibliotecas no início.

    #include ;
    #include ;

    Também deverá ser observado que para cada tipo de servo utilizado e movimento, os passos do mesmo devem ser alterados.

  8. Bom, o wordpress suprime o sinal de maior e menor e o que mais estiver dentro.

    Nem adianta tentar colocar…

    coloque apenas :

    #include Servo.h
    #include NewPing.h

  9. Daniele

    estou tentando fazer esse projeto da lixeira , so que esta dando erro na programacao. pode me ajudar?
    ja estou com todas as bibliotecas instaladas!

      • Daniele

        sketch_nov08j.ino:1:9: error: #include expects “FILENAME” or
        sketch_nov08j.ino:2:9: error: #include expects “FILENAME” or
        sketch_nov08j:9: error: ‘NewPing’ does not name a type
        sketch_nov08j:12: error: ‘Servo’ does not name a type
        sketch_nov08j.ino: In function ‘void openTrash()’:
        sketch_nov08j:22: error: ‘myservo’ was not declared in this scope
        sketch_nov08j.ino: In function ‘void closeTrash()’:
        sketch_nov08j:30: error: ‘myservo’ was not declared in this scope
        sketch_nov08j.ino: In function ‘void setup()’:
        sketch_nov08j:38: error: ‘myservo’ was not declared in this scope
        sketch_nov08j.ino: In function ‘void loop()’:
        sketch_nov08j:47: error: ‘sonar’ was not declared in this scope
        sketch_nov08j:49: error: ‘US_ROUNDTRIP_CM’ was not declared in this scope
        sketch_nov08j:59: error: ‘else’ without a previous ‘if’
        sketch_nov08j.ino: At global scope:
        sketch_nov08j:65: error: expected unqualified-id before ‘else’
        sketch_nov08j:72: error: expected unqualified-id before ‘else’

      • Daniele

        é o mesmo que de um comentario acima . mais no meu ja tem as bibliotecas intaladas.

      • Faltaram os includes das bibliotecas no meu código. O WordPress suprimia o que estava entre os sinais de maior e menor, o que estava mexendo com a identação do código como um todo.

        Ajustei e compilei na IDE do arduino. Espero que não tenha mais problemas. (alias, avise por favor se deu certo). []s

  10. Caro amigo,não estou conseguindo fazer esse projeto,pois o fio do 5V não esta no lugar certo,podia me dizer aonde engato esse cabo.

  11. arthur rizzi

    qual o servo que usou? foi de 360 ou de 90° ….tem como me passar o link da onde comprou?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s