#1 2017-05-01 17:07:12

Andruwkaa
Учасник
Зареєстрований: 2017-04-30
Повідомлень: 2

Датчики дальности и ШИМ вентиляторов

Здравствуйте!
Помогите решить проблему с подключением такой схемы к блоку на 12 вольт.
Проблема в том, что при подключении к блоку, вентиляторы начинают постоянно крутиться, а постепенно увеличивать скорость, и очень сильно начинает греться вся плата, особенно стабилизатор напряжения(палец можно обжечь).

Идея программы в том, что при поднесении к каждому из датчиков поочереди, кулеры начинают крутиться быстрее и быстрее.

при работе от USB одного вентилятора - все ок.

на схеме поставил двигатель, но в жизни - это 9 кулеров от компа + нижний светодиод - это 3 светодиодных ленты по 20 см длиной.

Не судите строго) первый раз строил схему и играюсь с ардуино по интрукции из "матрешки", дополняя своими задумками)
Буду рад критике и учениям от более продвинутых)


5a9bs_vjbMFRmILVEWFbV3QfuQiTaTCWCGzgIAK7LJkc4RiVHVkYbAnH6_bUl2H71gKsZq6V8PetzI4PDN22DQ%3D%3D?uid=19546630&filename=%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202017-05-01%20%D0%B2%2016.43.28.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&tknv=v2&size=1280x671

Код программы:

int IRpin = A1; // IR photodiode on analog pin A0
int IRemitter = 2;// IR emitter LED on digital pin 2
int ambientIR; // variable to store the IR coming from the ambient
int obstacleIR; // variable to store the IR coming from the object
int value[10]; // variable to store the IR values
int distance; // variable that will tell if there is an obstacle or not
int fanpin = 11;
int flag=0;
int firstled = 7;
int ledcount = 5;
int pause;

void blink(int ledpin)
{
  digitalWrite(ledpin,HIGH);
  delay(200);
  digitalWrite(ledpin,LOW);
}

void setup(){
  for(int i=0;i<ledcount;i++)
{
  pinMode(i+firstled,OUTPUT);
  blink(i+firstled);
}
digitalWrite(firstled,HIGH);
pinMode(IRemitter,OUTPUT);
Serial.begin(9600); // initializing Serial monitor
pinMode(fanpin,OUTPUT);
TCCR2B = (TCCR2B & 0xF8) | 0x01;
//TCCR2B = TCCR2B & B11111000 | B00000001;//pwm частота arduino 32КГц
//TCCR0B = TCCR0B & B11111000 | B00000001;
delay(100);
}

void loop(){
  
distance = readIR(5); // calling the function that will read the distance and passing the «accuracy» to it
Serial.println(distance); // writing the read value on Serial monitor
buzzer();// uncomment to activate the buzzer function

}

int readIR(int times){
for(int x=0;x<times;x++)
{
digitalWrite(IRemitter,LOW); // turning the IR LEDs off to read the IR coming from the ambient
delay(2); // minimum delay necessary to read values
ambientIR = analogRead(IRpin); // storing IR coming from the ambient
digitalWrite(IRemitter,HIGH); // turning the IR LEDs on to read the IR coming from the obstacle
delay(2); // minimum delay necessary to read values
obstacleIR = analogRead(IRpin); // storing IR coming from the obstacle
value[x] = ambientIR-obstacleIR; // calculating changes in IR values and storing it for future average
distance+=value[x];
//Serial.println(ambientIR);
//Serial.println(obstacleIR);
//delay(100);
}

/*for(int x=0;x<times;x++)
{ // calculating the average based on the «accuracy»

}*/
return(distance/times); // return the final value
}

//— Function to sound a buzzer for audible measurements —//
void buzzer(){

  
    switch(flag){
      case 0:
      if(distance>7)
      {
        break;
      }
      else{
        
        pause+=1;
      }
      if(pause>10){
        if(distance>3){
      flag+=102;
      analogWrite(fanpin,flag);
      Serial.println("FIRST");
      delay(100);
      IRemitter = 3;
      pinMode(3,OUTPUT);
      IRpin= A2;
      digitalWrite(firstled,LOW);
      delay(200);
      digitalWrite(8,HIGH);
      pause =0;
      }}
      break;
    case 102:
    if(distance>7)
      {
        break;
      }
      else{
        pause+=1;
      }
      if(pause>10){
        if(distance>4){
        flag+=51;
        analogWrite(fanpin,flag);
        Serial.println("SECOND");
        delay(100);
      
    IRemitter = 4;
    pinMode(4,OUTPUT);
    IRpin= A3;
    digitalWrite(8,LOW);
    delay(200);
    digitalWrite(9,HIGH);
    pause=0;
    }}
    break;
    case 153:
     if(distance>7)
      {
        break;
      }
      else{
        pause+=1;
      }
      if(pause>10)
      {
        if(distance>4){
    flag+=51;
        analogWrite(fanpin,flag);
    IRemitter = 5;
    pinMode(5,OUTPUT);
    IRpin= A4;
    digitalWrite(9,LOW);
    delay(200);
    digitalWrite(10,HIGH);
    Serial.println("Third");
    pause=0;
    }}
    break;
    case 204:
     if(distance>7)
      {
        break;
      }
      else{
        pause+=1;
      }
      if(pause>10){
        if(distance>4){
    flag+=51;
        analogWrite(fanpin,flag);
    IRemitter = 5;
    pinMode(5,OUTPUT);
    IRpin= A4;
    digitalWrite(9,LOW);
    delay(200);
    digitalWrite(10,HIGH);
    Serial.println("Four");
    pause=0;
    }}
    break;
    /*case 204:
    IRemitter = 6;
    pinMode(6,OUTPUT);
    IRpin= A5;
    digitalWrite(10,LOW);
    delay(200);
    digitalWrite(11,HIGH);
    break;*/
    }
  //Serial.println(flag);
  if(flag==255)
  {
    for(int j=0;j<3;j++)
    {
    for(int i=5;i<8;i++)
    {
      digitalWrite(i,HIGH);
    }
    delay(1000);
    for(int i=5;i<8;i++)
    {
      digitalWrite(i,LOW);
    }
  }
  flag+=1;
  }
  delay(10);
  
}
//end

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму