Ночник. Неделя неспешно и заработало.

Подписаться на 3Dtoday
Serrous
Идет загрузка
Загрузка
25 Июня 2019
1033
9
печатает на FLSUN 3D Metal Frame Large Print Area 3D Printer
Мы печатаем
9
Нашел на тингсервисе планетку... подумал а почему бы не сделать ночник... печать, подбор компонентов, пайка, программирование. Ушло недельку времени - и заработало. Модельки пока выкладывать не буду. Буду переделывать подставку.
0f3552cce40a511b775ead6e03c7e496.jpg
По оборудованию.

Wemos d1 mini
30 см светодиодной ленты. 24 вольта RGBW.
MT3608 повышающий преобразователь.
коневертер уровней 3.3/5 вольта - транзисторы не хотели полностью открываться от 3.3 вольт
4 транзистора irf520
Разьем USB A - хотелось стандартным проводом питатать, теперь можно питать как от зарядника телефона так и от компа.

видео работы

Прога на телефоне для управления
2c57ebd753abd2cb5514f0bac4bf9c85.jpg
9
Комментарии

Комментарии

25.06.19 в 11:56
0
Схему и код могу выкинуть если надо кому.
25.06.19 в 12:21
0
А ссылку с твинга можно? Искал может не так, только громадных размеров нашел.
Или свой файлик если не жалко :) По электронике разберусь. Спасибо.
25.06.19 в 12:27
0
25.06.19 в 14:17
0
Спасибо.
27.06.19 в 11:05
0
А почему лента 24 вольта? Или какя была?
Приложение своё?
27.06.19 в 14:28
0
Лента какая была в наличии.. но повышать все равно надо ьыло бы. а какая разница до 12 или до 24 вольт.
приложение http://remotexy.com/
5 минут и готово ) но правда платное ... но за 30 секунд ее можно настроить...
27.06.19 в 17:13
0
Так вроде есть и 5 вольтовые ленты. А приложение можно было использовать бесплатное БЛИНК или от Алексгайвера.
27.06.19 в 17:19
0
возможно и есть... я взял все из наличия...
приложение у меня тоже давно куплено.. его фишка что вся связь автоматом програмится... вот весь код... все что между RemoteXY include library и END RemoteXY include сгенерировано автоматически. и графика вся тоже тут лежит... на смарте ставишь голое приложение. подключаешься к вайфай точке lamp ... и приложуха подгружает интерфейс автоматом... тоесть не надо ничего вообще настраивать на телефоне


#include
#include

//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include

#include

// настройки соединения
#define REMOTEXY_WIFI_SSID "lamp"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377


// конфигурация интерфейса
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255, 5, 0, 0, 0, 166, 0, 8, 13, 1,
4, 128, 4, 8, 56, 6, 2, 26, 129, 0,
4, 3, 14, 4, 17, 208, 145, 208, 181, 208,
187, 209, 139, 208, 185, 0, 4, 128, 4, 20,
56, 6, 2, 26, 129, 0, 5, 15, 10, 4,
17, 208, 154, 209, 128, 208, 176, 209, 129, 208,
189, 209, 139, 208, 185, 0, 4, 128, 4, 31,
56, 6, 2, 26, 129, 0, 5, 27, 18, 4,
17, 208, 151, 208, 181, 208, 187, 208, 181, 208,
189, 209, 139, 208, 185, 0, 4, 128, 4, 42,
56, 6, 2, 26, 129, 0, 5, 38, 13, 4,
17, 208, 161, 208, 184, 208, 189, 208, 184, 208,
185, 0, 2, 0, 20, 62, 22, 11, 2, 26,
31, 31, 79, 78, 0, 79, 70, 70, 0, 129,
0, 8, 53, 46, 6, 17, 208, 144, 208, 178,
209, 130, 208, 190, 208, 188, 208, 176, 209, 130,
208, 184, 209, 135, 208, 181, 209, 129, 208, 186,
208, 184, 0
};

