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!