Usando o Kinect para apagar a luz. Automação + KinectHack

UPDATE: controlando a intensidade da luz com o Kinect http://wp.me/p1pSXR-2I

Estou sumido do blog hein (como se alguem sentisse falta, kkkk). Tive alguns problemas de saude (enxaqueca + stress) que me afastaram um pouco dos meus projetos mas agora estou retomando as coisas, muito mais relax.

E dando continuidade ao meu projeto de automação domestica, eu acabei de terminar a primeira versão (mais cheia de bugs que o windows millenium) do programa que liga e desliga a luz do meu escritório usando o Kinect.

Segue um video da bagaça funcionando (mira la camiseta no video… VAI CURINTIA!!!):

Em poucas palavras, o que eu fiz:

  • Desenhei a planta do meu apto em um mundo 3D*.
  • Capturei o plano de profundidade do kinect
  • Alinhei o plano na posição correta (fazendo os devidos ajustes de abertura de câmera do kinect)
  • Adicionei uma entidade que representa a lampada no mundo 3D*.
  • Obtive os esqueletos das pessoas “trackeadas” pelo Kinect
  • Estendi alguns vetores do braço do esqueleto
  • Fiz um controle pra quando esses vetores atingissem a lampada, que gerasse um evento (só se apontar por 400ms)
  • Com o evento de seleção da lampada, usei meu Framework de automação para enviar os comandos corretos para a unidade de processamento junto ao interruptor, via radio.
*comentário sobre “mundo 3D” (ou sobre o uso de computação gráfica 3D):  como eu gosto de mexer com computação grafica 3D em tempo real!!! Como disse um dos pais da computação grafica:
I see a computer display as a window on Alice’s Wonderland in which a programmer can depict either objects that obey well-known natural laws or purely imaginary objects that follow laws he has written into his program
Ivan Sutherland, Scientific American, 1970 ( 1970 O.o )

