Alô cientistas e computeiros! Seus problemas acabaram!
Está pronta a biblioteca que vai permitir seu Arduino ter mais de 100 saídas!
No projeto utilizei 3 registradores 74HC595 e apenas 3 saídas do Arduino. Para cada registrador, temos 8 novas saídas.
Fiz a biblioteca para controle individual de cada saída, exatamente da mesma forma que usamos o digitalWrite() do Arduino.
Como são 3 registradores, temos 24 saídas. Para acender o led da saída número 20, por exemplo, usamos:
mega.shiftWrite(20, HIGH);
E para apaga-lo: mega.shiftWrite(20, LOW);
Biblioteca disponível em:https://github.com/fellipecouto/ShiftOutMega
A instalação pode ser realizada através do gerenciador de bibliotecas da IDE Arduino:
Para entender melhor o projeto, vejam um post antigo que havia feito sobre esse assunto:
Segue o código do exemplo do vídeo. O esquema elétrico é o mesmo do post antigo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | /*--------------------------------------------------------------- Programa : SHIFOUTMEGA Descr : Ampliar o número de saídas do Arduino com CI 74HC595 Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 17/09/2012 ---------------------------------------------------------------*/ /*¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ - Pino 8 do Arduino ligado ao pino 12 do CI. - Pino 11 do Arduino ligado ao pino 14 do CI. - Pino 12 do Arduino ligado ao pino 11 do CI. - Led 1 = Pino 15 do CI. - Led 2 = Pino 1 do CI. - Led 3 = Pino 2 do CI. - Led 4 = Pino 3 do CI. - Led 5 = Pino 4 do CI. - Led 6 = Pino 5 do CI. - Led 7 = Pino 6 do CI. - Led 8 = Pino 7 do CI. - Pinos 10 e 16 do CI ligados ao Vcc. - Pinos 8 e 13 do CI ligados ao GND. - Pino 9 do CI ligado ao pino 14 do próximo CI. ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨*/ #include <ShiftOutMega.h> //https://github.com/fellipecouto/ShiftOutMega //Variáveis de uso dos registradores 74HC595 int latchPin = 8; //Pino 8 conectado ao pino 12 do 74HC595 (Latch). int dataPin = 11; //Pino 11 conectado ao pino 14 do 74HC595 (Data). int clockPin = 12; //Pino 12 conectado ao pino 11 do 74HC595 (Clock). //Quantidade de registradores (74HC595). Para cada registrador, temos 8 saídas. int qtdRegistradores = 3; int totalSaidas = qtdRegistradores * 8; //Inicia a biblioteca passando os parametros de uso. ShiftOutMega mega(latchPin, dataPin, clockPin, qtdRegistradores); void setup(){ } void loop(){ s1(); s2(); s3(); } void s1(){ int t = 5; for (int x=0; x<5; x++){ for (int i=1; i<=totalSaidas; i++){ mega.shiftWrite(i, HIGH); delay(t); mega.shiftWrite(i, LOW); delay(t); } for (int i=totalSaidas; i>=1; i--){ mega.shiftWrite(i, HIGH); delay(t); mega.shiftWrite(i, LOW); delay(t); } t--; } } void s2(){ int t = 10; for (int x=0; x<5; x++){ for (int i=1; i<=totalSaidas; i++){ mega.shiftWrite(i, HIGH); delay(t); } for (int i=1; i<=totalSaidas; i++){ mega.shiftWrite(i, LOW); delay(t); } } } void s3(){ int t = 20; for (int x=0; x<5; x++){ for (int i=1; i<=totalSaidas/2; i++){ mega.shiftWrite(i, HIGH); mega.shiftWrite(totalSaidas+1-i, HIGH); delay(t); } for (int i=totalSaidas/2; i>=1; i--){ mega.shiftWrite(i, LOW); mega.shiftWrite(totalSaidas+1-i, LOW); delay(t); } } } |
amigo se eu quiser ligar uma variavel a uma das portas do ci, como eu faço ?
ResponderExcluirexemplo no arduino
vetor[3] = {13,12,11}//o vetor utliza as portas 13,12,11 do arduino...
como faria para o mesmo vetor reconhecer portas separas do ci ?
fy.teixeira@gmail.com
Boa tarde!
ExcluirAcho que não entendi muito bem. Mas os registradores 74HC595 são ligados apenas para ampliar o número de saídas, assim, tem-se o controle de HIGH/LOW em cada saída de cada CI.
Abraços!
Bom dia! td bem?
ResponderExcluirNa sua biblioteca acima! eu poderia colocar ate quantos CI's?? e liar cada pino separado, ter o controle sobre eles?/
Valeu!
**ligar**
ExcluirBoa tarde!!
ExcluirNa teoria, pode-se ligar muitos. Eu testei até com 10 registradores 74HC595 e funcionou legal. Tem-se o controle de cada saída individualmente sim.
Abraços!
Hum/! tendeu!
Excluirou Parabens! cara leal de +++++! deu certim funcionou blz! valeu! abraços!!!!!!!!!!!!!!
Obrigado! :) Abraços!
ExcluirMeu caro.
ResponderExcluirDe todos os projetos que encontrei usando o 74HC595 o seu ficou sendo o melhor.
Você montou sua própria biblioteca, organizando o código, e no projeto trabalhou com os resistores protegendo os LEDs. muito legam mesmo.
Uma pergunta:
Neste projeto seria obrigatório utilizar as portas 8, 11 e 12?
Se eu quiser utilizar outras portas do Arduino daria muito trabalho, ou não tem como?
Boa tarde, Danilo!
ExcluirObrigado pelo elogio!
Você pode usar as portas de sua escolha, é só alterar as variáveis 'latchPin', 'clockPin' e 'dataPin', colocando as portas de sua escolha.
Abraços!!
Ola amigo , bom dia ,minha duvida é a seguinte , estou com o arduino sendo controlado por php , é possivel pelo php eu controlar individualmente cada saida do registrador? , sendo que os valores seriam variaveis.
ResponderExcluirObrigado
Bom dia, Diego!
ExcluirÉ possível sim. Você vai trabalhar da mesma forma que trabalharia para utilizar a função digitalWrite() do arduino para ligar/desligar os pinos. Mas para controlar os pinos dos registradores, usa-se a função mega.shiftWrite(). É só passar os parâmetros via PHP normalmente.
Abraços!!!!
Parabéns pelo projeto!
ResponderExcluirCara eu tenho uma duvida tem como eu usar este mesmo esquema só que com botões?
ele consegue receber sinal em vez de enviar?
valeu e parabéns de novo!
Esse projeto seria somente para saída (output) mesmo.
ExcluirObrigado pelo elogio!!!!
Abraços!!
sera então que se eu usar um 74hc597 ele pode funcionar como input?
Excluirclaro que com seus devidos ajustes.
Não, ele é somente para output mesmo. Teria que ser um novo projeto de hardware também.
ExcluirAbraços!!!
Cara matou a pau essa lib! Era oq eu procurava. O melhor projeto de expansão de portas que já vi! Parabéns pelo projeto!
ResponderExcluirObrigado! Legal saber que gostou e foi útil!
ExcluirAbraços!
Man obrigado pelo projeto, muito bom!
ResponderExcluirSou bastante iniciante e se puder tirar as seguintes duvidas agradeço:
Da pra acender diversos LEDs juntos? (tipo uns 70, depois outros 50 e talz)
O que é preciso para gravar o código no arduino?
É caro um projeto com 150 LEDs? (considerando que preciso comprar o gravador)
Obrigado
Obrigado o elogio!
ExcluirEm relação a acender leds juntos, dá sim. Dependendo da quantidade de leds, vai precisar de um circuito com transistor, para poder fornecer a corrente suficiente.
Para gravar o código no microcontrolador, vc pode usar o próprio arduino. Dá uma olhada nessa post: http://www.efeitonerd.com.br/2011/12/upload-para-atmega328.html
O preço depende do led. Um led branco alto-brilho, por exemplo, em torno de 50 centavos cada um. Agora os leds difusos (aqueles normais de baixo brilho), custam até uns 10 centavos cada um.
Abraços!!!
Amigão, o esquema eletrônico seguiria o mesmo do seu tutorial anterior??
ResponderExcluirComo vou saber qual é o porta de 1 até n ?
testaria uma por uma ou segue uma sequência pelos registradores??
Boa noite!! O esquema é o mesmo. A pinagem é conforme está no esquema elétrico também. Pino 15 do primeiro registrador é o Led1, pino 1 do primeiro registrador é o Led2, pino 2 do primeiro registrador é o Led3,... Pino 15 do segundo registrador é o Led 9,...
ExcluirAbraços!
Valeu, amigão!!!
ExcluirAinda não fiz o teste, estou esperando o meu arduíno chegar.
A aplicação é para uma matriz de 8 x 12.
Será que vou ter problemas com a alimentação?
A idéia é ter um display de leds.
Abração!
Dependendo da quantidade de Leds, ou das cargas conectadas... O arduino só pode fornecer até 40mA por porta. Então dependendo vc teria que alimentar os CIs separadamente.
ExcluirQualquer dúvida, diz ai. Podendo ajudar... estamos aí!
Abraços!!
Boa Noite Fellipe,
ExcluirParabéns pela iniciativa !!
Eu sou iniciante nos estudos do arduino e tenho algumas duvidas referente a tensão e corrente do arduino... por exemplo, com relação as portas do arduino que só podem oferecer até 40mA por porta, então logo eu só poderia conectar até dois leds de 20mA em cada porta e ainda não excedendo os 200mA totais do microcontrolador... então como você conseguiu ligar até 8 leds por saída ? E como eu poderia então ligar, por exemplo, 40 leds com o Arduino Uno em pinos digitais PWR ?
Obrigado e Abração !!
Apareceu um para mim assim
ResponderExcluirShiftOutMega does not name a type arduino
Coloquei a lib mas na hora de chamar esse ShiftOutMega acontece o erro!
Boa noite! Em qual linha está exibindo o erro? No include?!
ExcluirAbraços!
Bom dia!
ResponderExcluirEstou com dificuldade de inicializar a sua biblioteca juntamente com a ethernet shield, parece que quando inicializo a sua lib, ele trava, mas se inicializo somente a sua lib funciona, ou se inicializo somente a ethernet shield também, mas os dois juntos não, saberia me dizer o que ocorre?
Junior
Ola! Obrigada por compartilhar o projeto! Tenho uma duvida e gostaria sde saber se vc poderia me ajudar. Estou trabalhando em um projeto, e gostaria de controlar 9 leds e um display com numeros (1 a 9), mas cada numero controlado por uma entrada individual (botoes touch). Consegui fazer com 5 numeros e 5 leds, mas ja nao tenho mais opcoes para usar nos proximos 4. Esse seu projeto poderia ser utilizado no meu caso de alguma forma? Desculpa se ficou confuso, comecei a usar arduino a pouco tempo. Obrigada, Juliana.
ResponderExcluirBoa noite, Juli!
ExcluirSe for o que entendi, você pode utilizar 2 registradores 74HC595, e dessa forma obtemos 16 saídas. Assim já consegue controlar os 9 Leds, e mais um display de 7 segmentos. Adiciona a biblioteca e fica fácil pra vc controlar.
Assim, só foi utilizadas 3 saídas do arduino, e com as saídas que sobraram, faz a ligação de entrada dos botões.
Espero que tenha ajudado...
Qualquer coisa, só entrar em contato!
Amigo, depois de passar 1 dia inteiro pesquisando como fazer isso "no braço", me deparei com sua biblioteca ontem às 3 da manhã, como tava muito cansado deixei para baixar hoje.
ResponderExcluirAntes de qualquer coisa só tenho a agradecer sua iniciativa de construir a biblioteca e compartilhar conosco.
Bom dia, Luis Quadros!
ExcluirAgradeço o elogio! Obrigado!
Espero que a biblioteca tenha sido útil!
Abraços!
Topei em uma incompatibilidade.
Excluirquando ativo a linha abaixo, sua biblioteca deixa de funcionar aqui.
#include // Para a EEPROM 24LC256
já passou por algo do tipo?
não foi a linha toda, include wire.h
ResponderExcluirvou precisar guardar algumas coisas na eeprom com os 24lc256.
mas basta somente adicionar o include wire.h que a parte de acender os leds deixa de funcionar, todo o resto do programa funciona 100%, exceto os 74hc595.
vlw
Estranho. Vou tentar fazer uns testes desse tipo por aqui para tentar identificar isso.
ExcluirOla Boa tarde, é possivel inserir um keypad 4x4 no 74hc595 para efetuar leitura das teclas... Como faria isso? Poderiam me ajudar, desde ja grato.
ResponderExcluirBoa noite, Fabio!
ExcluirEsse CI é somente para saídas mesmo. Para entradas seria um outro circuito.
Abraços!
Boa tarde, Felipe. Parabéns pelos projetos. Sou iniciante com o Arduíno e queria um esclarecimento.... em vez dos leds, consigo utilizar o 74hc595 para acionar bonina de mínis reles?? Obrigado - Ricardo
ResponderExcluirBoa tarde, Ricardo!
ExcluirSim, poderia. Na verdade os registradores funcionam como se tivesse trabalhando com as portas do Arduino, o que poderia ligar diretamente numa porta do Arduino, poderia ligar na saída dos registradores. Deve-se ficar atento a corrente necessária. Dependendo do que for ligar, seria preciso utilizar transistores.
Abraços!
Boa tarde amigo, gostei muito do seu trabalho, parabéns. É possível utilizar PWM através dessa biblioteca? Estou tentando utilizá-la em uma matriz de LED's RGB 8x8 para formar figuras de cores distintas, alternando entre as figuras ( cada uma com sua respectiva cor, tipo quadrado amarelo, circulo roxo) para formar tais cores tentei utilizar PWM, mas não consegui. Os LED's estão conectados dessa forma: http://www.franksworkshop.com.au/Electronics/RGB/RGB.htm.
ResponderExcluirBoa tarde!! Obrigado!
ExcluirEssa biblioteca não foi feita para pwm.
Abraços!
Felipe, boa tarde.
ResponderExcluirE possivel coletar as informacoes de dispositivos analogicos conectados aos expansores? Um exemplo e um sensor de temperatura LM35?
Bom dia! Esse CI é somente output. Somente expansão de saídas.
ExcluirOlá Fellipe, gostei muito do projeto, muito bom, parabéns, será que você poderia me ajudar com a Biblioteca ShiftOutMega, pois parece que foi deletada no 4shared, meu e-mail é joao45id@gmail.com te agradeço muito.....João
ResponderExcluirBoa tarde, João!
ExcluirOs links estão funcionando:
http://www.4shared.com/rar/QSUfwzo4/ShifOutMega.html
E pode ser baixado também através:
https://mega.co.nz/#!jMN1zJBB!zyo3lVibrMU6VTssYvimg-v1hVLtabX0DzncQm2rAlw
Abraços!
Olá Felipe. De todos os tutorias que vi na net, o seu é o que pode me ajudar. Tenho que acionar as portas do ci a partir do status de sensores. Para isso, escrevi os status dos sensores e as saídas para os leds. Por exemplo, caso o sensor 1 acione, como posso escrever para a saida Q2 do CI? mega.shiftoutwrite(2,HIGH)? É isto? Como devo direcionar a saída para o CI?
ResponderExcluirÉ isso mesmo. Para trabalhar com as saídas do registrador, é seguindo a base das saídas do Arduino mesmo.
Excluirmega.shiftoutwrite(2,HIGH) //Ativa a saída (porta) 2 do registrador.
Olá, estou fazendo algo parecido, envolvendo sensores + 74hc595. Teve avanço em seu projeto? Gostaria de ver seu código, caso haja interesse envie-me uma resposta por email: rodrigohusken@live.com
ExcluirOla Felipe, boa tarde!
ResponderExcluirEstou tentando montar um protoboard igual ao que você fez, porém, não sei o que está acontecendo que eu só consigo fazer funcionar 16 leds, ou seja, 2 CI's, as demais 8 leds com o terceiro CI não funciona de jeito nenhum.
Já troquei o CI para ver se era isso, mas não adiantou, ou seja, não esta queimado.
Você já passou por isso?
Outra coisa... você já conseguiu usar um potenciômetro, para controlar o tempo, neste mesmo esquema que você montou? Se sim, poderia me enviar o código para eu ver?
Obrigado,
Eliab
eliab@techbs.com.br
Boa tarde, Eliab!
ExcluirEstranho o problema que está tendo. Pode ser problema na protoboard, como algum mal contato. O terceiro CI não funcionada nada, ou apresenta comportamento incorreto?
É possível sim incluir potenciômetro. Não adicionei, mas é possível.
Abraços!
Olá Felipe, Boa Tarde
ResponderExcluirEu sou iniciante nos estudos do arduino e tenho algumas duvidas referente a tensão e corrente do arduino... por exemplo, com relação as portas do arduino que só podem oferecer até 40mA por porta, então logo eu só poderia conectar até dois leds de 20mA em cada porta e ainda não excedendo os 200mA totais do microcontrolador... então como você conseguiu ligar até 8 leds por saída ? E como eu poderia então ligar, por exemplo, 40 leds com o Arduino Uno em pinos digitais PWM ?
Obrigado e Abração !!
Boa tarde!
ExcluirA limitação de 20mA é para cada saída do Arduino. Os leds estão ligados nas saídas dos registradores, que é alimentado separadamente. Cada porta de saída do Arduino, nesse caso, está alimentando somente as entradas dos registradores.
Se tiver dúvidas, escreva.
Abraços!!!
Olá Fellipe. Primeiramente parabéns pela biblioteca.
ResponderExcluirComecei a pouco tempo com Arduino e estou sentindo falta de um funçao nessa biblioteca, seria "digitalRead", teria que armazenar em um vetor o valor que foi enviado ao pino para ter esse controle? O que acha que posso fazer para obter o estado desses pinos "virtuais" de uma forma melhor? Obrigado.
posso usar o mesmo esquema para incluir reles e interruptor paralelo??? e fazer os mesmo serem accionados poe uma conexao bluetooth???
ResponderExcluirBom dia!
ExcluirÉ possível utilizar as saídas dos registradores da mesma forma que se utiliza as saídas normais do Arduino.
Olá Felipe parabéns pela biblioteca
ResponderExcluirComecei a pouco tempo com Arduino,gostaria de saber,posso controlar o estado dos pinos dos ci,com o mesmo carácter estado HIGH,LOW,estou ligando pelo serial(l=HIGH)(D=LOW)???
Bom dia!
ExcluirNão entendi muito bem sua pergunta. Mas, o controle é feito da mesma forma que faz o HIGH/LOW das saídas do Arduino. Utilizando a biblioteca, tem-se o mesmo controle das portas do registrador, como saída.
Bom dia Felipe!
ResponderExcluirEstou inciando com arduino os seus projetos estam me ajudando a entende melhor parabens.
Eu gostaria de usar o drive ic TM1826 controlado pelo arduino como posso faze-lo?
Grato.
Olá Felipe, primeiramente meus parabéns....
ResponderExcluirEu estou com uma dúvida qto à quantidade de registradores que posso utilizar.
muito obrigado
Bom dia! Obrigado!
ExcluirNa teoria, pode-se ligar muitos. Fiz o teste com 10 e funcionou legal.
Abraços!
os pinos da 74HC595 pode ser usado pinMode (input)?
ResponderExcluirBoa tarde, Alexandre! O registrador 74HC595 é somente OUTPUT.
ExcluirAbraços!
Utilizo sua lib nos meus projetos. Me ajuda muito! Parabéns!
ResponderExcluirSergio
Obrigado, Sergio!
ExcluirFico feliz em saber que a biblioteca está sendo útil!
Abraços!!