Já pensou em unir seu lado Maker com alguma data comemorativa e criar um presente único? Se a resposta for sim, você também pensa como nós e por isso aproveitamos o Dia dos Namorados para te mostrar como criar um presente simples, mas visualmente muito bonito para presentear quem você ama. Veja a seguir:

Nosso projeto de hoje consiste num coração de leds que faz uso de uma técnica de multiplexação conhecida como Charlieplexing, que nos permite controlar um número n de LED’s fazendo uso de poucas portas digitais do microcontrolador. Essa técnica consiste em alterar, via programação, o sentido da corrente elétrica nos pinos de saída e, consequentemente, direcionar essa corrente a um ponto específico do circuito. O número de LED’s que podemos controlar com um determinado número de pinos se dá pela fórmula n² – n, onde n representa a quantidade de pinos que vamos utilizar e o resultado o número máximo de LED’s permitidos no arranjo.
Por exemplo, se desejamos utilizar 3 pinos do Arduino para controlar o número máximo possível de LED’s, o cálculo seria:
n² – n -> 3² – 3 -> 9 – 3 = 6
Ou seja, usando 3 pinos digitais do Arduino aplicados à Charlieplexing, podemos controlar até 6 LED’s, dispostos da seguinte forma:

Arranjo para Charlieplexing com LED’s iguais. Fonte: Wikipédia
É importante ressaltar que o arranjo acima só deve ser usado quando todos os LED’s forem iguais. Caso sejam diferentes, utilize o seguinte arranjo:

Arranjo para Charlieplexing com LED’s diferentes. Fonte: Wikipédia
Se quiser, você pode montar o circuito acima e carregar o código abaixo em seu Arduino, para entender melhor como essa técnica funciona.
/*
- Arduino & Chralieplexing
- Driving 6 LEDs using only 3 I/O Pins
- Tri-State Logic Implementation
- Demo Code From Internet
- Prepared by T.K.Hareendran
- Tested at TechNode Protolabz
- Source: https://www.electroschematics.com
*/
#define LED_1 5
#define LED_2 6
#define LED_3 7
void setup()
{
pinMode(LED_1, INPUT);
pinMode(LED_2, INPUT);
pinMode(LED_3, INPUT);
}
void loop()
{
set_pins(LED_1, LED_2);
delay(100);
set_pins(LED_2, LED_1);
delay(100);
set_pins(LED_3, LED_1);
delay(100);
set_pins(LED_1, LED_3);
delay(100);
set_pins(LED_2, LED_3);
delay(100);
set_pins(LED_3, LED_2);
delay(100);
}
void set_pins(int high_pin, int low_pin)
{
reset_pins();
pinMode(high_pin, OUTPUT);
pinMode(low_pin, OUTPUT);
digitalWrite(high_pin, HIGH);
digitalWrite(low_pin,LOW);
}
void reset_pins()
{
pinMode(LED_1, INPUT);
pinMode(LED_2, INPUT);
pinMode(LED_3, INPUT);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
}Fonte: Electroschematics

