collapse

* Links de Robótica

* Posts Recentes

Pendentes de compras colectivas por Hugu
[Hoje às 00:51]


Preços e fabricantes de pcb por vasco
[Ontem às 23:18]


Palavras Cruzadas por LVirtual
[Ontem às 20:54]


[Projecto] Bomba Airsoft por jm_araujo
[Ontem às 19:01]


Apresentação por Tech_JA
[23 de Setembro de 2017, 09:19]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]

Autor Tópico: RGB+IR+Nokia 3310  (Lida 2292 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
RGB+IR+Nokia 3310
« em: 21 de Novembro de 2011, 19:29 »
Boas pessoal

Tenho andado a procura de um projecto que realmente fosse util para o dia a dia, depois de umas horas a pensar...

a pensar...
a pensar...
(não ainda nao pensei bem)
a pensar... a pensar... (lool)

Tive uma ideia algo interessante. Visto estar preste a mudar de casa, para uma com mais espaço e ja a pensar no futuro, resolvi pensar em personalizar a nova sala:

Com 2/3 candeeiros de parede RGB (feitos por mim)
Controlo remoto para controlar os candeeiros.


Hardware:

1- candeeiros

Os candeeiros sao constituídos por:
   - Leds Vermelhos, azuis e verdes, ou RGB (depende dos preços)
   -Transformador 230/12.
   -Breaduino para descodificar os sinais da luminosidade e cor.

2- Comando
Para o comando vou usar um nokia 3310 (adoro o classico modelo)ou pelo menos o chassi, o display e o teclado.
Vou fazer uma pcb, com os contactos para o display, teclado, e bateria, e adiciono um led ir, e um receptor ir.


Software:

1- Candeeiros
 O candeeiro recebe 11bits por ir em que , o 1º grupo de 4 é o endereço, e os restantes o valor.
 O pmw e a cor varia de 0 a 100.
 O transformador está ligado ao interruptor da iluminação da sala, ou seja, se desligado o consumo será 0.
 

2-Comando:

 Ao iniciar o comando aparecerá uma mensagem de boas vindas.
 Prime-se um numero de 1 a 9 para seleccionar o respectivo candeeiro, ou "0" para seleccionar todos.
 Ao primir "OK" liga, e ao primir novaente "OK"desliga.
 Ao utilizar as teclas para cima e para baixo, aumenta e diminui a luminusidade.
 Ao primir a tecla c, as setas mudam a cor.
 A qualquer momento pode-se primir outro numero para seleccionar outro candeeiro.
 O comando tem um interruptor que corta totalmente a alimentação.
 O comando tem um receptor ir para sincronizar os valores dos candeeiros, para imprimir no display, assim que volta a ligar.


Duvidas:

-Para ja ainda estou a pensar como vou transformar os tempos recolhidos pelo receptor IR, para linguagem binária.
- Terei que estudar a melhor maneira de ligar cerca de 15 led's a um pino do arduino, mas isso fica para depois.


Estou aberto a opiniões para melhorar e/ou ajudar na construção.
Estou também aberto a duvidas sobre o projecto.

Obrigado

Offline tiagogala

  • Mini Robot
  • *
  • Mensagens: 64
    • therandombit.wordpress.com
Re: RGB+IR+Nokia 3310
« Responder #1 em: 21 de Novembro de 2011, 19:47 »
Não era mais fácil usar um comando standard? Assim evitavas ter que andar a programar no lado do telemóvel (e mesmo aí não tens grande espaço para meter coisas lá no meio). Há bibliotecas para o arduino que já descodificam o sinal dos comandos de TV, podias por exemplo definir que quando carregavas num botão de canal de 1 a 3 estavas a seleccionar a componente da cor (RGB) para um dos candeeiros (podes usar 4 a 6 para um segundo candeeiro, etc.) e depois com Canal+ e Canal- (ou volume, conforme te der mais jeito) seleccionas o duty-cycle aplicado no PWM e com a tecla de menu desseleccionavas essa cor, assim podes ter 1000 combinações diferentes de cores para cada candeeiro!

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: RGB+IR+Nokia 3310
« Responder #2 em: 21 de Novembro de 2011, 21:39 »
Só uma coisa, se vais usar leds de 5mm, vais ter de usar uma carrada deles, provavelmente era melhor arranjar daqueles leds RGB de 3W que há na DX ou no eBay ao preço da chuva.
Pois, meter coisas dentro de um 3310 vai ser complicado a não ser que seja tudo SMD e mesmo assim não sei se consegues.
Avr fanboy

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: RGB+IR+Nokia 3310
« Responder #3 em: 21 de Novembro de 2011, 21:57 »
Pelas medida que tirei, cabe perfeitamente um "breaduino" smd e 4 pilhas aaa.

E tenho o beneficio de ter o display, que permite ver o estado das coisas.

Quanto as combinações de cores, basta adicionar mais um bit ao conjunto enviado, que me da essas combinações possiveis. o programar o comando é facil, cada tecla corresponde a um conjunto de bit's. o resto, tem que ser programado igual ao outro comando, o que muda é que no tlm posso usar os bit's que quiser,e no comando nao.

Obrigado pelas opnioes

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: RGB+IR+Nokia 3310
« Responder #4 em: 21 de Novembro de 2011, 22:09 »
Mas isso mais bit menos bit qual é a diferença?
É que basicamente selecionas o R,G ou B e envias um sinal para aumentar ou diminuir tal cor, só vejo vantagem sobre um comando de tv se quiseres enviar cores pré definidas.

Quanto ao candeeiro em si, eu usaria um TLC5940 para fazer o drive dos led's, tem fonte de corrente constante para cada canal,e  suporta até 120mA por canal, com 16 canais podes ligar 5 leds RGB's, e sobra um canal, ou se usares led's discretos podes meter 2 ou 3 leds por canal e tens uma fartura de leds, tem tambem pwm de 12 bits.
« Última modificação: 21 de Novembro de 2011, 22:10 por senso »
Avr fanboy

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: RGB+IR+Nokia 3310
« Responder #5 em: 21 de Novembro de 2011, 22:13 »
tou a pensar usar a escala de 0 -100 % para reproduzir cores desde o vermelho ao azul. tipo isso:




em cima 100% em baixo 0%

no entanto se utilizasse mais um digito ficava com mais cores possiveis.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: RGB+IR+Nokia 3310
« Responder #6 em: 21 de Novembro de 2011, 22:22 »
Não te estou a  perceber de todo...
Se só usares um sinal para mais e outro para menos, que importa se o limite são 8 bits ou 12 bits? Nada...
Para além de que não vais notar essas cores todas num led, tenho aqui uma placa que fiz para testar o TLC, mas filmar isto é quase impossivel.
Avr fanboy

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: RGB+IR+Nokia 3310
« Responder #7 em: 21 de Novembro de 2011, 22:37 »
dá uma vista de olhos no blinkM, cada módulo tem um attiny85 que controla o led rgb e recebe os comandos por I2C através, por exemplo, de um arduino

penso que seja isso que tu queres...

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: RGB+IR+Nokia 3310
« Responder #8 em: 21 de Novembro de 2011, 23:08 »
Ah, desculpa, expliquei-me mal.

Eu tava a pensar em atribuir um valor de 0 a 100 as cores pré feitas, e o comando enviava o valor e nao o comando para adicionar ou subtrair a variavel da cor.  ou seja, o comando envia "0", e fica vermelho, envia 50 e fica verde.

Mas se calhar é mesmo melhor o comando so enviar "comandos" e então o receptor fazer o resto. e assim ja nao faz diferença os bits

na quarta ja dou uma vista de olhos no tlc.

Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: RGB+IR+Nokia 3310
« Responder #9 em: 21 de Novembro de 2011, 23:51 »
Viva,

Projecto interessante, já andei para fazer algo do género, mas sem as cores só a intensidade. No outro no dia ao vaguear na Toys'R'Us (qq loja de  bricolage) vi um produto da philips que gostei (o preço nao!).

http://www.amazon.co.uk/Philips-LivingColors-Colour-Changing-Control/dp/B000VI7K4K

Tem um comando sem fios e esses focos de luz, existem de mais formatos. existe ainda a versao em que o comando só controla a intensidade de umas lampadas que tem o receptor incorporado (as lampadas sao daquelas economizadoras).

Coloquei aqui estas informações, podem dar pelo menos para tirar ideias.

Cumps, Mauro.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: RGB+IR+Nokia 3310
« Responder #10 em: 22 de Novembro de 2011, 14:34 »
Obrigado mauro.

Senso ,tive a pensar e se usar o "comando" para enviar apenas comandos tenho que o fazer actualizar com o candeeiro cada vez que carrego numa tecla, para actualizar os dados do display, por outro lado, se o comando enviar os valores de cada variavel cada vez que carrego numa tecla, ja nao necessito de actualizar o display via IR, e assim não ha probabilidades de falha a sincronizar.
Como vou desligar o comando depois de usar, ele sincroniza , pressionando uma tecla, e so depois mostra o menu.

O que achas?


Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: RGB+IR+Nokia 3310
« Responder #11 em: 27 de Novembro de 2011, 21:35 »
Boas

comecei hoje a trabalhar no receptor que vai receber directamente os valores das variaveis, em vez de receber um "comando".

O codigo que tenho para ler os tempos dos impulsos é o seguinte:

Código: [Seleccione]
#define MAXPULSE 65000// the maximum pulse we'll listen for - 65 milliseconds is a long time
#define RESOLUTION 20
// we will store up to 100 pulse pairs (this is -a lot-)
uint16_t pulses[100][2];  // pair is high and low pulse
uint8_t currentpulse = 0; // index for pulses we're storing

void setup(void) {
  Serial.begin(9600);
  Serial.println("Ready to decode IR!");
 
}
 
void loop(void) {
  uint16_t highpulse, lowpulse;  // temporary storage timing
  highpulse = lowpulse = 0; // start out with no pulse length
     while (IRpin_PIN & (1 << IRpin)) { // pin is still HIGH
 
     highpulse++; // count off another few microseconds
     delayMicroseconds(RESOLUTION);
 
     if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
       currentpulse=0;
       return;
     }
  }
  // we didn't time out so lets stash the reading
  pulses[currentpulse][0] = highpulse;
 
  // same as above
  while (! (IRpin_PIN & _BV(IRpin))) {
     // pin is still LOW
     lowpulse++;
     delayMicroseconds(RESOLUTION);
     if ((lowpulse >= MAXPULSE)  && (currentpulse != 0)) {
       currentpulse=0;
       return;
     }
  }
  pulses[currentpulse][1] = lowpulse;
 
  // we read one high-low pulse successfully, continue!
  currentpulse++;
(apaguei a função que escrevia os tempos no display)

Agora, para converter os tempos em bits acrescentei o seguinte código:

Código: [Seleccione]
if (pulses['x'] > 2000){                                   // se o "pulses" x for maior que 2000 us (o bit que inicia a sequencia tem 2,5)
 
  if((pulses['x + Y'] > 0,2) && (pulses['x + y'] <0,8)){    // o primeiro bit não interessa, se o 3 impulso for entre 0,2 e 0,8 ( 0,6 = lowbit)
    Bit['z'] = 0;}                                                              // A variavel Bit'Z' é 0
  if ((pulses['x + y'] =>1) && (pulses['x + y'] <1,9)){  // se for entre 1 e 1,9( 1,2 = HighBit)
    Bit['z'] = 1;}                                                            // Bit'z' é 1.
   
  y= y +2;                                                                    // salta 2 impulsos ( para passar o low que não interessa)
  z = z+1;}                                                                  // muda para o 2º bit
 
if ('z' > 12){                                                              // quando recolher 11Bit's muda de estado
  state = compare;}
 
x = x+1;                                                                      // analiza o proximo impulso

Mas a linha /   
Código: [Seleccione]
if (pulses['x'] > 2000){   /  contem um erro. como posso corrigir isto?

Obrigado por qualquer ajuda.
;)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: RGB+IR+Nokia 3310
« Responder #12 em: 27 de Novembro de 2011, 22:16 »
Pois, o que estão as ' ' a fazer á volta das variaveis?
É que 'x' é o mesmo que dizer que queres o caracter ASCII x que tem o valor hexadecimal 0x78 ou 120 em decimal, se queres usar variaveis tira isso.
Avr fanboy

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: RGB+IR+Nokia 3310
« Responder #13 em: 27 de Novembro de 2011, 22:24 »
Pois, o que estão as ' ' a fazer á volta das variaveis?
É que 'x' é o mesmo que dizer que queres o caracter ASCII x que tem o valor hexadecimal 0x78 ou 120 em decimal, se queres usar variaveis tira isso.

Obrigado ;)

O erro que aparece é :  ISO C++ forbids comparison between pointer and integer.


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: RGB+IR+Nokia 3310
« Responder #14 em: 27 de Novembro de 2011, 22:27 »
Tens um array bidimensional:
uint16_t pulses[100][2];

Mas estás a endereçar só a primeira parte, dai ele te dar esse erro, ou metes a segunda parte na comparação ou tiras da inicialização.
Avr fanboy