Ви не увійшли.
Здравствуйте!
Помогите решить проблему с подключением такой схемы к блоку на 12 вольт.
Проблема в том, что при подключении к блоку, вентиляторы начинают постоянно крутиться, а постепенно увеличивать скорость, и очень сильно начинает греться вся плата, особенно стабилизатор напряжения(палец можно обжечь).
Идея программы в том, что при поднесении к каждому из датчиков поочереди, кулеры начинают крутиться быстрее и быстрее.
при работе от USB одного вентилятора - все ок.
на схеме поставил двигатель, но в жизни - это 9 кулеров от компа + нижний светодиод - это 3 светодиодных ленты по 20 см длиной.
Не судите строго) первый раз строил схему и играюсь с ардуино по интрукции из "матрешки", дополняя своими задумками)
Буду рад критике и учениям от более продвинутых)
Код программы:
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