Sei sulla pagina 1di 14

Ampliar saídas do Arduino (Library)

Alô cientistas e computeiros! Seus problemas acabaram!


Esta pronta a biblioteca que vai permitir seu Arduino ter mais de 100 saídas!

Para entender melhor, vejam um post antigo que havia feito sobre esse assunto:
http://www.efeitonerd.com.br/2012/02/ampliar-saidas-do-arduino.html

Nesse projeto, usei 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:
?
1mega.shiftWrite(20, HIGH);
E para apaga-lo:
?
1mega.shiftWrite(20, LOW);

A biblioteca ShiftOutMega pode ser baixada nesses links:


http://www.4shared.com/rar/QSUfwzo4/ShifOutMega.html
https://mega.co.nz/#!jMN1zJBB!zyo3lVibrMU6VTssYvimg-
v1hVLtabX0DzncQm2rAlw
É só copiar para a pasta libraries do diretório do software Arduino.

Segue o código do exemplo do vídeo, e o esquema elétrico é o mesmo do post antigo.

Abraços e inté!

?
/*---------------------------------------------
1 S H I F T O U T M E G A
2 Ampliar o número de saídas do Arduino com
3 Registrador de Deslocamento 74HC595
4 Fellipe Couto - 17/09/2012
5 --------------------------------------------*/
6
/*¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
7 - Pino 8 do Arduino ligado ao pino 12 do CI.
8 - Pino 11 do Arduino ligado ao pino 14 do CI.
9 - Pino 12 do Arduino ligado ao pino 11 do CI.
10 - Led 1 = Pino 15 do CI.
11 -- Led 2 = Pino 1 do CI.
Led 3 = Pino 2 do CI.
12 - Led 4 = Pino 3 do CI.
13 - Led 5 = Pino 4 do CI.
14 - Led 6 = Pino 5 do CI.
15 - Led 7 = Pino 6 do CI.
- Led 8 = Pino 7 do CI.
16 - Pinos 10 e 16 do CI ligados ao Vcc.
17 - Pinos 8 e 13 do CI ligados ao GND.
18 - Pino 9 do CI ligado ao pino 14 do próximo CI.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨*/
19
20#include <ShiftOutMega.h> //Inclui a bilioteca ShiftOutMega.h
21
22//Variáveis de uso dos registradores 74HC595
23int latchPin = 8; //Pino 8 conectado ao pino 12 do 74HC595 (Latch).
24int dataPin = 11; //Pino 11 conectado ao pino 14 do 74HC595 (Data).
25int clockPin = 12; //Pino 12 conectado ao pino 11 do 74HC595 (Clock).
26//Quantidade de registradores (74HC595). Para cada registrador,
27temos 8 saídas.
28int qtdRegistradores = 3;
29
30int totalSaidas = qtdRegistradores * 8;
31
32//Inicia a biblioteca passando os parametros de uso.
ShiftOutMega mega(latchPin, dataPin, clockPin, qtdRegistradores);
33
34void setup(){
35}
36
37void loop(){
38 s1();
39 s2();
s3();
40}
41
42void s1(){
43 int t = 5;
44 for (int x=0; x<5; x++){
for (int i=1; i<=totalSaidas; i++){
45 mega.shiftWrite(i, HIGH);
46 delay(t);
47 mega.shiftWrite(i, LOW);
48 delay(t);
49 }
for (int i=totalSaidas; i>=1; i--){
50 mega.shiftWrite(i, HIGH);
51 delay(t);
52 mega.shiftWrite(i, LOW);
53 delay(t);
}
54 t--;
55 }
56}
57
58void s2(){
59 int t = 10;
for (int x=0; x<5; x++){
60 for (int i=1; i<=totalSaidas; i++){
61 mega.shiftWrite(i, HIGH);
62 delay(t);
63 }
for (int i=1; i<=totalSaidas; i++){
64 mega.shiftWrite(i, LOW);
65 delay(t);
66 }
67 }
68}
69
void s3(){
70 int t = 20;
71 for (int x=0; x<5; x++){
72 for (int i=1; i<=totalSaidas/2; i++){
73 mega.shiftWrite(i, HIGH);
mega.shiftWrite(totalSaidas+1-i, HIGH);
74 delay(t);
75 }
76
77 for (int i=totalSaidas/2; i>=1; i--){
78 mega.shiftWrite(i, LOW);
79 mega.shiftWrite(totalSaidas+1-i, LOW);
delay(t);
80 }
81 }
82}
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Postado por Fellipe Couto às 22:57
Enviar por e-mailBlogThis!Compartilhar no TwitterCompartilhar no
FacebookCompartilhar no Orkut
Marcadores: Arduino, Eletrônica, Informática

37 comentários:
1.

Felipe Yuri Yuri19 de dezembro de 2012 15:25

amigo se eu quiser ligar uma variavel a uma das portas do ci, como eu faço ?

exemplo 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

Responder

Respostas

1.

Fellipe Couto7 de janeiro de 2013 16:51


Boa tarde!
Acho 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!

Responder

2.

Anônimo7 de janeiro de 2013 08:28

Bom dia! td bem?


Na sua biblioteca acima! eu poderia colocar ate quantos CI's?? e liar cada pino
separado, ter o controle sobre eles?/
Valeu!

