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é