Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2018, 10:18   #911
hoiho
Junior Member
 
Регистрация: 07.11.2018
Сообщений: 11
Вес репутации: 0
hoiho is an unknown quantity at this point
По умолчанию

Нужен какраз с термодатчиком. Иначе легче бы было просто купить.)
hoiho вне форума   Ответить с цитированием
Старый 11.11.2018, 12:02   #912
hoiho
Junior Member
 
Регистрация: 07.11.2018
Сообщений: 11
Вес репутации: 0
hoiho is an unknown quantity at this point
По умолчанию

Я правильно понимаю, что мне просто надо выдавать значение функции analogWrite?
Примерно так?

void loop()
{
analogWrite(Pin, *значение от 0 до 255*);
}
hoiho вне форума   Ответить с цитированием
Старый 11.11.2018, 20:50   #913
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Для предложного мной способа нужен только цифровой сигнал low-high
Admin вне форума   Ответить с цитированием
Старый 12.11.2018, 17:12   #914
hoiho
Junior Member
 
Регистрация: 07.11.2018
Сообщений: 11
Вес репутации: 0
hoiho is an unknown quantity at this point
По умолчанию

В итоге у меня 2 варианта получилось:
1) Выдает ШИМ, и вроде бы подходит, но тестер выводит что то не понятное(то 108 вольт то 220 при значении 255)

Развернуть для просмотра


void loop()
{
analogWrite(Pin, *значение от 0 до 255*);
}
[свернуть]

2) попробовал Ваш способ:

Развернуть для просмотра


int dimmer_vol = 0; //Время срабарывания пина
void loop(){
dimmer();
}
int dimmer() {
if (millis() - lasttime > dimmer_vol) {
analogWrite(ledPin, HIGH);
}
[свернуть]

Но не понимаю, правильно ли он работает... осцилографа у меня нет.

Последний раз редактировалось hoiho; 12.11.2018 в 17:17.
hoiho вне форума   Ответить с цитированием
Старый 12.11.2018, 19:32   #915
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

ШИМ не будет работать.
Если установлен оптрон с детектором ноля, то у Вас только 1 способ, который я описал выше
Admin вне форума   Ответить с цитированием
Старый 12.11.2018, 19:59   #916
hoiho
Junior Member
 
Регистрация: 07.11.2018
Сообщений: 11
Вес репутации: 0
hoiho is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
ШИМ не будет работать.
Если установлен оптрон с детектором ноля, то у Вас только 1 способ, который я описал выше
Так правильно будет?

Развернуть для просмотра


int dimmer_vol = 0; //Время срабарывания пина
void loop(){
dimmer();
}
int dimmer() {
if (millis() - lasttime > dimmer_vol) {
analogWrite(ledPin, HIGH);
}
[свернуть]
hoiho вне форума   Ответить с цитированием
Старый 12.11.2018, 20:40   #917
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

При чем тут analogWrite(ledPin, HIGH)?
Admin вне форума   Ответить с цитированием
Старый 12.11.2018, 22:18   #918
hoiho
Junior Member
 
Регистрация: 07.11.2018
Сообщений: 11
Вес репутации: 0
hoiho is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
При чем тут analogWrite(ledPin, HIGH)?
Да, перепутал digitalWrite а не analogWrite.
Сигнал low подавать нужно?
hoiho вне форума   Ответить с цитированием
Старый 12.11.2018, 23:06   #919
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Можно взять библиотеку PID и пример для реле

PID


Цитата:
/********************************************************
PID RelayOutput Example
Same as basic example, except that this time, the output
is going to a digital pin which (we presume) is controlling
a relay. The pid is designed to output an analog value,
but the relay can only be On/Off.

To connect them together we use "time proportioning
control" Tt's essentially a really slow version of PWM.
First we decide on a window size (5000mS say.) We then
set the pid to adjust its output between 0 and that window
size. Lastly, we add some logic that translates the PID
output into "Relay On Time" with the remainder of the
window being "Relay Off Time"
********************************************************/

#include <PID_v1.h>
#define RelayPin 6

//Define Variables we'll be connecting to
double Setpoint, Input, Output;

//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1, DIRECT);

int WindowSize = 5000;
unsigned long windowStartTime;
void setup()
{
pinMode(RelayPin, OUTPUT);

windowStartTime = millis();

//initialize the variables we're linked to
Setpoint = 100;

//tell the PID to range between 0 and the full window size
myPID.SetOutputLimits(0, WindowSize);

//turn the PID on
myPID.SetMode(AUTOMATIC);
}

void loop()
{
Input = analogRead(0);
myPID.Compute();

/************************************************
turn the output pin on/off based on pid output
************************************************/
unsigned long now = millis();
if (now - windowStartTime > WindowSize)
{ //time to shift the Relay Window
windowStartTime += WindowSize;
}
if (Output > now - windowStartTime) digitalWrite(RelayPin, HIGH);
else digitalWrite(RelayPin, LOW);
}
[свернуть]
Admin вне форума   Ответить с цитированием
Старый 14.11.2018, 10:05   #920
hoiho
Junior Member
 
Регистрация: 07.11.2018
Сообщений: 11
Вес репутации: 0
hoiho is an unknown quantity at this point
По умолчанию

На самом деле, похоже, у меня нет правильного понимания принципа работы данного способа. Я пытаюсь резать полупериод, а надо пропускать полупериоды.
Правильно будет, если за отрезок 100% я возьму 0.5 секунды? или нужно больше?
И самое главное: может легче использовать диммер без детектора нуля, но с каким либо сетевым фильтром или стабилизатором?

Последний раз редактировалось hoiho; 14.11.2018 в 10:10.
hoiho вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 62 (пользователей: 0 , гостей: 62)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:02. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика