FLProg
Категории раздела
Проекты пользователей [36]
Помощь начинающим [15]
Железо [1]
Вход на сайт
Логин:
Пароль:
Мы в VK
Поиск
Статистика

Онлайн всего: 6
Гостей: 6
Пользователей: 0


Яндекс.Метрика
Четверг, 08.12.2016, 03:07
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Каталог статей
Главная » Статьи » Публикации » Проекты пользователей

Простейший солнечный трейкер




Таблица истинности для логики


Вот текст

Код

#include <Servo.h>
Servo _SM1;
bool _FreeLog1_IArr[2];
bool _FreeLog1_Q1_StArr[] = {1, 0, 0, 1};
bool _FreeLog1_Q2_StArr[] = {0, 1};
bool _count1I = 0;
int _count1P = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
bool _FreeLog1_Q1 = 0;
bool _FreeLog1_Q2 = 0;
void setup()
{
_SM1.attach(10);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);

}
void loop()
{

if (_FreeLog1_Q1)  
    {  
    if (! _count1I)  
       {
         if (_FreeLog1_Q2) {_count1P = _count1P+1;} else {_count1P = _count1P-1;};
        _count1I = 1;
       }
    }
else
    {
    _count1I=0;
    }
if (( (analogRead (4))) > ( (analogRead (5)))) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
  if (_gen1I) { if ( _isTimer ( _gen1P , 50 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if (( (analogRead (4))) < ( (analogRead (5)))) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
  if (_gen2I) { if ( _isTimer ( _gen2P , 50 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
_FreeLog1_IArr[0] = _gen1O;
_FreeLog1_IArr[1] = _gen2O;
_FreeLog1_Q1 = _checkFreeLogicBlockOutput(_FreeLog1_IArr, 2, _FreeLog1_Q1_StArr, 4);  
_FreeLog1_Q2 = _checkFreeLogicBlockOutput(_FreeLog1_IArr, 2, _FreeLog1_Q2_StArr, 2);  
digitalWrite(2, _gen1O);
digitalWrite(4, _gen2O);
if (1) {_SM1.write ((map((_count1P), (0), (100), (0), (180))));}  

}
bool _isTimer(unsigned long startTime, unsigned long period )
   {
   unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
   }
bool _checkFreeLogicBlockOutput(bool inArray[], int inArraySize, bool stArray[], int stArraySize)
{ int inIndex = 0;
   bool result = 1;
   for (int i = 0; i < stArraySize; i = i + 1)
   {
    if (!(inArray[inIndex] == stArray[i])) { result = 0;}
    inIndex ++;
    if (inIndex == inArraySize)
      {
      if (result) { return 1;} else {result = 1;}
      inIndex = 0;
      }
   }
   return 0;
}

Категория: Проекты пользователей | Добавил: 999max999 (17.11.2015)
Просмотров: 1213 | Комментарии: 5 | Рейтинг: 0.0/0
Всего комментариев: 5
avatar
0
1
И как-же он будет работать???

А где привязка к углу солнца?
Привязка к времени??

С таким трекером большие проблеммы будут.
Проще установить солнечные батареи под углом 22 градуса на юг. Эффективности больше.
avatar
0
2
Работаю над этим уже не первый год.
Особых результатов нет.
Всю энергию которую выигрывает трекер ,тратится на содержание самого трекера.


[img]http://i11.pixs.ru:/storage/8/2/1/IMG4302Kop_6595635_19645821.jpg[/img]
avatar
0
3
[img]http://i11.pixs.ru:/storage/8/2/2/IMG4306Kop_9514056_19645822.jpg[/img]
avatar
0
4
Админ что-то фотографии странно добавились. Окошко для редактирования очень маленькое.
avatar
0
5
трейкер? surprised
avatar
FLProg © 2016
Яндекс.Метрика