top of page

Heartband

  • Com G
  • 21 de jul. de 2015
  • 7 min de leitura

Olá!

Neste post, vamos falar sobre o nosso segundo projeto, a Heartband!

Este é bem mais complexo que a T-shirt Iron Man, mas nada impossível de fazer! Foi inspirado num vídeo que assisti da Adafruit, porém não tínhamos o sensor de batimentos cardíacos, então criamos apenas os efeitos dos leds.

Ah, os leds são verdes porque era o que tinha sobrando rsrsrs. Pode ser qualquer cor, inclusive vermelhos (seriam os ideais rs).

Aqui não utilizamos uma placa Arduino propriamente dita, mas sim o ‘cérebro’ do Arduino, o microcontrolador ATmega 328. Com ele e alguns componentes, podemos montar um Arduino no protoboard! Lógico que sem regulador de tensão, porta USB e outras coisas que as placas possuem, mas o essencial da placa, que é a execução de tarefas escritas nos sketchs.

Vamos para os materiais:

- 1 kit Arduino Standalone (ATmega 328, soquete, 2 capacitores 103, cristal, resistor 10k, push bottom)

- 1 placa perfurada grande;

- 1 lupa com garras (não é essencial, mas é interessante pra soldar);

- 27 leds verdes 5mm (pode ser outra cor, inclusive vermelhos rs);

- ferro de solda e solda (estanho);

- dois tecidos de cores diferentes;

- agulha e/ou máquina de costura;

- elástico para tecido;

- fios flexíveis finos coloridos (podem ser de cabo DB10 ou DB25);

- resistores 330Ω;

- régua e riscador de placa (ou serra);

- bateria recarregável (entre 3,3V e 5V);

- protoboard;

- jumpers macho-macho;

- chave switch pequena;

- 1 Arduino Uno;

Concepção do projeto

Para entender o funcionamento da Heartband, primeiro é preciso entender alguns conceitos sobre o Arduino e matrizes:

Um Arduino comum (Uno, por exemplo) possui 14 portas de entrada/saída digitais e 6 portas de entrada analógicas. Porém duas das 14 portas digitais (0 e 1) estão responsáveis pela comunicação do Arduino, os chamados TX e RX, por isso não podem ser utilizadas.

Então temos 12 portas digitais + 6 portas analógicas = 18 portas disponíveis para projeto. Só que não sei se repararam, mas temos 27 leds para ligar! Rsrsrsrs então...como fazer?

Lendo um livro sobre Wearables, e um projeto que não tem nada a ver com a Heartband, vimos um conceito que foi essencial para acender os 27 leds individualmente, com poucas portas. Usei um conceito matricial. Bem, vamos usar um exemplo do livro:

Matriz 2x2 (Fonte: Arduino Wearables, Olsson)

Matriz 2x2 (Fonte: Arduino Wearables, Olsson)

Interligamos os anodos (terminais maiores +) em linha e os catodos (terminais menores, com chanfro, -) em colunas.

Chamamos as colunas de GND1 e GND2, e as linhas de VCC1 e VCC2. Conectamos em 4 portas digitais de um Arduino Uno. No sketch, declaramos todos os pinos como saída, e colocamos os pinos referentes ao GND em nível lógico 1.

Depois, fazemos um ‘jogo’ com a matriz. Para acender um a um, colocamos o nível da linha VCC em 1 e da linha GND em zero. Para apagar, é só por a linha do GND em nível lógico 1 novamente. Isto porque, se você põe a linha e a coluna em nível 1, não há diferença de potencial, e o led não acende (confesso que demorei um pouco pra entender isso).

Este caso é uma matriz 2x2. Na nossa bandana, temos 27 leds, dispostos em 6 linhas e 7 colunas. Usamos este princípio. Porém, há várias possibilidades de montar diversas coisas com isto.

Fizemos em protoboard com uma matriz 3x3, conforme figura a seguir:

Na figura, podemos ver as conexões das linhas e colunas com jumpers coloridos, procuramos usar as mesmas cores pra saber quando se tratava de linha ou coluna. Usamos um Arduino Pró mini, mas poderia ter sido qualquer outro modelo.

Depois inserimos a quantidade de leds que usamos no projeto. Como não tínhamos leds vermelhos suficientes, usamos leds verdes. Porém, fiquem a vontade para usarem as cores que desejarem! Na próxima imagem temos a montagem no protoboard:

Acho que devem estar assustados, mas esse ‘macarrão colorido’ realmente funciona!

