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

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts