#1 Re: Апаратні питання » Блок контролю цілісності ламп » 2025-05-10 20:49:00

B21
jokeer пише:

Згадалося бояніще про тойоту, у якої нарешті забарахлив карбюратор smile)

Тойота не ламається big_smile big_smile big_smile

На жаль з компараторами ще не мав справи та не знаю як вони працюють roll

#2 Re: Апаратні питання » Блок контролю цілісності ламп » 2025-05-10 20:45:47

B21
dimich пише:

Не зовсім зрозуміло, що там у автора за ідея з "захистом" та реле, що та від чого захищати.

Ідея із захистом така: Ардуїно через транзистор розмикає "нормально замкнуте реле", через яке йде +12 на пряму до ламп, якщо ардуїно виходить з ладу, то транзистор закривається і контакт на реле замикає 12в на пряму з ліхтарями. Рідний блок тому доказ, що щось перегоріло і ні стопів ні габаритів, добре що поворотники поза цією схемою, і немає жодного "аварійного режиму", тільки паяльник із собою возити.

#3 Re: Апаратні питання » Блок контролю цілісності ламп » 2025-05-10 20:44:19

B21
dimich пише:

Там взагалі, мабуть, на кожну лампу свій "датчик", інакше навіщо виносити окремий блок в багажник?

2 лампи 10Вт на підсвічування номера
2 лампи 10Вт на передні габарити
4 лампи 21/5вт, на задні габарити/стопи

У вас дуже цікава схема, як я зрозумів поріг включення лампи на панелі регулюється підстроювальним резистором? Ніколи не мав справу зі схемами управління без ардуїно... цікаво

#4 Re: Апаратні питання » Блок контролю цілісності ламп » 2025-05-09 16:56:41

B21
jokeer пише:

Складно.
Поремонтувати чи знайти донора ніяк? wink
Бо колхозити своє - це треба добре врюхати в схему проводки, щоб не понадобилрсь тягнути купу проводів.
Я колись колхозив реле для світла в Жигулі - нормальний кусок геморою, хоч на схемі все просто. А тут навіть на схемі буде складно.

