Двухуровневая подсветка ног в автомобиле

Arturka

✩✩✩✩✩✩✩
18 Ноя 2019
7
0
Приветствую всех! Хочу забабахать двухуровневую подсветку в авто. Ардуино заказал, модули тоже, сел рисовать схему и дело встало. Изначально хотел сделать 2х уровневую подсветку так: открываю дверь - загорается подсветка белого цвета. закрываю - ничего не горит. Если я включаю габариты - появляются +12В - загорается тусклая красная подсветка. Если открыть дверь - красная гаснет и загорается белая. +12 хотел подавать через оптрон RC817. Вроде всё легко, пока не вспомнил про концевики в дверях. Любим же усложнить всё. А так как на концевиках минус, столкнулся с проблемой - как послать минус на ардуино?
Хочется так: габариты выключены. Открывается дверь - загорается подсветка с той стороны, где открыта дверь. Включены габариты - загорается красный цвет, открываем дверь - загорается белый только с той стороны, где открыта дверь. У остальных загорается красный на полную яркость.
Ну и плюс, так как магнитола на андроиде, то грех не прикрутить блютуз для управление цветом в салоне. За скетч соответственно ещё не садился, тоже долго буду в этом разбираться. Всем спасибо, просьба не пинать
 

Вложения

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Я может не совсем верно понял.. но если рвется масса (а обычно считаем - массой), то получается обычная тактовая кнопка с внутренним подтягивающим резистором.
Вот первая попавшая картинка

И код к ней
C++:
int btnPin = 7;
int ledPin = 13;
boolean signal = false;

void setup()
{
  pinMode(btnPin, INPUT_PULLUP);
}

void loop()
{
  signal = digitalRead(btnPin);
  signal = !signal;
  delay(31);
  digitalWrite(ledPin, signal);
}
 

Arturka

✩✩✩✩✩✩✩
18 Ноя 2019
7
0
@Старик Похабыч, я так понимаю, что когда дверь закрыта - масса разомкнута. Дверь открываю, масса замыкается и включается подсветка. +12В у меня постоянно.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
в приведенном примере земля рвется, при разорванной земле на цифровом пине 1, при замкнутом 0. а 12 вольт не участвует в процессе. масса вся общая
 

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
@Старик Похабыч, я так понимаю, что когда дверь закрыта - масса разомкнута. Дверь открываю, масса замыкается и включается подсветка. +12В у меня постоянно.
Приветствую всех! Хочу забабахать двухуровневую подсветку в авто. Ардуино заказал, модули тоже, сел рисовать схему и дело встало. Изначально хотел сделать 2х уровневую подсветку так: открываю дверь - загорается подсветка белого цвета. закрываю - ничего не горит. Если я включаю габариты - появляются +12В - загорается тусклая красная подсветка. Если открыть дверь - красная гаснет и загорается белая. +12 хотел подавать через оптрон RC817. Вроде всё легко, пока не вспомнил про концевики в дверях. Любим же усложнить всё. А так как на концевиках минус, столкнулся с проблемой - как послать минус на ардуино?
Хочется так: габариты выключены. Открывается дверь - загорается подсветка с той стороны, где открыта дверь. Включены габариты - загорается красный цвет, открываем дверь - загорается белый только с той стороны, где открыта дверь. У остальных загорается красный на полную яркость.
Ну и плюс, так как магнитола на андроиде, то грех не прикрутить блютуз для управление цветом в салоне. За скетч соответственно ещё не садился, тоже долго буду в этом разбираться. Всем спасибо, просьба не пинать
Делите на части свою задачу, т.к. судя по вопросам с минусом не много вы программ писали. Начните с кнопки реагирующий на землю с включением лампочки, потом с адресной лентой поработайте, ещё какие-нибудь промежуточные задачи порешайте, в итоге соберете проект.
 

Arturka

