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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.02.2020, 19:53   #11
Renzo
Junior Member
 
Регистрация: 21.02.2020
Сообщений: 3
Вес репутации: 0
Renzo is an unknown quantity at this point
Cool

Цитата:
Сообщение от Admin Посмотреть сообщение
Это для нагревателя подойдет, а мотор с пропусками не будет работать
Ваша правда. Чуть разобравшись с кодом, написал такой проверочный скетч:

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

PHP код:
#include <CyberLib.h>
int  j=1zcross=0;
volatile int k=1i=1pot;
void setup() 

Serial.begin(115200);
  
D3_In//энкодер счетчик
  
D7_In//энкодер поворот
  
D8_Out;  //Настраиваем порты на выход
  
D4_Out;  //Настраиваем порты на выход
  
D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль
  
attachInterrupt(0zero_crosssRISING);  // прерывание на D2 


void zero_crosss() 

  
zcross++;                                     //Считаем два полупериода (целую волну - Герц)
  
if (zcross>1
  {
    if (
j>k) {j=1;D4_LowD8_Low;}                             //Сбрасываем счетчик периодов, закрываем симистор, тушим лед    
    
i++;                                        //Счетчик пакетов
    
if (i>=pot)     //Пропускаем пакеты или нет. Если map=1, то каждый пакет с волнами идет на симистор. Если 100, то только каждый сотый...
    
{
      
D4_HighD8_High;                         //Открываем симистор, поджигаем лед
      
j++;                                      //Счетчик волн в пакете 
      
if (j>ki=1;                             //Сбрасываем счетчик пакетов
    
}
    
zcross=0;                                   //Сбрасываем счетчик полупериодов
    
}


void loop()   

 
pot=map(analogRead(0),0,1023,100,1); // Показания потенциометра
 
if ((digitalRead(3)==1)&&(digitalRead(7)==1)) {k=constrain(k--,2,98);D3_OutD3_Low;D3_In;} // Энкодер против часовой
 
if ((digitalRead(3)==1)&&(digitalRead(7)==0)) {k=constrain(k++,2,98);D3_OutD3_Low;D3_In;} // Энкодер по часовой
 
Serial.print("Пакет непрерываных волн D4 (периодов) = "); Serial.print(k);
 
Serial.print("   Пропускаем волн (периодов) = "); Serial.println(pot);

[свернуть]


В нем можно регулировать как пропуски периодов, так и их длительность.
По итогу мотор крутится без гула, но рывками. Особенно интересные звуки когда ставишь цикл с соотношением 1 период в работу, 1 период на пропуск
Со срезанием волны э/двигатель работает плавнее. А на определенных частотах гула вообще не слышно...

Цитата:
Сообщение от Admin Посмотреть сообщение
резистор 39 Ом, конденсатор 0,01 мкФ . Но от помех в сети он не сильно поможет
А что поможет? Если поможет конечно...
А может фильтр от какого-нибудь розеточного "пилота"?

Цитата:
Сообщение от Admin Посмотреть сообщение
Инфракрасным датчиком препятствий Считать ничего не нужно. Например если в течении 1 сек. лог1 или лог0 , то значит вентилятор не крутится
Или второй вариант импульсами от датчика препятствий обнулять таймер
Да тут логика понятна, будем пробовать
Renzo вне форума   Ответить с цитированием
 


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

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

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

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


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


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