Depois falamos da programação dele e da matriz 3x3, no próximo tópico explicaremos a construção do protótipo.

Construção

Esta parte é um pouco complicada, mas vamos para o passo a passo.

Para montar o coração, nós soldamos em uma placa perfurada, montando a imagem a seguir:

Há dois leds 220W, um em série com a linha 2 e outro na linha 7, apenas para controlar o brilho. Notamos que na hora de acender o brilho se concentrava em alguns leds. Se notarem algo do tipo, apenas insira resistores nas linhas ou colunas que julgarem interessantes.

A parte de trás está horrível! Tão horrível que vamos poupá-los! Rsrs

Colocamos fios coloridos e anotamos onde estavam ligados, para conectar nas portas do Arduino para testes e montagem final.

Bootloader

Bem, ao comprar um microcontrolador ATmega328, ele não vai funcionar sozinho. Primeiramente, é necessário gravar nele um ‘programa’ para que ele receba os sketchs pela IDE Arduino. Esse processo é chamado de bootloader.

Tem alguns sites que ensinam este procedimento. Este é um dos que consultamos: http://www.arduinoecia.com.br/2014/01/gravando-bootloader-no-atmega328-usando.html

Tenham muito cuidado com a posição dos pinos e montagem. A nossa ficou assim:

Se tudo ocorrer bem, depois faça a transferência do programa final ao microcontrolador. Mas tenha certeza que não fará outra gravação, pois ele será soldado à uma placa perfurada.

Para testar se ele funciona sem o Arduino Uno, recomendamos este tutorial: http://www.arduinoecia.com.br/2014/01/montando-arduino-na-protoboard.html

Programação

Como dito anteriormente, temos uma matriz com 27 leds dispostos em 6 linhas e 7 colunas. Mas primeiramente utilizamos para teste uma matriz 3x3. O sketch pode ser visto a seguir:

// Declara pinos Vcc

int power[]={2,3,4};

// Declara pinos GND

int gnd[]={5,6,7};

void setup() {

// declara powerpins como saida

for (int i=0;i<3;i++){

pinMode(power[i],OUTPUT);

}

//declara pinos gnd como saida e os coloca em nivel logico 1

for(int i=0;i<3;i++){

pinMode(gnd[i],OUTPUT);

digitalWrite(gnd[i],HIGH);

}

}

void loop() {

// Inicio loop com todas as linhas GND

for(int i=0;i<3;i++){

//para toda linha Gnd loop todas as linhas Vcc

for(int j=0;j<3;j++){

//acender cada led

digitalWrite(gnd[i],LOW);

digitalWrite(power[j],HIGH);

delay(100);

//apagar cada led

digitalWrite(gnd[i],HIGH);

digitalWrite(power[j],LOW);

delay(100);

}

}

}

Este programa declara os pinos de Power e GND numa matriz para não precisar declarar um por um. Facilita bastante quando a quantidade de entradas ou saídas é muito grande, visto que vamos ter isso no programa final.

No void setup, declaramos os pinos de power como saída através de um comando FOR, também economiza muitas linhas de programa. Nos pinos GND, além da declaração dos pinos como saída, o FOR já coloca os pinos em nível lógico 1.

No void loop, temos os laços de repetição para criar os efeitos de acender individualmente cada led e apagar em seguida.

A seguir temos a versão final do programa, para a matriz 6x7:

// Declara pinos Vcc

int power[]={2,3,4,5,6,7};

// Declara pinos GND

int gnd[]={8,9,10,11,12,13,14};

void setup() {

// declara powerpins como saida

for (int i=0;i<6;i++){

pinMode(power[i],OUTPUT);

}

for(int i=0;i<7;i++){

pinMode(gnd[i],OUTPUT);

digitalWrite(gnd[i],HIGH);

}

}