✩✩✩✩✩✩✩
18 Ноя 2019
7
0
@dimonSha, я ещё ни одного проекта не сделал) просто всё в теории, пока идёт ардуинка. Мыслей дофига, ещё больше вопросов как реализовать. Наверное рано ещё сюда написал. Думаю как всё придёт - буду реализовать по "ступенькам". Ну и соответсвенно сюда отписываться как и что.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
а это не страшно. многие начинают повторять довольно сложные (технически, из за большого кол-ва деталей) проекты и потом сыпятся вопросы типа "скетч не компилируется".
dimonSha правильно написал, начни пробовать.
Я умею писать программы, с электроникой не то что бы на Вы,но уровень мнимальный. Когда начинаю что то делать сначала собираю "кусочки" прокета, учусь с ними работать так, что бы от зубов отскакивало. Взял кнопку тактовую, обсосал со всех сторон, научился читать ее состояние с пина и так и эдак, разобрался с дребезгом контактов програмным, аппаратным, собрал и так и эдак, повесил кнопку на прерыание... вроде бы все.
Можно браться за подключение свтодиодной ленты. Причем опять же начинать с 1-го простого светодиода, понять зачем там резистор, подключить к цифровому пину, к ШИМ, настроить маяков-мигалок, взять RGB светодиод, опять с ним побаловаться..И далее уже брать ленту. Тут сразу будет подключение библиотеки (их несколько).. Ну это такая мини-программа изучения. не знаю нужна ли она тебе.
 

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
а это не страшно. многие начинают повторять довольно сложные (технически, из за большого кол-ва деталей) проекты и потом сыпятся вопросы типа "скетч не компилируется".
dimonSha правильно написал, начни пробовать.
Я умею писать программы, с электроникой не то что бы на Вы,но уровень мнимальный. Когда начинаю что то делать сначала собираю "кусочки" прокета, учусь с ними работать так, что бы от зубов отскакивало. Взял кнопку тактовую, обсосал со всех сторон, научился читать ее состояние с пина и так и эдак, разобрался с дребезгом контактов програмным, аппаратным, собрал и так и эдак, повесил кнопку на прерыание... вроде бы все.

Можно браться за подключение свтодиодной ленты. Причем опять же начинать с 1-го простого светодиода, понять зачем там резистор, подключить к цифровому пину, к ШИМ, настроить маяков-мигалок, взять RGB светодиод, опять с ним побаловаться..И далее уже брать ленту. Тут сразу будет подключение библиотеки (их несколько).. Ну это такая мини-программа изучения. не знаю нужна ли она тебе.

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

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
@dimonSha, я ещё ни одного проекта не сделал) просто всё в теории, пока идёт ардуинка. Мыслей дофига, ещё больше вопросов как реализовать. Наверное рано ещё сюда написал. Думаю как всё придёт - буду реализовать по "ступенькам". Ну и соответсвенно сюда отписываться как и что.
А вы не стесняйтесь спрашивать, потому как помочь желающему разобраться полезно не только для него а и для себя, проверить знания и умения) А те кто хочет на халяву, их особо не ждет успех.
 

Arturka

✩✩✩✩✩✩✩
18 Ноя 2019
7
0
Привет всем! Двинулся мой проект, в праздники пытался разобраться с прошивкой - написал. Сегодня всё спаял, загрузил прошивку и получилась параша. Библиотека использовал библиотеку Microled. Лента зажигается белым цветом, на пины соответственно не реагирует. Куда копать, что стоит почитать?
#define ORDER_GRB
#define COLOR_DEBTH 3

#define NUM_LEDS 24 //Количество светодиодов
#define LED_PIN 2 //пин ленты

#include <microLED.h>
#include <ws2812_send.h>

LEDdata leds[NUM_LEDS];
microLED strip(leds, NUM_LEDS, LED_PIN);
#define FastLED strip

void setup() {
pinMode(2, OUTPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);

digitalWrite(2, 0);

strip.clear(); // очистить
strip.show(); // отправить на ленту
delay(2000);
Serial.begin(9600);
}