// структура определяет все переменные вашего интерфейса управления
struct {

// input variable
int8_t rgb_w; // =0..100 положение слайдера
int8_t rgb_r; // =0..100 положение слайдера
int8_t rgb_g; // =0..100 положение слайдера
int8_t rgb_b; // =0..100 положение слайдера
uint8_t autom; // =1 если переключатель включен и =0 если отключен

// other variable
uint8_t connect_flag; // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////

byte rgbr = 0;
byte rgbb = 0;
byte rgbg = 0;
byte rgbw = 0;
byte autom = 0;
byte oldrgbr, oldrgbg, oldrgbb, oldrgbw, oldautom;
int temp, timer, svet, cikl;
const int eeprom_addr = 100; // Адрес записи в eeprom

void setup()
{
Serial.begin (9600);
EEPROM.begin(512);
RemoteXY_Init ();
pinMode(D4, OUTPUT);
pinMode(D7, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D5, OUTPUT);

readeeprom();
oldrgbr = rgbr;
oldrgbg = rgbg;
oldrgbb = rgbb;
oldrgbw = rgbw;
oldautom = autom;
timer = millis();
}

void loop()
{
RemoteXY_Handler ();
rgbw = RemoteXY.rgb_w;
rgbr = RemoteXY.rgb_r;
rgbg = RemoteXY.rgb_g;
rgbb = RemoteXY.rgb_b;
autom = RemoteXY.autom;

if (autom != oldautom) {
oldautom = autom;
writeeeprom();

}

if (autom == 0) {
if (rgbw != oldrgbw) {
oldrgbw = rgbw;
temp = (rgbw * 10);
Serial.println (temp);
analogWrite(D4, temp);
writeeeprom();
}

if (rgbr != oldrgbr) {
oldrgbr = rgbr;
temp = (rgbr * 10);
Serial.println (temp);
analogWrite(D7, temp);
writeeeprom();
}

if (rgbg != oldrgbg) {
oldrgbg = rgbg;
temp = (rgbg * 10);
Serial.println (temp);
analogWrite(D6, temp);
writeeeprom();
}

if (rgbb != oldrgbb) {
oldrgbb = rgbb;
temp = (rgbb * 10);
Serial.println (temp);
analogWrite(D5, temp);
writeeeprom();
}
}
else {
if ((millis() - timer) >= 200) {
timer = millis();
autoswitch2();
}
}
}

void readeeprom() {
EEPROM.begin(512);
EEPROM.get(eeprom_addr + 10, rgbr);
EEPROM.get(eeprom_addr + 30, rgbb);
EEPROM.get(eeprom_addr + 50, rgbg);
EEPROM.get(eeprom_addr + 60, rgbw);
EEPROM.get(eeprom_addr + 70, autom);
temp = (rgbw * 10);
analogWrite(D4, temp);
RemoteXY.rgb_w = rgbw;
temp = (rgbr * 10);
analogWrite(D7, temp);
RemoteXY.rgb_r = rgbr;
temp = (rgbg * 10);
analogWrite(D6, temp);
RemoteXY.rgb_g = rgbg;
temp = (rgbb * 10);
analogWrite(D5, temp);
RemoteXY.rgb_b = rgbb;
RemoteXY.autom = autom;
Serial.println (rgbw);
}

void writeeeprom() {
EEPROM.begin(512);
EEPROM.put(eeprom_addr + 10, rgbr);
EEPROM.put(eeprom_addr + 30, rgbb);
EEPROM.put(eeprom_addr + 50, rgbg);
EEPROM.put(eeprom_addr + 60, rgbw);
EEPROM.put(eeprom_addr + 70, autom);
EEPROM.commit();
}

void autoswitch2() {

if (svet == 0)
{ // гасим красный, параллельно разжигаем зеленый
cikl = cikl + 1;
if (cikl < 100) {
temp = (cikl * 10);
analogWrite(D7, (1000 - temp));
analogWrite(D6, (temp));
}
else {
svet = 1;
cikl = 0;
}
}

if (svet == 1)
{ // гасим зеленый, параллельно разжигаем синий
cikl = cikl + 1;
if (cikl < 100) {
temp = (cikl * 10);
analogWrite(D6, (1000 - temp));
analogWrite(D5, (temp));
}
else {
svet = 2;
cikl = 0;
}
}

if (svet == 2)
{ //гасим синий, параллельно разжигаем красный
cikl = cikl + 1;
if (cikl < 100) {
temp = (cikl * 10);
analogWrite(D5, (1000 - temp));
analogWrite(D7, (temp));
}
else {
svet = 0;
cikl = 0;
}

}
}
27.06.19 в 17:19
0
а если выкинуть еще работу с епром ваще будет мелкое

Для написания комментариев, пожалуйста, авторизуйтесь.