Ви не увійшли.
Сторінки 1
Привет всем любителям Ардуино. Решил сделать контроллер для управления воздушным коллектором. Из железа купил: Arduino Uno,
датчик ds18b20 в герметичном корпусе-3 шт, одноканальный модуль реле для вентилятора-1 шт, восьмизначный семисегментный модуль индикации на MAX7219 для индикации температуры с датчиков-1 шт, и сервоприводы TowerPro MG996-3 шт. для управления заслонками вентканалов. Скетч писал сам вспоминая вузовский курс программирования так, что если он кривой сильно не кричите.
Проблема в том, что на столе все работало замечательно, но после монтажа начались проблемы. Модуль индикации при включении сервоприводов или реле или Х.З. засвечивается всеми сегментами и перестает реагировать аж до перезапуска контроллера. Но и после перезапуска может показать температуру и через 1-2сек. опять уйти в засвет, и снова до перезапуска. Датчики иногда показывают -125, а иногда 85. Может я где то набокопорил в схеме при сборке? Провода датчиков допаяны до 7 метров проводом 3х0,5мм.кв Между контроллером и модулем индикации примерно 12 метров сигнального экранированного провода 6х0,22. К контроллеру сейчас все припаяно напрямую(резистор на 4.7 ком есть). Блоки питания разные. На контроллер 12v 1.25А снял с лед. подсветки, для серв- старый трансформатор 20В и dc-dc понижающий преобразователь LM2596 3А.
Это первый мой проект подобного рода, поэтому буду благодарен за любой совет.
#include <LedControl.h>
#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>OneWire OneWire_sensors(13);
DallasTemperature sensors(&OneWire_sensors);
Servo myservo1;
Servo myservo2;
Servo myservo3;
int time_d;
LedControl lc = LedControl(7,5,6,1);void setup() {
pinMode(4, OUTPUT);
Serial.begin(9600);
sensors.begin();
lc.shutdown(0,false); // выключаем спящий режим функция lc.shutdown(0,true); снова его включит
lc.setIntensity(0,8); // яркость свечения, доступные значения от 0 до 15
lc.clearDisplay(0);
}void loop() {
Serial.print("Please wait...");
Serial.println(time_d);
sensors.requestTemperatures(); // Команда опроса температуры.
int t0=sensors.getTempCByIndex(0);
int t1=sensors.getTempCByIndex(1);
int t2=sensors.getTempCByIndex(2);
int kollektop=t0;
int podacha=t1;
int obratka=t2;
if(t0<0){t0=t0*-1;}
if(t1<0){t1=t1*-1;}
if(t2<0){t2=t2*-1;}
int t0_tens=t0/10;
int t0_ones=t0-t0_tens*10;
int t1_tens=t1/10;
int t1_ones=t1-t1_tens*10;
int t2_tens=t2/10;
int t2_ones=t2-t2_tens*10;
Serial.print("kollektop=");
Serial.println(kollektop);
Serial.print("podacha=");
Serial.println(podacha);
Serial.print("obratka=");
Serial.println(obratka);
if(kollektop<0||podacha<0||obratka<0){
if(kollektop<0){
lc.setChar(0,7,'-',false);
if(t0<-9){
lc.setDigit(0,6,t0_ones,true);
}
else {
lc.setDigit(0,6,t0_ones,false);
}
lc.setDigit(0,4,t1_tens,false);
lc.setDigit(0,3,t1_ones,false);
lc.setDigit(0,1,t2_tens,false);
lc.setDigit(0,0,t2_ones,false);
}
if(podacha<0){
lc.setChar(0,4,'-',false);
if(t1<-9){
lc.setDigit(0,3,t1_ones,true);
}
else {
lc.setDigit(0,3,t1_ones,false);
}
lc.setDigit(0,7,t0_tens,false);
lc.setDigit(0,6,t0_ones,false);
lc.setDigit(0,1,t2_tens,false);
lc.setDigit(0,0,t2_ones,false);
}
if(obratka<0){
lc.setChar(0,1,'-',false);
if(t2<-9){
lc.setDigit(0,0,t2_ones,true);
}
else {
lc.setDigit(0,0,t2_ones,false);
}
lc.setDigit(0,4,t1_tens,false);
lc.setDigit(0,3,t1_ones,false);
lc.setDigit(0,7,t0_tens,false);
lc.setDigit(0,6,t0_ones,false);
}
}
else{
lc.setDigit(0,7,t0_tens,false);
lc.setDigit(0,6,t0_ones,false);
lc.setDigit(0,4,t1_tens,false);
lc.setDigit(0,3,t1_ones,false);
lc.setDigit(0,1,t2_tens,false);
lc.setDigit(0,0,t2_ones,false);
}
//проверяем режим
if(time_d==1 && t0>=60){time_d=0;
Serial.println("utro");
}
//утро
if(time_d==0 && t0>=60){
Serial.println("utro vhod");
//открываем первую серву канала продувки
myservo1.attach(11);
myservo1.write(170);
delay(1000);
myservo1.detach();
//открываем вторую серву подачи
myservo2.attach(10);
myservo2.write(25);
delay(1000);
myservo2.detach();
//открываем третью серву обратки
myservo3.attach(9);
myservo3.write(42);
delay(1000);
myservo3.detach();
//включаем вентилятор на продувку
digitalWrite(4,LOW);
//переход на день
if((t1-t2)>=5){
Serial.println("prodyvka");
//закрываем канал продувки-вентиляции
myservo1.attach(11);
myservo1.write(170);
delay(1000);
myservo1.detach();
//маркер режима в ночь
time_d=2;
}
}
//проверяем маркер режима и температуру на коллекторе
else if(time_d==0 && t0<60){
Serial.println(2);
//если на коллекторе <30 и текущий день то маркер в ночь
time_d=2;
}
//переход на ночь
//проверяем маркер и температуру
if(time_d==2 && t0<60){
Serial.println("noch");
//выключаем вентилятор
digitalWrite(4,HIGH);
delay(250);
//открываем канал продувки-вентиляции
myservo1.attach(11);
myservo1.write(170);
delay(1000);
myservo1.detach();
//закрываем подачу
myservo2.attach(10);
myservo2.write(88);
delay(1000);
myservo2.detach();
//закрываем обратку
myservo3.attach(9);
myservo3.write(132);
delay(1000);
myservo3.detach();
//меняем маркер на утро
time_d=1;
}
delay(10000);
lc.clearDisplay(0);
}
Сторінки 1