Construindo um contador de pessoas com Raspberry Pi e Ubidots

Os contadores de pessoas são usados ​​principalmente no setor varejista para obter informações mais precisas sobre o comportamento dos consumidores. Eles também são encontrados em aplicações de segurança, gestão de eventos e cidades inteligentes. Imagine que você gerencia um grande shopping: esses contadores permitem saber quantas pessoas entram e saem, quais caminhos percorrem, onde param e, o mais importante, quando tudo isso acontece.
Assim como a maioria dos sensores, os contadores de pessoas já existem há algum tempo. No entanto, seus dados nem sempre são centralizados e conectados aos sistemas corporativos para embasar a tomada de decisões.
Neste artigo, apresentaremos um contador de pessoas muito básico, feito em casa, e transmitiremos seus dados para a nuvem Ubidots , onde poderão ser geradas análises mais precisas.
Construí isto um dia antes de uma demonstração no [Boston New Tech Meetup](http://www.youtube.com/watch?v=cSbjFs7XOQs) na semana passada, então posso dizer que foi um projeto "faça você mesmo" rápido e de baixo custo!
# **O que é Ubidots?**

# [**Cadastre-se gratuitamente**](ubidots)

Ubidots é um serviço em nuvem que permite armazenar e analisar dados de sensores em tempo real . Ele possibilita a criação de aplicações para a Internet das Coisas, sem a edge em programação web, bancos de dados ou APIs.

## **O que você vai precisar**

Raspberry Pi Modelo B:

– Uma pequena bateria externa, com seu cabo micro-USB:

– Adaptador USB Wi-Fi:

 Sensor de movimento da Parallax:

– 3 fios fêmea-fêmea
– Uma caixa pequena para acomodar todos os componentes
## **Fiação e Revestimento**
Como você pode ver, o sensor de movimento tem apenas três pinos: V+, GND e um terceiro que emite o sinal: “1” quando há movimento e “0” quando não há. Não é necessário soldar nada, nem escrever funções I2C ou seriais para detectar esse sinal; basta conectar os cabos diretamente aos pinos GPIO do seu Raspberry Pi
 ![contador de pessoas](http://media.tumblr.com/b47fa377202358ca34ca4b883ed90e2e/tumblr_inline_mtlkq6C4oX1s0d61y.png)
Eis como ficou:

ATUALIZAÇÃO: Seguindo uma sugestão de Doug Jefferies (Obrigado!), os GPIOs do Raspberry Pi são projetados para 3,3 V, mas estamos aplicando 5 V neles. Portanto, é melhor conectar:

V+ –> Pino nº 1 (3,3 V).

Como o sensor é muito sensível ao movimento, usei o jumper na parte traseira para definir a sensibilidade mais baixa. Além disso, coloquei-o em uma caixa escura com uma pequena abertura, para que a detecção de movimento se concentrasse em um ponto específico em vez de ser omnidirecional

Codificação

Neste ponto, vamos assumir que você já configurou o básico do seu Raspberry Pi e está visualizando a linha de comando do Linux. Caso contrário, recomendamos [consultar este guia primeiro](ubidots). Você também pode consultar [este post sobre a configuração de Wi-Fi no Raspberry Pi](/setup-wifi-on-raspberry-pi-using-wicd)
Vamos garantir que temos todas as bibliotecas:
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install python-setuptools $ sudo easy_install pip $ pip install ubidots

Crie um novo arquivo chamado “peoplecounter.py”:

$ sudo nano peoplecounter.py

E insira o seguinte código. Certifique-se de substituir os valores da chave da API e do ID da variável pelos valores da sua conta pessoal Ubidots .

(Observação: o código não é muito elegante, mas, ei, eu não sou um desenvolvedor Python, apenas um cara do hardware 🙂)

from ubidots import ApiClient import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(7, GPIO.IN) try: api = ApiClient("a21ebaf64e14d195c0044fcc3b9f6dab9d653af3") people = api.get_variable("5238cec3f91b282c7357a140") except: print "Não foi possível conectar à API, verifique sua conexão com a Internet" counter = 0 peoplecount = 0 while(1): presence = GPIO.input(7) if(presence): peoplecount += 1 presence = 0 time.sleep(1.5) time.sleep(1) counter += 1 if(counter==10): print peoplecount people.save_value({'value':peoplecount}) counter = 0 peoplecount = 0

O script consiste em um loop que verifica o estado do pino #7 (o sensor de movimento). Se a leitura for "1", indicando que houve movimento, o script incrementa a variável "peoplecount" e aguarda 1,5 segundos para que o sensor de movimento retorne ao estado normal. Esse processo é repetido 10 vezes, com um intervalo mínimo de 1 segundo entre cada ciclo. Em seguida, o script envia a soma total de "movimentos" para o Ubidots. Caso seja necessário calibrar o contador de pessoas, você pode ajustar os valores das linhas "time.sleep".
Quando o script terminar, você estará pronto para executá-lo a partir do console:
 

$ python peoplecounter.py

É isso! Eis como os dados brutos se apresentaram no meu caso:
![imagem](http://media.tumblr.com/a3b6312a2a69679f5b9c71ce3246b141/tumblr_inline_mtlpgceZIm1s0d61y.jpg)

Agora que os dados estão na nuvem, você pode adicionar widgets ao seu dashboard para exibir a atividade em tempo real. Você também pode configurar "Eventos" na sua conta Ubidots para receber uma notificação por SMS ou e-mail quando sua variável atingir um limite específico.

Conclusão

Este projeto fornece uma estimativa do número de pessoas que passam por um determinado ponto. Ele não fornece o número exato de pessoas, devido às limitações do sensor de movimento, mas em algumas aplicações, isso pode ser suficiente.

Contadores de pessoas mais sofisticados usam câmeras e algoritmos de processamento de imagem para detectar o que é o objeto em movimento (pessoa, carro, animal de estimação...), em que direção ele se move (para dentro/para fora, para a esquerda/para a direita) e poderiam até ser ampliados, em teoria, para saber a idade e o sexo da pessoa.

Outra forma de detectar pessoas seria captar passivamente os sinais de rádio dos seus smartphones, como Wi-Fi ou Bluetooth ( veja como este indivíduo detectou smartphones ao redor da sua casa ). Em última análise, a iBeacon também deverá ser um grande facilitador dessas aplicações.

Em qualquer caso, os dados coletados podem ser facilmente enviados para o Ubidots , onde podem ser interpretados através da criação de alertas, dashboards em tempo real ou integração com outros sistemas.

Você tem ideias para projetos com sensores?

Crie uma conta Ubidots e faça acontecer!