Geek-Press Geeky Blog about software development

18Nov/120

Codebits VI e o projecto PNSCodebits VI and the project PNS

Mais um codebits se passou!

Mais um ano cheio de coisas boas, boas talks, bons projetos, bons brindes.....

Este ano trouxe comigo o André Gil, Claudia Frutuoso e o Gonçalo Basto para fazer um projeto engraçado.

O Projeto chama-se PNS - Personal Notification System.

O conceito é simples, um device que pode ser adicionado a qualquer peça de vestuário ou acessório que permite uma ponte de comunicação entre o utilizador e o seu telemóvel via bluetooth.

Este device permite então interagir com o telemóvel sem ter de o retirar do bolso, o que pode ser útil durante a nossa sessão de jogging, uma reunião enquanto conduzimos ou até mesmo numa situação em que expor o nosso telemóvel em publico pode não ser a nossa intenção.

 

Desse modo podemos programar padrões em leds RGB que nos permitem identificar o que estamos a receber no nosso telemóvel: por exemplo um twitt, um post no facebook dirigido a nos, um SMS, uma chamada de uma determinada pessoa. Podemos também programar cada botão para executar uma ação no telemóvel. Assim podemos, rejeitar ou encaminhar uma chamada, enviar uma mensagem de volta a quem nos ligou a dizer que não podemos atender de momento, enviar um twitt ou post no foursquare com a nossa localização geográfica, podemos até programar um botão para verificar o estado do tempo na internet e mostrar numa sequencia de leds como estará o tempo.

O limite entre as coisas podemos fazer com este dispositivo e um smartphone é a imaginação.

Para que este serviço possa ser usado tanto por utilizadores avançados como basicos, por trás deve existir um pagina de uma comunidade de utilizadores onde seria possível colocar code snippets onde o utilizador pode fazer download desses snippets para o telemóvel e depois assigna-los ao nosso dispositivo.

Para a realização deste projeto usamos um telemóvel android, um arduino Uno, um modulo bluetooth e uma webapp feita com Ink.

Como é óbvio um dispositivo com estas características tem de ser pequeno e de fácil modularização e a versão final do nosso prototipo era tudo menos pequeno mas funcional!

Se estiverem interessados em saber mais acerca deste projeto não hesitem em contactar-me 🙂

 

Another Codebits happened!

Another year full of good things, good talks, good projects, good gifts .....

This year brought me André Gil, Claudia Frutuoso and Gonçalo Basto to make a funny project.

The project is called PNS - Personal Notification System.

The concept is simple, a device that can be added to any garment or accessory that allows a communication bridge between the user and your mobile phone via bluetooth.

This device allows you to interact with your phone without removing it from your pocket, which can be helpful during our jogging session, a meeting, while driving or even in a situation where expose our phone in public is not our intention.

Thus we can set patterns for RGB LEDs that allow us to identify what we are receiving in our mobile phone:  for example a twit, a post on facebook directed at us, a SMS, a call from a certain person. We can also program each button to perform an action on your phone. We can reject or forward a call, send a message back to whoever called us to say that we can't currently talk, send a twitt or foursquare  post with our geographical location, we can even program a button to check the status of the weather on the internet and show a sequence of LEDs as the weather will be.

The boundary between the things we can do with this device and a smartphone is your imagination.

This device can be used by both advanced or basic users,  there is a page like a user community where you could add your code snippets where you can  share to the others or download them to your phone and then assign them to our device .

To carry out this project we used a android phone, an Arduino Uno and a bluetooth module as well as a webapp created using Ink.

Obviously a device with these features has to be small and easy to customize and the final version of our prototype was anything but small although functional!

19Jun/120

Arduino + WebCam = VolumetriaArduino + WebCam = Volumetry

Um dos projectos que tenho trabalhado ocasionalmente nos ultimos meses foi arranjar maneira de medir volumes com material "low-cost"!

Pensei no desafio e comecei a meter mãos ao trabalho e consegui resultados surpreendentes a usar um webcam comum e um arduino com um sensor.

Para começar vamos falar do hardware:

- Arduino + Sharp Distance Sensor GP2Y0A02 (20-150cm)  : Devo dizer que pensei que era o mais simples mas falhei redondamente.

Para conseguir resultados aceitaveis (cerca de 1 centimetro de desvio em distancias perto do limite do sensor) tive de seguir um conjunto de procedimentos manhosos isto porque o sensor tende a retornar montes de ruido e assim não temos resultados precisos.

Primeiro faço 10 leituras do valor e determino a media, seguindamente determinamos o limite superior e inferior de valores a partir desta primeira media, exluimos os valores que ultrapassam este valor capturamos mais uns 10 valores e fazemos a media de tudo.

Devo dizer que isto resultou muito bem

 

float GetAverage(float * _values, uint8_t size)
{
	float avg = 0;
	for(int i = 0; i< size; i++)
	{
		avg += _values[i];
	}
	avg = avg / size;
 
	float setMax = avg * 1.15;
	float setMin = avg * 0.85;
	float precisionAvg;
	int counter = 0;
	for(int i = 0; i < size; i++)
	{
		if((setMin < _values[i]) && (_values[i] < setMax))
		{
			precisionAvg += _values[i];
			counter++;
		}
	}
	return precisionAvg / counter;
}

Para conseguir volumetria usei a biblioteca Emgu e uns quantos filtros para conseguir encontrar os contornos do objecto com base numa mascara. Ou seja temos de ter uma mascara do ambiente de fundo para poder fazer a exclusão do que ja la estava e ficarmos apenas com o novo objecto na imagem. Usamos uns quantos truques de image processing, uns calculos trigonometricos e voilá aqui esta o resultado

 One of the projects I have worked occasionally in recent months was finding a way to measure materials volumes with "low-cost"!

I thought about the challenge and started to get down to work and got amazing results using an ordinary webcam and a sensor with an Arduino.

To begin with let's talk about hardware:

- Arduino + Distance Sensor Sharp GP2Y0A02 (20-150cm): I must say I thought it was the easiest but failed miserably.

To achieve acceptable results (about 1 cm of deviation in distances near the limit of the sensor) I have had to follow a set of procedures that's tricky because the sensor tends to return lots of noise and so we do not have accurate results.

First I do 10 readings and determine the average value, then determine the upper and lower limit values ​​from this first average, capture another 10 and make the average ​​of all the values.

I must say it worked really well

float GetAverage(float * _values, uint8_t size)
{
	float avg = 0;
	for(int i = 0; i< size; i++)
	{
		avg += _values[i];
	}
	avg = avg / size;
 
	float setMax = avg * 1.15;
	float setMin = avg * 0.85;
	float precisionAvg;
	int counter = 0;
	for(int i = 0; i < size; i++)
	{
		if((setMin < _values[i]) && (_values[i] < setMax))
		{
			precisionAvg += _values[i];
			counter++;
		}
	}
	return precisionAvg / counter;
}

To achieve volumetric measuring I used Emgu library and a few filters  to find the contours of the object based on a mask. In other words we must have a mask from the background in order to make the exclusion of what it already was there and just stay with the new object in the image. We use a few tricks of image processing, some trigonometric calculations and voila here is the result