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.
i used code
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.
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?
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
Post a Comment