Всем привет! Недавно я погрузился в программирование на ардуино. Меня больше всего интересует создание уникальных девайсов для быта/мастерской. В радиоэлектронике я понимаю средне, программирование на C++ учил в школе, сейчас вспоминаю.
Возникла необходимость в настраиваемом реле давления.
Было куплено:
-Ардуино Нано
-дисплей TM1637 с десятичными точками (пока не понимаю как управлять точками через библиотеку GyverTM1637)
-модуль реле (временно, в будущем планирую управлять через мосфет)
-датчик давления до 1.2МПа
Подключил я всё вот так:
При питании от USB всё работало супер. В гараже подключил к компьютерному БП (переделан, добавлена регулировка напряжения и защита от КЗ). Выставил ~12.4В.
Вроде всё работало как и должно, я дал компрессором давление в датчик ~1.5бар. Реле не щёлкало, светодиод питания горел, но светодиод, который загорается при активации реле еле светился. Потом я заметил что индикация на дисплее не горит. И всё. Ардуина не подаёт признаков жизни, не шьётся. Питание есть и 5В, и 3.3В. Похоже сам проц. Пока некогда сесть посмотреть осцилографом подробнее есть ли признаки жизни.
Я ничего не понял. Всё проверил. Всё подключено верно.
Решил попробовать с LGT8F328P. Зашил её. Проверил ещё раз. При питании через USB всё работает как и должно. Дома подключил к регулируемому БП. БП имеет трансформатор, далее регулятор вроде на XL4015. Выставил ~12.4В. Всё работает супер. Я довольный. Реле щёлкает, когда ртом надую. Я просто счастлив. LGT8F328P love forever!
Решил попробовать запитать от аккумулятора от шуруповёрта (в будущем планируется питать от авто аккума). Я его сам собирал.
Напряжение аккума 11.6В. Подключаю и тишина. Вроде даже какой-то дымок пошёл. Но я кратковременно тыкнул. Полярность точно не перепутал. Думаю ладно, подключал обратно к регулируемому БП светодиод питания на миллисекунду мигнул и LGT8F328P окончательно погасла. При питании от USB тишина, признаков жизни не подаёт.
Я расстроен. Решил зарегаться и спрашивать у более опытных. Что не так. Где я допустил ошибку?
Есть мысль что нужно было к А6 подключать датчик через резистор 100 Ом. Но как его отсутствие повлияло.
Ребята, я без понятия. Убивать ещё Ардуино я не хочу. Это просто финансово для меня больно.
Подскажите, пожалуйста в чём я не прав.
Спасибо.
Извиняюсь, возможно я допустил ошибки при создании темы. Правила читал (честно), но всё же, первый раз пишу здесь.
Всем мир!
Возникла необходимость в настраиваемом реле давления.
Было куплено:
-Ардуино Нано
-дисплей TM1637 с десятичными точками (пока не понимаю как управлять точками через библиотеку GyverTM1637)
-модуль реле (временно, в будущем планирую управлять через мосфет)
-датчик давления до 1.2МПа
Вот такой код я написал, сразу после ночной смены на заводе)):
#define CLK 3 //пин дисплей
#define DIO 2 //пин дисплей
#define P A6 //пин сенсор давления
#define BTNDN 10 //пин кнопки буст снизить
#define BTNUP 11 //пин кнопки буст поднять
#define BTN 12 //пин кнопки просмотр ставки и макс значения
#define RELAY 4 //пин реле бустконтроллера
#define DEBOUNCE 100//антидребезг кнопок, миллисекунды
int pressure = 0;
int maxpress = 0;
boolean flag, btn;
unsigned long t;
unsigned long t1;
int set = 200; //ставка давления 200 это ~1 бар относительного давления
#include "GyverTM1637.h"
GyverTM1637 disp(CLK, DIO);
void setup() {
disp.clear();
disp.brightness(7);
pinMode(13, OUTPUT); //13 пин используется для светодиодной индикации
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
}
void loop() {
for (int i = 0; i < 32000; i++) { //просто "вечный" цикл, создан чтобы организовать пропуск обработки первого значения с датчика, так как оно высокое, из-за этого это значение ложно записывается в maxpress
pressure = analogRead(P); //считывание датчика давления
pressure = map(pressure, 0, 4095, 0, 1200);
pressure = constrain(pressure, 0, 1200);
if (i == 0) pressure = 0; //пропуск обработки первого считанного значения
if (pressure > maxpress) maxpress = pressure;
if (!digitalRead(BTN)) { //просмотр ставки и макс значения
if (millis() - t > 500) {
flag = !flag;
t = millis();
}
if (flag) {
digitalWrite(13, HIGH);
disp.displayInt(set);
}
else {
digitalWrite(13, LOW);
disp.displayInt(maxpress);
}
}
else disp.displayInt(pressure); //отображения давления при отпущеных кнопках
if (pressure > set && (millis() - t1 > 250)) { //включение и задержка реле
digitalWrite(RELAY, HIGH);
t1 = millis();
}
if (pressure < set && (millis() - t1 > 250)) { //отключение и задержка реле
digitalWrite(RELAY, LOW);
t1 = millis();
}
if (!digitalRead(BTNDN) && (millis() - t > DEBOUNCE)) { //снизить ставку
set -= 5;
t = millis();
disp.displayInt(set);
digitalWrite(13, HIGH);
delay(DEBOUNCE);
digitalWrite(13, LOW);
}
if (!digitalRead(BTNUP) && (millis() - t > DEBOUNCE)) { //поднять ставку
set += 5;
t = millis();
disp.displayInt(set);
digitalWrite(13, HIGH);
delay(DEBOUNCE);
digitalWrite(13, LOW);
}
delay(50); //задержка считывания, думаю в ней нет необходимости
}
}
При питании от USB всё работало супер. В гараже подключил к компьютерному БП (переделан, добавлена регулировка напряжения и защита от КЗ). Выставил ~12.4В.
Вроде всё работало как и должно, я дал компрессором давление в датчик ~1.5бар. Реле не щёлкало, светодиод питания горел, но светодиод, который загорается при активации реле еле светился. Потом я заметил что индикация на дисплее не горит. И всё. Ардуина не подаёт признаков жизни, не шьётся. Питание есть и 5В, и 3.3В. Похоже сам проц. Пока некогда сесть посмотреть осцилографом подробнее есть ли признаки жизни.
Я ничего не понял. Всё проверил. Всё подключено верно.
Решил попробовать с LGT8F328P. Зашил её. Проверил ещё раз. При питании через USB всё работает как и должно. Дома подключил к регулируемому БП. БП имеет трансформатор, далее регулятор вроде на XL4015. Выставил ~12.4В. Всё работает супер. Я довольный. Реле щёлкает, когда ртом надую. Я просто счастлив. LGT8F328P love forever!
Решил попробовать запитать от аккумулятора от шуруповёрта (в будущем планируется питать от авто аккума). Я его сам собирал.
Я расстроен. Решил зарегаться и спрашивать у более опытных. Что не так. Где я допустил ошибку?
Есть мысль что нужно было к А6 подключать датчик через резистор 100 Ом. Но как его отсутствие повлияло.
Ребята, я без понятия. Убивать ещё Ардуино я не хочу. Это просто финансово для меня больно.
Подскажите, пожалуйста в чём я не прав.
Спасибо.
Извиняюсь, возможно я допустил ошибки при создании темы. Правила читал (честно), но всё же, первый раз пишу здесь.
Всем мир!