Responder

Respostas

1.

Anônimo7 de janeiro de 2013 08:29

**ligar**

2.

Fellipe Couto7 de janeiro de 2013 16:49

Boa tarde!!
Na 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!

3.

Anônimo8 de janeiro de 2013 10:46

Hum/! tendeu!
ou Parabens! cara leal de +++++! deu certim funcionou blz! valeu!
abraços!!!!!!!!!!!!!!
4.

Fellipe Couto11 de janeiro de 2013 10:41

Obrigado! :) Abraços!

Responder

3.

Danilo Oliveira22 de janeiro de 2013 21:11

Meu caro.

De 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?

Responder

Respostas

1.

Fellipe Couto24 de janeiro de 2013 12:35

Boa tarde, Danilo!


Obrigado 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!!

Responder

4.

Diego2 de maio de 2013 10:29

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.
Obrigado

Responder

Respostas

1.

Fellipe Couto12 de maio de 2013 09:42

Bom dia, Diego!


É 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!!!!

Responder

5.
Anônimo13 de maio de 2013 18:01

Parabéns pelo projeto!


Cara 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!

Responder

Respostas

1.

Fellipe Couto13 de maio de 2013 20:18

Esse projeto seria somente para saída (output) mesmo.


Obrigado pelo elogio!!!!
Abraços!!

2.

Anônimo13 de maio de 2013 20:47

sera então que se eu usar um 74hc597 ele pode funcionar como input?
claro que com seus devidos ajustes.

3.

Fellipe Couto13 de maio de 2013 21:15

Não, ele é somente para output mesmo. Teria que ser um novo projeto de
hardware também.
Abraços!!!

Responder

6.

Anônimo13 de maio de 2013 20:26

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!

Responder
Respostas

1.

Fellipe Couto13 de maio de 2013 20:34

Obrigado! Legal saber que gostou e foi útil!


Abraços!

Responder

7.

Sam Cunha28 de maio de 2013 00:18

Man obrigado pelo projeto, muito bom!


Sou 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

Responder

Respostas

1.

Fellipe Couto1 de junho de 2013 18:40

Obrigado o elogio!
Em 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!!!

Responder
8.

João Marcos11 de junho de 2013 00:06

Amigão, o esquema eletrônico seguiria o mesmo do seu tutorial anterior??


Como vou saber qual é o porta de 1 até n ?
testaria uma por uma ou segue uma sequência pelos registradores??

Responder

Respostas

1.

Fellipe Couto11 de junho de 2013 19:29

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,...
Abraços!

2.

João Marcos12 de junho de 2013 15:22

Valeu, amigão!!!
Ainda 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!

3.

Fellipe Couto15 de junho de 2013 20:19

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.
Qualquer dúvida, diz ai. Podendo ajudar... estamos aí!
Abraços!!
Responder

9.

onizuka14 de junho de 2013 02:59

Apareceu um para mim assim

ShiftOutMega does not name a type arduino

Coloquei a lib mas na hora de chamar esse ShiftOutMega acontece o erro!

Responder

Respostas

1.

Fellipe Couto15 de junho de 2013 20:20

Boa noite! Em qual linha está exibindo o erro? No include?!


Abraços!

Responder

10.

Anônimo25 de junho de 2013 09:36

Bom dia!
Estou 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

Responder

11.

Juli1 de julho de 2013 11:14

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.

Responder

Respostas

1.

Fellipe Couto2 de julho de 2013 20:38

Boa noite, Juli!


Se 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!

Responder

12.

Luis Quadros - MiStErI0Us6 de agosto de 2013 11:47

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.

Antes de qualquer coisa só tenho a agradecer sua iniciativa de construir a


biblioteca e compartilhar conosco.

Responder

Respostas

1.

Fellipe Couto7 de agosto de 2013 10:51

Bom dia, Luis Quadros!


Agradeço o elogio! Obrigado!
Espero que a biblioteca tenha sido útil!
Abraços!
2.

Luis Quadros - MiStErI0Us7 de agosto de 2013 23:16

Topei em uma incompatibilidade.

quando ativo a linha abaixo, sua biblioteca deixa de funcionar aqui.


#include // Para a EEPROM 24LC256

já passou por algo do tipo?

Responder

13.

Luis Quadros - MiStErI0Us7 de agosto de 2013 23:21

não foi a linha toda, include wire.h


vou 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

Responder

Respostas

1.

Fellipe Couto21 de agosto de 2013 20:26

Estranho. Vou tentar fazer uns testes desse tipo por aqui para tentar
identificar isso.

Responder

14.

Fabio Ferreccio19 de agosto de 2013 14:20

Ola Boa tarde, é possivel inserir um keypad 4x4 no 74hc595 para efetuar leitura
das teclas... Como faria isso? Poderiam me ajudar, desde ja grato.

Responder
Respostas

1.

Fellipe Couto21 de agosto de 2013 20:27

Boa noite, Fabio!


Esse CI é somente para saídas mesmo. Para entradas seria um outro
circuito.
Abraços!

Responder

15.

Anônimo28 de maio de 2014 14:27

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

Responder

Respostas

1.

Fellipe Couto28 de maio de 2014 14:46

Boa tarde, Ricardo!


Sim, 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!

Responder

Potrebbero piacerti anche