Termómetro Arduino con Display de Tira de Leds

Hola quiero modificar un circuito de Arduino que es un Termómetro con el sensor DS18B20 y el IC 74HC595 que controla 4 displays de 7 segmentos , yo quiero quitar los displays y sustituirlos por tiras de Led , por internet encontré un circuito que lleva el 74HC595 con el ULN2003 que controla los segmentos A-B-C-D-E-F-G de la tira de leds y los cátodos a 12v , les pongo las fotos del circuito a modificar , como puedo adaptar el ULN2003 al circuito de la imagen , necesitaría 4 uln2003 para los displays , tendría que modificar el código .

circuito modificar.png

circuito modificar.png

No necesitas 4 ULN, solo llevaría 1 porque el circuito es multiplexado y tienes que intercalarlo entre los segmentos y el 595 como se ve en el segundo esquema. El resto queda igual, excepto los cátodos que necesitarán transistores.
El código, en principio, sería el mismo (tal vez la única modificación sería invertir la salida de los pines 8 a 10 según que transistores se usen).

PERO confirma el consumo de cada tira de LED que vas a usar para ver si el ULN es capaz de manejarlos (500 mA por canal) o necesitas buscar otra solución que maneje mayor corriente.
Saludos

Hola monte el circuito de la foto de arriba con los 4 displays para hacer una prueba , bien cuando cargo el código en los 4 displays se encienden todos los segmentos marcando 8 y no marca bien la lectura , te cuento un poco a las salidas del Arduino d8 d9 d10 le puse 1 resistencia de 4k7 que va a la base del transistor bc557 y el colector alimenta el ánodo de los displays , dicen que utilice el 2n2222 , te pongo el código haber si lo puedes revisar , lo que tu dices de la única modificación sería invertir la salida de los pines 8 a 10 según que transistores se usen , eso como se programa , me puedes orientar .

#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

DeviceAddress insideThermometer;

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

const int latchPin = 8;// Pin connected to ST_CP of 74HC595

const int clockPin = 9;// Pin connected to SH_CP of 74HC595

const int dataPin = 10;// Pin connected to DS of 74HC595

const int digitPins[4] = {3,4,5,6}; //pins to control the 4 common anode pins of display

const byte digit[12] = //seven segment digit bits + blank + minus

{

B00111111, //0

B00000110, //1

B01011011, //2

B01001111, //3

B01100110, //4

B01101101, //5

B01111101, //6

B00000111, //7

B01111111, //8

B01101111, //9

B00000000, //Blank

B01000000 //-

};

int digitBuffer[4] = {

1};

int digitScan = 0;

int soft_scaler = 0;

float tempC, tempF;

int tmp;

boolean sign = false;

void setup() {

TCCR2A = 0;

TCCR2B = (1<<CS21);

TIMSK2 = (1<<TOIE2);

TCNT2 = 0;

pinMode(ledPin, OUTPUT);

for(int i=0;i<4;i++)

{

pinMode(digitPins*,OUTPUT);*
}
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
sensors.begin();
sensors.getAddress(insideThermometer, 0);
}
ISR(TIMER2_OVF_vect) {
soft_scaler++;
if(soft_scaler==15)
{
refreshDisplay();
soft_scaler = 0;
}
};
void refreshDisplay()
{
for(byte k=0;k<4;k++)
{
digitalWrite(digitPins[k], LOW);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
digitalWrite(latchPin, HIGH);
delayMicroseconds(50);
digitalWrite(digitPins[digitScan], HIGH);
digitalWrite(latchPin, LOW);
if(digitScan==1)
{
shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] | B10000000)); *
}
else
{
shiftOut(dataPin, clockPin, MSBFIRST, ~digit[digitBuffer[digitScan]]);
}
digitalWrite(latchPin, HIGH);
digitScan++;
if(digitScan>3) digitScan=0;
}
void loop()
{
digitalWrite(ledPin, HIGH);
sensors.requestTemperatures();
tempC = sensors.getTempC(insideThermometer);
_tmp = int(tempC
10);_
if (tempC < 0){
sign = true;
tmp = abs(tmp);
}
else{
sign = false;
}
if (int(tmp)/1000 == 0){
digitBuffer[3] = 10;
if (sign){
digitBuffer[3] = 11;
}
}
else{
digitBuffer[3] = int(tmp)/1000;
}
if (int(tmp)/1000 == 0 && (int(tmp)%1000)/100 == 0) {
digitBuffer[2] = 10;
if (sign){
digitBuffer[2] = 11;
digitBuffer[3] = 10;
}
}
else{
digitBuffer[2] = (int(tmp)%1000)/100;
}
digitBuffer[1] = (int(tmp)%100)/10;
digitBuffer[0] = (int(tmp)%100)%10;
digitalWrite(ledPin, LOW);
delay(500);
}

En principio pon el código como corresponde (Ver Normas del foro, punto 7).

Elegiste el transistor equivocado. El 2N2222 es NPN y el BC557 es PNP. En todo caso podrías poner el BC547 o BC548 en lugar del 2N2222 (solo para pruebas con displays de 7 segmentos, no se te ocurra conectarle una tira porque "vuela").