ARDUINO + SAIDAS

Tem caso que a quantidade de saída do Arduino não e suficiente para nossos projetos este pequeno projeto ira ajudar a resolver este problema.

O circuito e composto por um circuito multiplexador seria para paralelo e um circuito drive de saída para acionar cargas reles etc..

Este Circuito proposto ira consumir 3 saídas do arduino e ira libera 8 saídas sendo 4 saída a rele e 4 do próprio circuito integrado as saídas

do integrado e negativa o sinal e (0V) para você ligar uma rele nela e só ligar um lado da bobina do rele ao 12V e o outro lado da bobina do rele ligar na saída do integrado.

Para visualizar melhor o projeto clicar na imagem.

A ligação desta placa com seu Arduino extremamente simples confira a ligação na imagem abaixo.

É preciso cortar o pino 10 do ULN2803 para a placa funcionar.

Para visualizar melhor clicar na imagem abaixo.

Para um melhor intendimento do circuito proposto olhe o diagrama esquemático do circuito para visualizar melhor clicar na imagem

Para testa sua plaquinha copie o código a baixo e colo no IDE do Arduino.

Código Teste + saidas

/* programa para teste de saidas

programa ira fazer uma contagem binaria

*/

// Saida serial para os reles

void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {

//internal function setup

int i=0;

int pinState;

pinMode(myClockPin, OUTPUT);

pinMode(myDataPin, OUTPUT);

//clear everything out just in case to

//prepare shift register for bit shifting

digitalWrite(myDataPin, 0);

digitalWrite(myClockPin, 0);

//for each bit in the byte myDataOut�

//NOTICE THAT WE ARE COUNTING DOWN in our for loop

//This means that %00000001 or "1" will go through such

//that it will be pin Q0 that lights.

for (i=7; i>=0; i--) {

digitalWrite(myClockPin, 0);

//if the value passed to myDataOut and a bitmask result

// true then... so if we are at i=6 and our value is

// %11010100 it would the code compares it to %01000000

// and proceeds to set pinState to 1.

if ( myDataOut & (1<<i) ) {

pinState= 1;

}

else {

pinState= 0;

}

//Sets the pin to HIGH or LOW depending on pinState

digitalWrite(myDataPin, pinState);

//register shifts bits on upstroke of clock pin

digitalWrite(myClockPin, 1);

//zero the data pin after shift to prevent bleed through

digitalWrite(myDataPin, 0);

}

//stop shifting

digitalWrite(myClockPin, 0);

}

// Declaração de variaveis inicio

//--- para saidas -----------------------

//Pino 8 habilita saidas

int latchPin =11 ;

//Pino 9 de sincronismo (Clock)

int clockPin = 9;

//Pino 10 Dadoas

int dataPin = 10;

/////////////////////////////////////////

// Saidas Y0,Y1,Y2,Y3,Y4,Y5

int Y0 =0; //Saida byte 0

int Y1 =0; //Saida byte 1

int Y2 =0; //Saida byte 2

int Y3 =0; //Saida byte 3

int Y4 =0; //Saida byte 4

int Y5 =0; //Saida byte 5

//////////////////////////////////////////

///////////////////////////////////////////////////////////////////

long previousMillis= 0; // Para contagem de tempo S contados

int ledPin = 13; // LED connected to digital pin 13

int I0 = 0; // Entrada digital 1

int I1 = 0; // Entrada digital 2

int I2 = 0; // Entrada digital 3

int I3 = 0; // Entrada digital 4

int I4 = 0; // Entrada digital 5

int I5 = 0; // Entrada digital 6

int I6 = 0; // Entrada digital 7

int I7 = 0; // Entrada digital 8

int IN0 = 0; // Entrada analogica 1

int IN1 = 0; // Entrada analogica 2

int IN2 = 0; // Entrada analogica 3

int IN3 = 0; // Entrada analogica 4

int val1 =0;//Leitura analogica 1

int val2 =0;//Leitura analogica 2

int Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10 = 0; //SAIDA digital

int Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20 = 0; //SAIDA digital

int Q21,Q22,Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30 = 0; //SAIDA digital

int Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38,Q39,Q40 = 0; //SAIDA digital

int Q41,Q42,Q43,Q44,Q45,Q46,Q47,Q48 = 0; //SAIDA digital

// Declara pino do clp

void setup() {

pinMode(11,OUTPUT); // Saida

pinMode(9,OUTPUT); // Saida

pinMode(10,OUTPUT); // Saida

shiftOut(dataPin, clockPin,0); //Escreve na Saida 0

// initialize the digital pin as an output:

Serial.begin(9600);

Serial.print(0x0D, BYTE);

pinMode(ledPin, OUTPUT);

pinMode(latchPin, OUTPUT);

pinMode(3,OUTPUT); // Saida pwm 1

pinMode(5,OUTPUT); // Saida pwm 2

pinMode(6,OUTPUT); // Saida pwm 3

pinMode(2, INPUT); //Entrada 1

pinMode(4, INPUT); //Entrada 2

pinMode(7, INPUT); //Entrada 3

pinMode(8, INPUT); //Entrada 4

pinMode(12, INPUT); //Entrada 5

pinMode(13, INPUT); //Entrada 6

}

void loop()

{

// Para saida serial

//Y0=0;// Zera saidas a cada ciclo

Y1=0;// Zera saidas a cada ciclo

Y2=0;// Zera saidas a cada ciclo

Y3=0;// Zera saidas a cada ciclo

Y4=0;// Zera saidas a cada ciclo

Y5 =0;// Zera saidas a cada ciclo

// Contagem de saida

if(millis() - previousMillis > 300) {

// save the last time you blinked the LED

previousMillis = millis();

if (Y0 <= 254) {

Y0++;// auto se encrementa

} else {Y0=0;} // Zera saidas}

}

//------------------------------------------------------------

//Escreve na Saidas

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin,Y5); //Escreve na Saida 5

shiftOut(dataPin, clockPin,Y4); //Escreve na Saida 4

shiftOut(dataPin, clockPin,Y3); //Escreve na Saida 3

shiftOut(dataPin, clockPin,Y2); //Escreve na Saida 2

shiftOut(dataPin, clockPin,Y1); //Escreve na Saida 1

shiftOut(dataPin, clockPin,Y0); //Escreve na Saida 0

//return the latch pin high to signal chip that it

//no longer needs to listen for information

digitalWrite(latchPin, 1);

//------------------------------------------------------------

}

É preciso cortar o pino 10 do ULN2803 para a placa funcionar.

Todos os aquivo necessários para construção e fabricação se encontra em anexo no rodapé