void loop() {
boolean button5 = digitalRead(5); //приём сигнала с цифрого порта (габариты)
boolean button6 = !digitalRead(6); //левая перед
boolean button7 = !digitalRead(7); //правая перед
boolean button8 = !digitalRead(8); //правая зад
boolean button9 = !digitalRead(9); //левая зад


if (button6 == 1)
for (int i = 0; i < NUM_LEDS / 4; i++ ) { // от 0 до 1/4
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}

if (button7 == 1)
for (int i = NUM_LEDS / 4; i < NUM_LEDS * 2 / 4; i++ ) { // от 1/4 до 2/4
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}

if (button8 == 1)
for (int i = NUM_LEDS * 2 / 4; i < NUM_LEDS * 3 / 4; i++ ) { // от 2/4 до 3/4 до конца
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}

if (button9 == 1)
for (int i = NUM_LEDS * 3 / 4; i < NUM_LEDS; i++ ) { // от 3/4 до конца
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}

if (button5 == 1)
for (int i = 0; i < NUM_LEDS; i++ ) { // всю ленту
strip.setHSV(i, 0, 100, 100); // залить красным
strip.setBrightness(30); // яркость (0-255)
strip.show(); // отправить на ленту
delay(10);
}
delay(1000);

if (button6 == 1 && button5 == 1);
for (int i = 0; i < NUM_LEDS / 4; i++ ) { // от 0 до 1/4
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}
if (button7 == 1 && button5 == 1)
for (int i = NUM_LEDS / 4; i < NUM_LEDS * 2 / 4; i++ ) { // от 1/4 до 2/4
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}

if (button8 == 1 && button5 == 1)
for (int i = NUM_LEDS * 2 / 4; i < NUM_LEDS * 3 / 4; i++ ) { // от 2/4 до 3/4 до конца
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}

if (button9 == 1 && button5 == 1)
for (int i = NUM_LEDS * 3 / 4; i < NUM_LEDS; i++ ) { // от 3/4 до конца
strip.setHSV(i, 0, 0, 100); // залить белым
strip.setBrightness(200); // яркость (0-255)
strip.show(); // отправить на ленту
delay(100);
}
}
 

AndrySmart

✩✩✩✩✩✩✩
12 Дек 2018
38
2
Киев
ну я так понял в скетче вы проверяете состояние пинов на наличие логической единицы. по поводу оптронов не вижу смысла
концевики дверей обычно управляются минусом. я бы все пины защитил стабилитронами на 5.1в а подключал через резистор на 1ком (таким образом 12в не смогут убить порт микроконтроллера)
при опросе состояний пинов не помешает небольшая задержка (защита от дребезга контактов)
и опрашивать надо не 1 на пине а наличие ноля.
при закрытых дверях у вас будет 1 на пинах
а вот габариты наоборот.


в setoop настраиваем порты (входы и выходы)
очищаем ленту и т.д.

согласно логике закрашиваем ленту по частям


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

и так с остальными тремя
 
  • Лойс +1
Реакции: Arturka

Arturka

✩✩✩✩✩✩✩
18 Ноя 2019
7
0
Приветствую всех. Прошло много времени, а кнопки с алика только недавно пришли. Всё получилось сделать, кроме одного НО. Минус управляется идеально. В схему добавил конденсаторы для кнопок (чтоб не было дребезга). Проблема с габаритами. При отсутствии питания на входе время от времени возникает 1 на пине, пробовал другие пины - аналогично. Это при условии, что к пину только подведён провод (без питания, просто обрезок). При подаче питания на этот провод, лента как положено загорается вся красным, на пине стабильно 1. Убираю питание - 1 0 и так по кругу. Скетч прилагаю. Что не так теперь?)
#include <FastLED.h>

#define NUM_LEDS 40 //Количество светодиодов
#define DATA_PIN 2

CRGB leds[NUM_LEDS];

void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
pinMode(2, OUTPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);

digitalWrite(2, 0);

Serial.begin(9600);
}