Fiz isso mais por fazer, como um desafio, pq ainda não me parece a interface ideal, prática, para controlar a casa. Acho que a interface ideal é a voz, mais mexer com voz, principalmente português, não é facil (se alguem quiser fazer, o pessoal da faculdade federal do Pará tem material sobre o assunto de voz – http://www.laps.ufpa.br/falabrasil/ ). Porem, se fosse robusto, talvez ajudassem pessoas com  alguma deficiencia ou dificuldade de locomoção a fazer simples tarefas, como ligar uma luz, uma tv, de forma mais descomplicada, sem se mover até o interruptor por exemplo.

Se você quiser ver os outros progressos do projetinho, tem mais dois tópicos recheados de videos sobre algumas funcionalidades do sistema:

Abaixo algumas fotenhas do desenvolvimento do programa:

Primeiro teste com o Kinect + Java. Utilizei como exemplo o código do Arnies Tracker -> http://fivedots.coe.psu.ac.th/~ad/jg/nui15/

Testes iniciais. O plano de profundidade do Kinect não esta ajustado pela abertura de câmera (veja a diferença nas próximas fotos) e o esqueleto não estava alinhado com o plano/comodo.

Veja o plano ajustado pelo angulo de abertura da camera. Se você reparar na imagem anterior, vai ver que os cantos estão deformados. Nessa foto, a luz já estava representada por esse quadrado flutuante.

Meus esqueletinho Wolverine. Aumentei os bracinhos para ele alcançar a luz. (na verdade, usei varias retas para aumentar as chances de atingir a luz, mas elas são retas infinitas.. só estão renderizadas para exemplificar o funcionamento)

Só uma palavra para descrever isso. GAMBI! Esse é o modulo que controla a luz do escritório. O que tem dentro é segredo comercial (começa com AR e termina com DUINO)

Se alguém tiver alguma duvida sobre o negócio, pode postar um comentário que minha secretária selecionará as melhores duvidas, pois esse é um blog muito acessado (cof cof) e eu ganho muito dinheiro com ele (vejam os anuncios invisiveis!!! mensagem subliminar manolos)!

PS: Eu tenho um Kinect, mas não tenho um Xbox. Nada contra, é que como detentor de uma coleção da Nintendo, tenho que manter minha honra. Alias, próximo bost vai ser sobre a coleciones (como prometido, post sobre a coleção da Nintendo -> http://wp.me/p1pSXR-2M) .

Anúncios

19 Comentários

Arquivado em 3D, Arduino, Automação Doméstica, Computação Gráfica, Desenvolvimento, Detecção de Movimento, Eletrônica, Geek

19 Respostas para “Usando o Kinect para apagar a luz. Automação + KinectHack

  1. Bozoh

    Porra, Fábio! A camiseta do curíntia estragou o vídeo! AHuHAuHA
    Mas achei bem massa… vc tinha que fazer para aumentar e diminuir o volume da tv… aí sim ia ser fmz

    • Fala Bozoh! Valeu!!! Po, a camiseta do curíntia é a peça fundamental, sem ela o esquema não funciona. KKKK

      Sobre a TV, acho que esse fim de semana eu termino um esquema de mudar canal e volume pela TV com o Kinect.

  2. Rafael

    Parabéns pelo projeto , muito legal. Eu tô começando a utilizar o Arduino, também estou querendo fazer um projeto de automação, tenho algumas dúvidas, você fará um grande favor, se puder me ajudar. A primeira dúvida que tenho é como controlar uma lâmpada com o Arduino mantendo os interruptores funcionando, quero poder ligar a lâmpada pelo interruptor e desligá-la pelo Arduino, ou vice-versa, é possível ? Outra dúvida é quanto a comunicação sem fio o que você utilizou, ZigBee ?

    • Fala Rafael, tudo bem?

      Acho que para você manter os interruptores, vc tem que tratar os interruptores no arduino, ler seus estados e fazer a lógica a contento. o problema eh se o arduino queimar. sobre a rede, não uso o zigbee, uso um placa de radio da Nordic.

      Espero ter ajudado

      Fábio

  3. Rose Rocha

    olá fábio,
    gostei muito do seu trabalho , bem legal!
    Mas tem a possibilidade de fazer comunicação serial kinect+ Arduíno neste projeto?

    • Olha, você precisa de um computador ai no meio, para fazer o meio de campo entre o arduino e o Kinect. Existem vários motivos para isso, ao meu ver (mesmo que houvesse a possibilidade de ligar o kinect direto no arduino): a quantidade de dados e a velocidade que o kinect manda para o pc as informações da câmera e de profundidade; a complexidade dos algoritmos para inferir e reconstruir os esqueletos das pessoas; etc.

      Eu comprei um Rapsberry PI para tentar fazer esse meio de campo, mas preciso ver se existe um driver de kinect para Linux e que rode em arquitetura ARM.

  4. Aaron

    Hi,
    I don’t speek your language so I hope you understand English 🙂
    I really like your way of using the kinect with this.
    I am looking at using z-wave for my home automation but I was looking for a good person detector, that is why I found the kinect and now you and your project.
    Is it possible for you to share your code? I am no programmer but I would like to see how it works.

    thanks in advance,
    Aaron

    • Hi,

      I’m really pleased that you liked my project!

      I don’t share my code very often by many reasons. But there is no secret about what I’ve done there. I’ve used the example from http://fivedots.coe.psu.ac.th/~ad/jg/nui15/ to detect my skeleton. Then, I’ve syncronized the skeleton and the depth information in a representation of my house in 3D. Finally, I traced a ray from my arms that selects things in the 3D space, such as my TV, Lights, etc. Once selected, I just sent the commands to the selected device throught my home automation framework, built using arduino and radio network.

      Hope I’ve helped.

      Fábio

      • Aaron

        Hi Fabio,
        Yes you have helped and I understand that you don’t want to share your hard work.
        I am going to have a look and see how far I can come.

        Thanks,
        Aaron

  5. Allan

    Boa noite fabio, gostaria de saber qual é seu kinect, estou querendo fazer minha monografia usando kinect para acionar equipamentos, no caso tive procurando para comprar porem tem varios tipos, sensor microsoft,kinect adventures.
    Grato
    Allan

    • Opa! Olha, eu usei o kinect para xbox. Parece que tem um agora para windows tb, que teve algumas melhorias inclusive na detecção a curtas distancias. Porem, não usei o SDK da Microsoft, usei o driver feito pela comunidade e, na época, só existia o Kinect para Xbox. O meu Kinect veio com o jogo Kinect Adventures, que está mofando aqui pq não tenho xbox ;-). Espero ter ajudado, Fábio

      • Allan

        Valew ajudou sim,e o computador precisa ter um bom desempenho? Estou com um notebook positivo (sim +) horroroso ai estou fazendo uma lista do que comprar,acha que devo comprar outro para rodar os programas e fazer o controle?

      • Acho que seu note é ok. Faz o seguinte, ve se consegue um kinect emprestado com algum amigo, usa algum programa de teste e vê se dá certo.

  6. Allan

    Boa noite fabio,comecei a comprar as coisas e pensar na minha monografia como havia dito, quanto a comunicaçao,como que o sinal é enviado para a placa de radio da Nordic. No caso eu conheço zigbee e para eu conseguir fazer a comunicaçao de envio de dados eu precisaria de 2 zigbees um para mandar o pacote de informaçao e o q recebe.No caso dessa placa de radio nao sei como funciona pode dar uma ajuda?Essa placa é facil de mexer?

  7. Allan

    AA outra pergunta,esse mundo 3D roda em windows?

  8. Ilton Michel

    E ai Fabio.
    Curti dmais o video.
    Quero saber mais detalhes do projeto, achei muito interessante e estou estudando o assunto. Estou muito perdido! Não sei por onde começar.
    Pode me dar uma força???

    • Primeiro, você precisa quebrar o problema em partes e atacar uma a uma. No fim, você junta tudo o que aprendeu em um projeto único.

      Qual seu principal interesse? Mexer com o Kinect? Eletrônica? Computação Gráfica?

      Priorizando as áreas, você pode atacar uma a uma. A mais simples dessas três é Eletrônica com Arduino. Você pode começar ligando e desligando um led. Depois, ligando e desligando um relay (que funciona como se fosse uma tomada, de um lado o interruptor funciona com 5V, mas liga 110v). Com isso, você já consegue ligar uma lâmpada pelo arduino. Próximo passo, fazer como que o computador se comunique com o Arduino através de comunicação serial, para o computador ligar e desligar a luz. Nesse ponto, você já pode acoplar o que você quiser ao seu sistema, um servidor web para ligar e desligar a luz pela internet, um sistema com kinect para dizer se liga e desliga, um servidor que escuta comandos vindo do celular, a aplicação que você quiser.

      Fechou a eletrônica, passe a brincar com o Kinect. E assim por diante.

  9. Yan Fróes

    Bom dia Fábio, estou com um projeto parecido, poderia me explicar um pouco mais sobre como fez esse “mundo 3D” e qual programa usou? Desde já obrigado!

    • “mundo 3D” é uma expressão que usei para exemplificar o uso de computação gráfica 3D para visualizar problemas computacionais (ou jogos, ou filmes, etc). Quanto ao programa que usei, na verdade, eu programei a criação dos polígonos 3D que representam a planta de casa. Eu usei a API Opengl, que é uma biblioteca que produz gráficos acelerados em 3D junto as placas gráficas. O legal do Opengl é que ele tem uma API em javascript, a webGL. Programar em javascript é bem mais simples (e consequentemente + rápido) do que programar em java e C++.Fiz meu site http://www.heycontrol.me usando webGL. Se você estiver na faculdade, eu sugeriria que você puxasse a disciplina de “Computação Gráfica”, vai esclarecer bastante coisa. [ ]s .

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