acionamento de Motor DC 12V por transistor não funciona com "DigitalWrite"

Fiz um circuito com transistor e diodo para acionar um motor DC 12V através da resposta de um sensor analógico de gás MQ-2. Testei o programa simples abaixo e o motor funcionou bem.

int Pincooler = 8;
int PinA0 = A0;

int leitura_sensor = 30;
void setup() {
pinMode(PinA0, INPUT);
pinMode(Pincooler, OUTPUT);
Serial.begin(9600);

}

void loop() {
int valor_analogico = analogRead(PinA0);
Serial.print("Leitura: ");
Serial.println(valor_analogico);
if (valor_analogico > leitura_sensor){
Serial.print("Limpando ambiente contaminado\n");
digitalWrite(Pincooler, HIGH);
delay(10000);
}else{
digitalWrite(Pincooler, LOW);
}
delay(100);

}

Quando carreguei outro programa no arduino, com mais linhas de programação, porém com o mesmo princípio de acionamento do motor, ele não funciona. Dá apenas um "click", ou um "passo".

#define PIN_MQ2 (0)
#define RL (5)
#define FATOR_AR_LIMPO (9.62)

#define ITERACOES_CALIBRACAO (50)
#define ITERACOES_LEITURA (5)

#define PinCooler (8)

float CurvaFumaca[3] = {2.3,0.53,-0.44};

float Ro = 10;
int Limiar_Acionamento = 5000;

void setup()
{
Serial.begin(9600);
Serial.print("Calibrando o sensor MQ2...\n");
Ro = Calibracao_Ro(PIN_MQ2); //calibra o sensor MQ2
Serial.print("Finalizando a calibracao...\n");
Serial.print("Calibracao concluida...\n");
Serial.print("Valor de Ro=");
Serial.print(Ro);
Serial.print("kohm");
Serial.print("\n");
}

void loop()
{

float PPM = calculaPPMGas(leitura_MQ2(PIN_MQ2)/Ro,CurvaFumaca);
Serial.print("Concentracao de Fumaca:");
Serial.print(PPM);
Serial.print( "ppm " );
Serial.println("");

if (PPM > Limiar_Acionamento){
Serial.print("Ambiente contaminado\n");
Serial.print("Limpando ambiente contaminado\n");
digitalWrite(PinCooler, HIGH);
delay(10000);
}else{
digitalWrite(PinCooler, LOW);
}
delay(100);
}

float calcularRSArLimpo(int tensao_bits) //funcao que recebe o tensao (dado cru) e calcula a resistencia efetuada pelo sensor. O sensor e a resistência de carga forma um divisor de tensão.
{
return (((float)RL*(1023-tensao_bits)/tensao_bits));
}

float Calibracao_Ro(int mq_pin)
{
int i;
float valor=0;

for (i=0;i<ITERACOES_CALIBRACAO;i++) {
valor += calcularRSArLimpo(analogRead(mq_pin));
delay(500);
}
valor = valor/ITERACOES_CALIBRACAO;

valor = valor/FATOR_AR_LIMPO;
return valor;
}

float leitura_MQ2(int mq_pin)
{
int i;
float rs=0;

for (i=0;i<ITERACOES_LEITURA;i++) {
rs += calcularRSArLimpo(analogRead(mq_pin));
delay(50);
}

rs = rs/ITERACOES_LEITURA;

return rs;
}

int calculaPPMGas(float rs_ro, float *pcurve)
{
return (pow(10,( ((log(rs_ro)-pcurve[1])/pcurve[2]) + pcurve[0])));
}

Onde vocês acham que está o erro?

E se tentasses fazer algo como... colocar Serial.print no teu código para entender o que se passa?

Aquele delay de 10 segundos diz-me que deveria andar pelo menos 10 segundos e não fazer um click.
Logo o próximo passo será saber como estás a alimentar o projecto e como tens tudo ligado.