void loop() {

for(int i=0;i<3;i++){

// acende led central e depois os outros

digitalWrite(power[2],HIGH);

digitalWrite(gnd[3],LOW);

delay(100);

digitalWrite(power[1],HIGH);

digitalWrite(gnd[2],LOW);

delay(100);

digitalWrite(power[3],HIGH);

digitalWrite(gnd[4],LOW);

delay(100);

digitalWrite(power[4],HIGH);

digitalWrite(gnd[5],LOW);

delay(100);

digitalWrite(power[1],HIGH);

digitalWrite(gnd[1],LOW);

delay(100);

digitalWrite(power[0],HIGH);

digitalWrite(gnd[0],LOW);

delay(100);

digitalWrite(power[5],HIGH);

digitalWrite(gnd[6],LOW);

delay(100);

// apaga LEDS

digitalWrite(power[5],LOW);

digitalWrite(gnd[6],HIGH);

delay(100);

digitalWrite(power[0],LOW);

digitalWrite(gnd[0],HIGH);

delay(100);

digitalWrite(power[1],LOW);

digitalWrite(gnd[1],HIGH);

delay(100);

digitalWrite(power[4],LOW);

digitalWrite(gnd[5],HIGH);

delay(100);

digitalWrite(power[3],LOW);

digitalWrite(gnd[4],HIGH);

delay(100);

digitalWrite(power[1],LOW);

digitalWrite(gnd[2],HIGH);

delay(100);

digitalWrite(power[2],LOW);

digitalWrite(gnd[3],HIGH);

delay(100);

}

for(int i=0;i<7;i++){

//para toda linha Gnd loop todas as linhas Vcc

for(int j=0;j<6;j++){

//acender cada led

digitalWrite(gnd[i],LOW);

digitalWrite(power[j],HIGH);

delay(100);

//apagar cada led

digitalWrite(gnd[i],HIGH);

digitalWrite(power[j],LOW);

delay(100);

}

}

for(int i=0;i<7;i++){

//para toda linha Gnd loop todas as linhas Vcc

for(int j=0;j<6;j++){

//acender cada led

digitalWrite(gnd[i],LOW);

digitalWrite(power[j],HIGH);

delay(100);

}

}

}

O início deste sketch é bem parecido com o anterior, exceto por ter mais pinos declarados.

No void loop, são onde os efeitos foram criados. Tivemos que ir testando ponto a ponto onde era o led central e quais combinações para acendê-lo. Depois ir acendendo os leds ao redor dele, para criar o efeito de ‘batimento’.

Depois repetimos o efeito do programa anterior, de acender leds um a um, e depois apagar, e repetir o efeito de batimento.

Testes

Após o término do programa, fizemos vários testes com a placa ligada a um Arduino qualquer (Uno, Pro Mini, etc) para verificar se os efeitos funcionaram perfeitamente.

A primeira vez que ligamos, os leds ficaram assim:

Percebemos que os leds centrais não acendiam, então reforçamos as soldas e tentamos novamente. Depois, notamos que a segunda linha precisava de um resistor, pois o brilho dos últimos leds estavam muito maiores do que os outros.

O último problema que notamos foi um único led na segunda linha que não acendia. Após tantos reforços de solda, e outras coisas, percebemos que ele tinha queimado e foi necessário trocar.

Montagem final

Após todos estes procedimentos, vamos para a montagem final da Heartband.

Primeiramente, gravamos o sketch final no ATmega 328. Usem os procedimentos descritos nos sites que citamos acima.

Para montagem da placa stand alone, usamos também uma placa perfurada. Verifiquem a pinagem do ATmega para não soldarem fios em lugar diferente do programa que fizeram. A soldagem parcial pode ser vista nas próximas figuras:

Depois, soldamos os fios às portas declaradas no programa. Tenha muita atenção, pois pode fazer com que a placa não funcione perfeitamente.

Após isto, é hora de cortar as duas placas no mesmo tamanho e formato. Dependendo do material da sua placa, você pode cortar usando um riscador e régua, como na figura a seguir:

Faça um contorno usando caneta marcador de cor escura (preta, azul, etc) para o formato de coração. Posicione a régua e prenda, e faça riscos no contorno que fez nas placas com força, nos dois lados. Isso faz com que a placa possa ser quebrada.

Se você tiver acesso, pode usar uma serra de bancada para este trabalho. Confesso que a placa que contém o ATmega 328 estava mais resistente ao riscador, preferi usar a serra para cortar. Use uma lixa para dar acabamento. As duas placas cortadas estão na próxima imagem:

Próximo passo é soldar os fios da placa de leds na placa stand alone. Confira a pinagem do microcontrolador no Datasheet e solde um a um. Corte os fios para que não fiquem muito longos. Na próxima imagem temos o resultado:

Uma exemplificação de tudo que falamos aqui está no video abixo, vejam:


 
 
 

Comments


Posts Destacados
Posts Recentes
Procure por Tags
SIGA
  • YouTube Clean

© 2023 por FAÇA VOCÊ MESMO. Orgulhosamente criado com Wix.com

bottom of page