void loop() {
boolean button5 = digitalRead(5); //приём сигнала с цифрого порта (габариты)
boolean button6 = !digitalRead(6); //левая перед
boolean button7 = !digitalRead(7); //правая перед
boolean button8 = !digitalRead(8); //правая зад
boolean button9 = !digitalRead(9); //левая зад


Serial.print("Button5: "); Serial.print(button5);
Serial.print(" Button6: "); Serial.print(button6);
Serial.print(" Button7: "); Serial.print(button7);
Serial.print(" Button8: "); Serial.print(button8);
Serial.print(" Button9: "); Serial.println(button9);

if (button6 == 1)
for (int i = 0; i < NUM_LEDS / 4; i++) {
leds = CRGB::White;
FastLED.show();
delay(30);
}
else if (button5 == 1)
for (int i = 0; i < NUM_LEDS / 4; i++) {
leds = CRGB::Red;
FastLED.show();
delay(30);
}
else
for (int i = 0; i < NUM_LEDS / 4; i++) {
leds = CRGB::Black;
FastLED.show();
delay(30);
}


if (button7 == 1)
for (int i = NUM_LEDS / 4; i < NUM_LEDS * 2 / 4; i++) {
leds = CRGB::White;
FastLED.show();
delay(30);
}
else if (button5 == 1)
for (int i = NUM_LEDS / 4; i < NUM_LEDS * 2 / 4; i++) {
leds = CRGB::Red;
FastLED.show();
delay(30);
}
else
for (int i = NUM_LEDS / 4; i < NUM_LEDS * 2 / 4; i++) {
leds = CRGB::Black;
FastLED.show();
delay(30);
}


if (button8 == 1)
for (int i = NUM_LEDS * 2 / 4; i < NUM_LEDS * 3 / 4; i++) {
leds = CRGB::White;
FastLED.show();
delay(30);
}
else if (button5 == 1)
for (int i = NUM_LEDS * 2 / 4; i < NUM_LEDS * 3 / 4; i++) {
leds = CRGB::Red;
FastLED.show();
delay(30);
}
else
for (int i = NUM_LEDS * 2 / 4; i < NUM_LEDS * 3 / 4; i++) {
leds = CRGB::Black;
FastLED.show();
delay(30);
}


if (button9 == 1)
for (int i = NUM_LEDS * 3 / 4; i < NUM_LEDS; i++) {
leds = CRGB::White;
FastLED.show();
delay(30);
}
else if (button5 == 1)
for (int i = NUM_LEDS * 3 / 4; i < NUM_LEDS; i++) {
leds = CRGB::Red;
FastLED.show();
delay(30);
}
else
for (int i = NUM_LEDS * 3 / 4; i < NUM_LEDS; i++) {
leds = CRGB::Black;
FastLED.show();
delay(30);
}


}
 

AndrySmart

✩✩✩✩✩✩✩
12 Дек 2018
38
2
Киев
тут бы схемку увидеть.

и еще в функции loop добавить небольшую delay (20) например. а то скорость чтения портов большая и возможно наводки ловит.
 

Arturka

✩✩✩✩✩✩✩
18 Ноя 2019
7
0
@AndrySmart, Примерно такая схема, нарисовал как смог. Добавлю. Там, где минус от дверей - управляется чётко, а вот с габаритами что-то не так. И через оптрон пробовал - не получается. Когда вытаскиваю провод с порта номер 5 - всё тихо, условно 1 нет. При подключении простого провода возникает единица раз в 4-5 секунд. Садил на пайку - аналогично. Бывает "успокаивается", единица не появляется, соответственно лента не зажигается красным, но при движении провода сразу появляется единица и лента начинает загораться краным.
 

Вложения

AndrySmart

✩✩✩✩✩✩✩
12 Дек 2018
38
2
Киев
Здесь не чат. Сообщения можно редактировать
аааа теперь понял. вам нужно подтянуть 5 вход на массу через резистор. ставьте на 2килоома.
паралельно стабилитрону на 5.1в

или вот проверенная временем схема.
 

Вложения

  • Лойс +1
Реакции: Arturka

Arturka

✩✩✩✩✩✩✩
18 Ноя 2019
7
0
@AndrySmart, удалились сообщения) Хотелось бы плавное включение и плавное выключение + плавный переход от одного цвета к другому