Esse projeto é baseado no tutorial criado por Jimmie Rodgers (você pode acessá-lo clicando aqui) e, para a montagem do nosso circuito de dia dos namorados, você vai precisar dos seguintes componentes:
Materiais necessários para o projeto de dia dos namorados
O esquemático de todas as ligações você pode conferir na imagem abaixo. Se tiver dúvidas sobre a interpretação de um esquemático técnico, sugiro que leia nosso artigo sobre o assunto.
Esquemático de conexão do circuito
A montagem do coração é relativamente simples, mas requer um pouco de atenção na hora de fazer as conexões. Comece posicionando os LED’s na placa seguindo a imagem abaixo:
Disposição dos LED’s na placa
Para as trilhas, você pode usar fios ou criá-las usando estanho. Fique atento aos pontos de conexão ilustrados no diagrama e cuide para que não haja nenhum curto circuito. Não se esqueça também de verificar a polaridade dos LED’s!
Conexões da placa
Com os LEDs soldados, adicione os resistores e o conector. Note que as ilhas de solda se encontram na parte inferior da placa, nos forçando a fazer uma pequena alteração nos conectores. Você deve deixá-los como na imagem abaixo:
Alteração nos conectores para permitir a conexão na placa
Feito isso, seu circuito estará pronto! Com o auxílio de um multímetro, faça todos os testes necessários para garantir que não existam curtos circuitos e que todos os LED’s estão polarizados corretamente:
Teste de conexões
Com todos os passos acima concluídos, chegou a hora de carregar o código do projeto. Copie e cole-o em sua IDE e faça o upload para seu Arduino:
//**************************************************************//
// Name : Charlieplexed Heart control //
// Author : Jimmie P Rodgers www.jimmieprodgers.com //
// Date : 08 Feb, 2008 Last update on 02/13/08 //
// Version : 1.3 //
// Notes : Uses Charlieplexing techniques to light up //
// : a matrix of 27 LEDs in the shape of a heart //
// : project website: www.jimmieprodgers.com/openheart //
//**************************************************************** //
#include <avr/pgmspace.h> //This is in the Arduino library
int pin1 =8;
int pin2 =9;
int pin3 =10;
int pin4 =11;
int pin5 =12;
int pin6 =13;
const int pins[] = {
pin1,pin2,pin3,pin4,pin5,pin6};
const int heartpins[27][2] ={
{pin3, pin1},
{pin1, pin3},
{pin2, pin1},
{pin1, pin2},
{pin3, pin4},
{pin4, pin1},
{pin1, pin4},
{pin1, pin5},
{pin6, pin1},
{pin1, pin6},
{pin6, pin2},
{pin4, pin3},
{pin3, pin5},
{pin5, pin3},
{pin5, pin1},
{pin2, pin5},
{pin5, pin2},
{pin2, pin6},
{pin4, pin5},
{pin5, pin4},
{pin3, pin2},
{pin6, pin5},
{pin5, pin6},
{pin4, pin6},
{pin2, pin3},
{pin6, pin4},
{pin4, pin2}
};
//Controle de brilho. Quanto menor o valor, mais escuro
int blinkdelay = 200;
//Controle de velocidade. Quanto menor o valor, mais rápido
int runspeed = 50;
//Array de animações
const byte heart[][27] PROGMEM ={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1},
{0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1},
{0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0},
{1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1},
{1,1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0},
{0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1},
{0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1},
{1,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
};
void setup() {
// blinkall(2); // Use para testes
}
void loop() {
// sequenceon(); // Use para testes
play();
}
void turnon(int led) {
int pospin = heartpins[led][0];
int negpin = heartpins[led][1];
pinMode (pospin, OUTPUT);
pinMode (negpin, OUTPUT);
digitalWrite (pospin, HIGH);
digitalWrite (negpin, LOW);
}
void alloff() {
for(int i = 0; i < 6; i++) {
pinMode (pins[i], INPUT);
}
}
void play() {
boolean run = true;
byte k;
int t = 0;
while(run == true) {
for(int i = 0; i < runspeed; i++) {
for(int j = 0; j < 27; j++) {
k = pgm_read_byte(&(heart[t][j]));
if (k == 2) {
t = 0;
}
else if(k == 1) {
turnon(j);
delayMicroseconds(blinkdelay);
alloff();
}
else if(k == 0) {
delayMicroseconds(blinkdelay);
}
}
} t++;
}
}
void blinkall(int numblink) {
alloff();
for(int n = 0;n < numblink;n++) {
for(int i = 0; i < runspeed; i++) {
for(int j = 0; j < 27; j++) {
turnon(j);
delay(blinkdelay);
alloff();
}
}
delay(100);
}
}
void sequenceon() {
for(int i = 0; i < 27; i++) {
turnon(i);
delay(800);
alloff();
delay(200);
}
}Créditos: Jimmie Rodgers
Feito isso, basta conectar a placa ao Arduino corretamente e seu presente Maker estará funcionando! Confira o resultado que obtivemos:
Apesar de ser um pouquinho trabalhoso nas conexões, esse é um projetinho simples de se fazer e que traz um resultado visual muito bonito. Esperamos que tenha gostado do projeto de hoje e não deixe de conferir as atualizações do blog. Em breve traremos mais novidades relacionadas à datas comemorativas!
Um feliz dia dos namorados a todos os casais da comunidade Maker e até a próxima!
https://www.electroschematics.com/arduino-charlieplexing/
https://en.wikipedia.org/wiki/Charlieplexing
https://www.instructables.com/Arduino-Charliplexed-Heart-just-in-time-for-Valen/
Curtiu o post? Te convido a visitar a loja da Eletrogate e conferir todos os nossos produtos voltados ao Arduino e à robótica. Bão deixe de conferir também as atualizações do blog e se você fez o projeto ensinado, nos mostre o resultado pelo Instagram, basta seguir nossa página e nos mencionar na foto ou vídeo. Estamos curiosos para ver os projetos dos nossos leitores e clientes!
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!