На жаль знайти донора не реально, а ремонтувати швидше за все нічого, візуально все ціле крім 5 мікросхем, які ніяк не перевіриш і не ідентифікуєш, щоб пошукати її в інтернет і зрозуміти що вона робить і як влаштована. А тягнути зайвих проводів не треба, головні 12в від габаритів і 12в від стопів приходять у цей блок який у багажнику та інші дроти із задніх ліхтарів приходять туди ж, досить просто пропустити 12в через 2 датчики струму (один на габарити а інший на стоп). А ардуїно вже сама включатиме лампу на панелі. Тут більше питання чи підійде датчик струму ACS712 30A GY-712  для цієї функції? ( https://arduino.ua/ru/prod618-datchik-toka-acs712-30a-gy-712 )

#5 Апаратні питання » Блок контролю цілісності ламп » 2025-05-09 13:34:04

B21
відповідей: 22

Всім привіт, потребую вашої поради, у мене на Toyota 80х років є блок який запалює лампу на панелі якщо перегорає лампа габаритів або стопаmini_IMG_3851.jpgmini_IMG_3852.jpg. Рідний блок перестав працювати і я припаяв перемички, щоб задні ліхтарі почали працюватиmini_Bez-imeni.png. Відповідно, лампа на панелі вимкнена. Хочу зробити новий блок на основі ардуїно, був варіант зробити так, щоб ардуїно зчитувала опір всіх ламп в робочій системі і якщо лампа перегорає то опір змінюється і запалюється лампа на панелі, але я не знаю як це правильно реалізувати (підключити до самої ардуїни), а потім знайшов ось такий датчик струму ACS712 30Аmini_e412391cf05cc49439bd9f67ee9ca638.jpg. Думаю використовувати його, + паралельно з цим поставити "захист" у вигляді реле і транзистора який розмикатиме контакт реле, і якщо раптом ардуїно вийде з ладу і не керуватиме - реле замкне контакт на пряму і у мене не пропаде світло на задніх ліхтарях. Що скажете щодо цієї ідеї?

#6 Re: Програмування Arduino » Як правильно перервати цикл? » 2023-03-19 23:00:07

B21
гоcть пише:

Внимание вопрос: Что будет, если нажать на кнопку, когда датчик Холла стоит на магните?  lol

Магнит никогда не станет на датчике холла, даже после срабатывания датчика холла моторчик по инерции проворачивает магнит за его пределы, нереально что бы мотор остановил магнит напротив датчика, ну а что бы перестраховаться можно после срабатывания датчика добавить задержку 0.2 - 0.4сек, но тогда мотор стартовать будет с другой точки.

#7 Re: Програмування Arduino » Як правильно перервати цикл? » 2023-03-18 22:49:56

B21
г0cть пише:
B21 пише:

Снова не сработало реле

Вот схема подключения

С такой схемой и не будет. Код не соответствует схеме. По схеме кнопка замыкается на землю, у вас в коде (и соотв. у меня) на +. Что за датчик? Когда он срабатывает приходит + или 0?

int hollPin = 6;
int MotorPin = 4;
int PrivodPin = 2;
bool flag = 0;

void setup() {
  Serial.begin(9600);
  pinMode(MotorPin, OUTPUT);
  digitalWrite(MotorPin, HIGH);
  pinMode(PrivodPin, INPUT_PULLUP);
  pinMode(hollPin, INPUT_PULLUP);

}
void loop() {

  if (!digitalRead(PrivodPin) && !flag) {
    digitalWrite(MotorPin, LOW);
    flag = 1;
  }
  if (!digitalRead(hollPin) && flag) digitalWrite(MotorPin, HIGH);

  if (digitalRead(PrivodPin) && flag)flag = 0;

}

на схеме в симуляторе: переключатель - кнопка, кнопка -датчик
https://wokwi.com/projects/359522045614208001

з/ы ну и дребезг никто не отменял  smile

Кароч походу датчик холла по одному месту пошел, поставил новый цифровой датчик A3144, при срабатывании приходит 0. Последняя версия твоего кода рабочая единственное что убрал PULLUPпы, резисторы оба оставил и добавил delay(10); после if (!digitalRead(PrivodPin) && !flag) {.
Моя версия кода тоже сработала, правда и в одной и другой версии +3000мс не сработали, то есть если датчик холла не сработает то мотор будет крутится бесконечно. 3 сек была тип защита, или датчик или время, и получается что датчик холла отключается только тогда когда замкнута кнопка, а если вдруг кнопка отожмется назад то датчик холла не сработает и будет ждать сначала нажатую кнопку а потом сработает...
А так всем огромное спасибо за помощь)

#8 Re: Програмування Arduino » Як правильно перервати цикл? » 2023-03-17 23:40:41

B21
г0cть пише:

Если правильно понял алгоритм, то как-то так

int hollPin = 6;
int MotorPin = 4;
int PrivodPin = 2;
bool flag = 0;

void setup() {
  Serial.begin(9600);
  pinMode(MotorPin, OUTPUT);
  digitalWrite(MotorPin, HIGH);
  pinMode(PrivodPin, INPUT);
  pinMode(hollPin, INPUT);

}
void loop() {

  if (digitalRead(PrivodPin) && !flag) {
    digitalWrite(MotorPin, LOW);
    flag = 1;
  }
  if (digitalRead(hollPin) && flag) digitalWrite(MotorPin, HIGH);

  if (!digitalRead(PrivodPin) && flag)flag = 0;

}

Снова не сработало реле, почему то светодиод промигивает на 20% яркости и все - такое ощущение что контакт плохой, НО когда заливаешь предыдущий скетч без while - светодиод загорается на полную и реле работает как надо.
Если бы был плохой контакт - никакой бы скетч не заработал, а так даже через setup включаешь, 5 сек и выключаешь - все работает.
Вот схема подключения
sxem1.png

#9 Re: Програмування Arduino » Як правильно перервати цикл? » 2023-03-17 19:15:55

B21
Roman1984 пише:

Обратите внимание, что внутри цикла while(true) переменная currentTime и переменная startTime уже не зависят от millis() и как следствие не меняются.

int hollPin = 6;
int MotorPin = 4;
int PrivodPin = 2; 
int FlagOld = 0;
int FlagNew = 0;

unsigned long currentTime;    
unsigned long startTime;

void setup() {
  Serial.begin(9600);
  pinMode(MotorPin, OUTPUT);
  digitalWrite(MotorPin, HIGH);
  pinMode(PrivodPin, INPUT);
  digitalWrite(PrivodPin, LOW);
  pinMode(hollPin, INPUT);
  currentTime = millis();       
  startTime = currentTime;  
  
}
void loop() {
 FlagNew = digitalRead(PrivodPin);
  if (FlagOld != FlagNew && FlagNew == 1) {
    digitalWrite(MotorPin, LOW);    
    while(true){
        currentTime = millis(); 
        if (digitalRead(hollPin) == HIGH || (currentTime == startTime + 3000)) {
      break;
      } 
    }

  digitalWrite(MotorPin, HIGH);
  FlagOld = FlagNew;
  }
  else if (FlagOld != FlagNew)
    FlagOld = FlagNew;
  }

Немного изменил переменные но реле все равно не включается...

В моей предыдущей версии кода реле работало но не было того самого цикла который прерывал работу реле после срабатывания датчика холла. Собственно вместо

delay(2000);

и был написан цикл но реле на нем не включается а лампочка на нем слегка промигивает как будто контакт плохой...

//рабочая версия без цикла
FlagNew = digitalRead(PrivodPin);
  if (FlagOld != FlagNew && FlagNew == 1) {
    digitalWrite(MotorPin, LOW);
    delay(2000);
    digitalWrite(MotorPin, HIGH);
    FlagOld = FlagNew;
    Serial.println(FlagNew);
  }
  else if (FlagOld != FlagNew)
    FlagOld = FlagNew;

#10 Програмування Arduino » Як правильно перервати цикл? » 2023-03-17 11:56:26

B21
відповідей: 14

Всім привіт, підкажіть, як правильно перервати цикл.
Принцип роботи коду:
Натискаєш кнопку – вмикається реле – після спрацьовування датчика холу – вимикається реле, кнопка весь цей час натиснута – відпускаєш кнопку – нічого не відбувається – далі натискаєш і все по колу.
Без циклу while(true) - реле вмикається натисканням кнопки ,
з циклом - на реле злегка спалахує лампочка включення і все.
Як правильно зробити переривання?

int hollPin = 6;
int MotorPin = 4;
int PrivodPin = 2; 
int FlagOld = 0;
int FlagNew = 0;


void setup() {
  Serial.begin(9600);
  pinMode(MotorPin, OUTPUT);
  digitalWrite(MotorPin, HIGH);
  pinMode(PrivodPin, INPUT);
  digitalWrite(PrivodPin, LOW);
  pinMode(hollPin, INPUT);
  
}
void loop() {
 FlagNew = digitalRead(PrivodPin);
  if (FlagOld != FlagNew && FlagNew == 1) {
    digitalWrite(MotorPin, LOW);    
    unsigned long currentTime = millis();    
    unsigned long startTime = millis();
    while(true){
        if (digitalRead(hollPin) == HIGH || (currentTime == startTime + 3000)) {
      break;
      } 
    }

  digitalWrite(MotorPin, HIGH);
  FlagOld = FlagNew;
  }
  else if (FlagOld != FlagNew)
    FlagOld = FlagNew;
  }

#11 Програмування Arduino » Проблемы с Max7219 » 2022-12-28 17:14:53

B21
відповідей: 0

Всем привет, подскажите в чем проблема? В общем подключал к драйверу Max7219 отдельно 8 светодиодов, SEG"и на аноды а катоды на DIG 0, с 8 синими светодиодами все работает и управляется, подключаешь 8 зеленых или 8 красных/желтых - не работает, то есть при включении загораются и горят на одном уровне не реагируя ни на что. (между ISET и +5в стоит резистор 10ком)

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