Arduino controlls 12V fan. After some time the fan goes on fullspeed.


hey guys, want control arduino uno , potentiometer 12v pwm fan. workes fine after time fan goes on fullspeed , potentiometer doesnt work. if connect arduino power supply , pc works fine.
this code.
code: [select]
// pins
#define pin_blau 6
 
 
// variablen
int eingabe;
int dauer_low = 1;
int dauer_high = 9;
int basetime = 10; // insgesamt 10 ms
 
void setup()
{
  // initialisieren
  pinmode(pin_blau, output);
 
}
 
void loop(){
 
  if(dauer_low * 10 != 0){
    digitalwrite(pin_blau, low);
    delaymicroseconds(dauer_low * 10);
  }
 
  if(dauer_high * 10 != 0){
    digitalwrite(pin_blau, high);
    delaymicroseconds(dauer_high * 10);
  }
 
 
  float sensorvalue = analogread(a0);
  if (sensorvalue <= 102.3){
  eingabe = 0;
  }
  if (sensorvalue > 102.3 && sensorvalue <= 204.6){
  eingabe = 1;
  }
  if (sensorvalue > 204.6 && sensorvalue <= 306.9){
  eingabe = 2;
  }
  if (sensorvalue > 306.9 && sensorvalue <= 409.2){
  eingabe = 3;
  }
  if (sensorvalue > 409.2 && sensorvalue <= 511.5){
  eingabe = 4;
  }
  if (sensorvalue > 511.5 && sensorvalue <= 613.8){
  eingabe = 5;
  }
  if (sensorvalue > 613.8 && sensorvalue <= 716.1){
  eingabe = 6;
  }
  if (sensorvalue > 716.1 && sensorvalue <= 818.4){
  eingabe = 7;
  }
  if (sensorvalue > 818.4 && sensorvalue <= 920.7){
  eingabe = 8;
  }
  if (sensorvalue > 920.7 && sensorvalue <= 1023){
  eingabe = 9;
  }
 
  if(eingabe == 0)
    eingabe = 10;
  else
    eingabe = 10 - eingabe;
 
  dauer_low = eingabe;
  dauer_high = basetime - eingabe;
 
  }



i used code


code: [select]

#define pin_blau 6
#define pin_yellow 2
#define interrupt_gelb 0  // interrupt 0 == pin 2
#define update_zyklus 1000 // jede sekunde 1 ms ausgabe der geschwindigkeit.
const int anzahl_interrupts = 1; // anzahl der interrupts pro umdrehung (1 oder 2)
 
// variablen
int counter_rpm = 0;
int rpm = 0;
unsigned long letzte_ausgabe = 0;
char eingabe;
int dauer_low = 1;
int dauer_high = 9;
int basetime = 10; // insgesamt 10 ms
 
void setup()
{
  // initialisieren
  serial.begin(9600);
  pinmode(pin_blau, output);
    pinmode(pin_yellow, input);
  digitalwrite(pin_yellow, high);
  attachinterrupt(interrupt_gelb, rpm_fan, falling);
}
 
void loop(){
 
  if(dauer_low * 10 != 0){
    digitalwrite(pin_blau, low);
    delaymicroseconds(dauer_low * 10);
  }
 
  if(dauer_high * 10 != 0){
    digitalwrite(pin_blau, high);
    delaymicroseconds(dauer_high * 10);
  }
 
  if (serial.available()){
    eingabe = serial.read() - 48; // ascii 0-9 lesen
    if(eingabe == 0)
      eingabe = 10;
    else
      eingabe = 10 - eingabe;
 
    dauer_low = eingabe;
    dauer_high = basetime - eingabe;
    serial.print("dauer des high: ");
    serial.println(dauer_high);
  }
 
  if (millis() - letzte_ausgabe >= update_zyklus){
    // interrupt deaktivieren um das rechnen nicht zu unterbrechen.
    detachinterrupt(0);
 
    // rpm errechnen und ausgeben:
    rpm = counter_rpm * (60 / anzahl_interrupts);
    serial.print("rpm: ");
    serial.println(rpm);
 
    // counter zuruecksetzen
    counter_rpm = 0;
 
    // zeitpunkt setzen
    letzte_ausgabe = millis();
 
    // interrupt wieder aktivieren
    attachinterrupt(0, rpm_fan, falling);
  }
}
 
 
// interrupt zaehlt den rpm-counter hoch
void rpm_fan(){
  counter_rpm++;
}


the ground of power supply arduino , fan connected groud of fan. in secod code write in serial monitor numbers 0 9. 0 means off , 9 means full power.

why not use analogwrite() function output pwm signal instead of trying construct 1 scratch? not sure if helps, it's best can based on have provided.

how time take pot control stop working? conditions of such event?


Arduino Forum > Using Arduino > Programming Questions > Arduino controlls 12V fan. After some time the fan goes on fullspeed.


arduino

Comments

Popular posts from this blog

Help with codes to add 1 more shift register and add more to matrix LED

tcp client

Can't read sms using Thinker A7 communicate with Arduino