Ви не увійшли.
Надо смотреть (вспомнить) если не ошибаюсь концевик работает на разрыв. Реле которое включает двигатель включается другим реле и кнопкой ручного поворота. Точно не помню столько было переделок . Помню только что были какие то проблемы с ручным поворотом, и решить просто и быстро можно было только установив другое реле.
Время рассчитать не реально. Асинхронник разная нагрузка короче тот еще гемор.
Остання редакція Nefreemen (2016-03-15 19:36:32)
Неактивний
Библиотека здесь https://github.com/winlinvip/SimpleDHT
Можете обновить иде до 1,6,7 - она сама умеет обновлять и инсталить билиотеки
Неактивний
ну откЕдова мне знать как он сделал? )
могу только сказать что при переднем или заднем фронте на 10 ноге он крутит лоток
у Nefreemen спросите
да на 10 ногу у меня реле подключено и после его с работки
нужно в ручную нажимать на кнопку +
чтоб оно отключилось
а мне нужно автоматически
а также чтоб двигатель знал когда и в какую сторону крутить
Остання редакція Dima (2016-03-17 12:26:27)
Неактивний
http://forum.arduino.ua/viewtopic.php?pid=2622#p2622
alarmTemp не предустановлена,
//управляем авариями/////////////////////////////////////////////////////////////////////////////
void alarm() {
/*
float tempInk = sensors.getTempCByIndex(0);
float alarmTemp;
float setTemp;
EEPROM_read(5, alarmTemp);
EEPROM_read_mem(1, &setTemp, sizeof(setTemp));
EEPROM_read(1, setTemp);
//lcd.setCursor(0, 3);
//lcd.print("A");
//lcd.print(setTemp + alarmTemp, 1);
if ((millis() - alarmDelay) > 1800000) {
if (tempInk > (setTemp + alarmTemp) || tempInk < (setTemp - alarmTemp)) {
beeper(10);
digitalWrite(alarm_pin, LOW); //если измеренная температура выше заданной на величину аварии
}
else digitalWrite(alarm_pin, HIGH); //то включаем аварийный сигнал.
}
*/
// выключил аварию
digitalWrite(alarm_pin, HIGH);
}
разберитесь как у Вас, авария нулем или + включется?
Неактивний
NoName пише:ну откЕдова мне знать как он сделал? )
могу только сказать что при переднем или заднем фронте на 10 ноге он крутит лоток
у Nefreemen спроситеда на 10 ногу у меня реле подключено и после его с работки
нужно в ручную нажимать на кнопку +
чтоб оно отключилось
а мне нужно автоматически
а также чтоб двигатель знал когда и в какую сторону крутить
Так как Вы собрались делать поворот? Если кривошип то двигатель может вращаться в одну сторону.
Неактивний
Так как Вы собрались делать поворот? Если кривошип то двигатель может вращаться в одну сторону.
да хочу кривошип но ничего не выходит как в этот скеч,
заделать скеч шаговика и соединить вместе
Остання редакція Dima (2016-03-20 12:15:12)
Неактивний
Так как Вы собрались делать поворот? Если кривошип то двигатель может вращаться в одну сторону.
да хочу кривошип но ничего не выходит как в этот скеч,
заделать скеч шаговика и соединить вместе
Так Вы определитесь чем вращаете. То сервой то шаговиком Вас не поймешь
Неактивний
Dima пише:Так как Вы собрались делать поворот? Если кривошип то двигатель может вращаться в одну сторону.
да хочу кривошип но ничего не выходит как в этот скеч,
заделать скеч шаговика и соединить вместеТак Вы определитесь чем вращаете. То сервой то шаговиком Вас не поймешь
да шаговик из принтера на 4 тыре вывода
Неактивний
Dima, если Вы думаете что главное это управление двигателем то очень сильно заблуждаетесь. Сделайте пожалуйста механику, поставьте двигатель и по управляйте двигателем в ручном режиме поворотом и сразу все поймете . Вы не внимательно читали пост #37. Ручная дрель метал сверлит и имеет не хилое усилие на валу но вы можете без особых усилий рукой провернуть патрон . Вот когда у Вас будет в "железе" работающая механика, тогда и будем править скетч под нее. Не помню который раз но еще раз повторю, главное это работающий инкубатор с поворотом, нагревателем и увлажнителем (реально работающий а не где то "представлении"). Я тоже когда то был таким же самоуверенным, что конструкция будет работать . Как потом оказалось программа это может 5% задачи.
Неактивний
Dima, если Вы думаете что главное это управление двигателем то очень сильно заблуждаетесь. Сделайте пожалуйста механику, поставьте двигатель и по управляйте двигателем в ручном режиме поворотом и сразу все поймете . Вы не внимательно читали пост #37. Ручная дрель метал сверлит и имеет не хилое усилие на валу но вы можете без особых усилий рукой провернуть патрон . Вот когда у Вас будет в "железе" работающая механика, тогда и будем править скетч под нее. Не помню который раз но еще раз повторю, главное это работающий инкубатор с поворотом, нагревателем и увлажнителем (реально работающий а не где то "представлении"). Я тоже когда то был таким же самоуверенным, что конструкция будет работать . Как потом оказалось программа это может 5% задачи.
понятно значит буду без шаговика городить
и дальше голову ломать о перевороте
у меня нет возможности в ручную поворачивать
а яйца спалить жалко да и смысл их класть в духовый шкаф
Неактивний
Dima, подберите на аукро или олексе двигатель РД-09 только без никаких "П" и "П2" (особо обращаю Ваше внимание), с оборотами около 2 в минуту (цена вопроса около 90 грн.). Этот вариант проверен и не только мной. У меня такой двигатель держит лоток 43х47 см (рычаг лотка 23.5 см) с 35 гусиными яйцами (гусиное яйцо в среднем 190 гр ). Рычаг на валу двигателя 9 см. С двумя и более лотками прокручивается ("проваливаются" лотки), пришлось резиновыми натяжителями убирать "провалы" .
Неактивний
Знаю такой моторчик. Когда то таким небольшую елочку вращал . Они бывают разными, на разное напряжение и разной редукцией. Приделайте рычаг и померьте усилие ручными весами (кантером) какое удерживает (до проворачивания) и какое подымает ( тянет) и делайте вывод. Если ось подвеса лотка будет под днищем тогда важно усилие на валу и делать "компенсатор" провала (как я сделал). Если сделать ось подвеса в другом месте лотка картина будет другая ( и не факт что Вы найдете способ устранения прокручивания). Надо быть реалистом, и понимать что это не рычажные весы и сбалансировать лоток на практике не реально (выбраковка яиц, изменение их веса со временем и пр.). Очень важна скорость поворота ( это очень важно! ) и плавность. К стати подумайте над вот этим http://alfa-vest.com.ua/p88883245-shnur … urnyj.html или http://ukrferma.com.ua/products/7688517
Остання редакція Nefreemen (2016-03-25 01:19:36)
Неактивний
Надо писать свой обработчик или спросить у гугла.
Когда то давно я писал свой, не помню рабочий ли он на 100%. Вот код, это кусок из программы, но смысл понятен. Поправиш его под свои нужды.
Loop:
//блок считывания текущего времени и даты
Wire.beginTransmission(0x68);
Wire.write((byte)0);
Wire.endTransmission();
Wire.requestFrom(0x68, 7);
// if (Wire.available() < 7) return;
Second = bcd2dec(Wire.read() & 0x7f);
Minute = bcd2dec(Wire.read() );
Hour = bcd2dec(Wire.read() & 0x3f); // mask assumes 24hr clock
Wday = Wire.read();
Day = bcd2dec(Wire.read() );
Month = bcd2dec(Wire.read() );
Year = bcd2dec(Wire.read() ); //отсчет с 2000 года
//блок подготовки строк для вывода на дисплей
Print_Digits(output_string_1, 4, 2, ' ', Hour); //4,0
output_string_1[6] = ':';
Print_Digits(output_string_1, 7, 2, '0', Minute); //7,0
output_string_1[9] = ':';
Print_Digits(output_string_1, 10, 2, '0', Second); //10,0
Print_Digits(output_string_2, 3, 2, ' ', Day); //3,1
output_string_2[5] = '/';
Print_Digits(output_string_2, 6, 2, '0', Month); //6,1
output_string_2[8] = '/';
Print_Digits(output_string_2, 9, 4, '0', Year + 2000); //9,1
//вывод на дисплей
lcd.clear();
lcd.print(output_string_1);
lcd.setCursor(0, 1);
lcd.print(output_string_2);
//считываем нажатия кнопок
key = 0;
if (!digitalRead(GasButonPin)) key = 2;
if (!digitalRead(BenzButonPin)) key = 3;
if (analogRead(ButonsPin) < 100) key = 1;
if (key) delay(500);
else delay(100);
//корректируем время/дату
switch (Cursor) {
case 0: //часы
switch (key) {
case 1: //следующая
Cursor++;
if (Cursor > 5) Cursor = 0;
break;
case 2: // -
if (Hour > 0) Hour--;
break;
case 3: // +
if (Hour < 23) Hour++;
break;
}
lcd.setCursor(4, 0);
break;
case 1: //минуты
switch (key) {
case 1: //следующая
Cursor++;
if (Cursor > 5) Cursor = 0;
break;
case 2: // -
if (Minute > 0) Minute--;
break;
case 3: // +
if (Minute < 60) Minute++;
break;
}
lcd.setCursor(7, 0);
break;
case 2: //секунды
switch (key) {
case 1: //следующая
Cursor++;
if (Cursor > 5) Cursor = 0;
break;
case 2: // -
if (Second > 0) Second--;
break;
case 3: // +
if (Second < 60) Second++;
break;
}
lcd.setCursor(10, 0);
break;
case 3: //день
switch (key) {
case 1: //следующая
Cursor++;
if (Cursor > 5) Cursor = 0;
break;
case 2: // -
if (Day > 1) Day--;
break;
case 3: // +
if (Day < 31) Day++;
break;
}
lcd.setCursor(3, 1);
break;
case 4: //месяц
switch (key) {
case 1: //следующая
Cursor++;
if (Cursor > 5) Cursor = 0;
break;
case 2: // -
if (Month > 1) Month--;
break;
case 3: // +
if (Month < 12) Month++;
break;
}
lcd.setCursor(6, 1);
break;
case 5: //год
switch (key) {
case 1: //следующая
Cursor++;
if (Cursor > 5) Cursor = 0;
break;
case 2: // -
if (Year > 16) Year--;
break;
case 3: // +
if (Year < 250) Year++;
break;
}
lcd.setCursor(9, 1);
break;
}
//записываем время если были нажаты клавиши + или -
if (key > 1)
{
Second |= 0x80; // stop the clock
Wire.beginTransmission(0x68);
Wire.write((uint8_t)0x00); // reset register pointer
Wire.write(dec2bcd(Second)) ;
Wire.write(dec2bcd(Minute));
Wire.write(dec2bcd(Hour)); // sets 24 hour format
Wire.write(Wday);
Wire.write(dec2bcd(Day));
Wire.write(dec2bcd(Month));
Wire.write(dec2bcd(Year));
Wire.endTransmission();
Second &= 0x7f; // start the clock
Wire.beginTransmission(0x68);
Wire.write((uint8_t)0x00); // reset register pointer
Wire.write(dec2bcd(Second)) ;
Wire.endTransmission(); //!!!!!!!!!!!!!!!!!!!!!!!!!! проверить или будет работать с неполной передачей данных!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
goto Loop; //зацикливаем настройку, выход из настройки - выключением
}
Неактивний
Надо писать свой обработчик или спросить у гугла.
Когда то давно я писал свой, не помню рабочий ли он на 100%. Вот код, это кусок из программы, но смысл понятен. Поправиш его под свои нужды.Loop: //блок считывания текущего времени и даты Wire.beginTransmission(0x68); Wire.write((byte)0); Wire.endTransmission(); Wire.requestFrom(0x68, 7); // if (Wire.available() < 7) return; Second = bcd2dec(Wire.read() & 0x7f); Minute = bcd2dec(Wire.read() ); Hour = bcd2dec(Wire.read() & 0x3f); // mask assumes 24hr clock Wday = Wire.read(); Day = bcd2dec(Wire.read() ); Month = bcd2dec(Wire.read() ); Year = bcd2dec(Wire.read() ); //отсчет с 2000 года //блок подготовки строк для вывода на дисплей Print_Digits(output_string_1, 4, 2, ' ', Hour); //4,0 output_string_1[6] = ':'; Print_Digits(output_string_1, 7, 2, '0', Minute); //7,0 output_string_1[9] = ':'; Print_Digits(output_string_1, 10, 2, '0', Second); //10,0 Print_Digits(output_string_2, 3, 2, ' ', Day); //3,1 output_string_2[5] = '/'; Print_Digits(output_string_2, 6, 2, '0', Month); //6,1 output_string_2[8] = '/'; Print_Digits(output_string_2, 9, 4, '0', Year + 2000); //9,1 //вывод на дисплей lcd.clear(); lcd.print(output_string_1); lcd.setCursor(0, 1); lcd.print(output_string_2); //считываем нажатия кнопок key = 0; if (!digitalRead(GasButonPin)) key = 2; if (!digitalRead(BenzButonPin)) key = 3; if (analogRead(ButonsPin) < 100) key = 1; if (key) delay(500); else delay(100); //корректируем время/дату switch (Cursor) { case 0: //часы switch (key) { case 1: //следующая Cursor++; if (Cursor > 5) Cursor = 0; break; case 2: // - if (Hour > 0) Hour--; break; case 3: // + if (Hour < 23) Hour++; break; } lcd.setCursor(4, 0); break; case 1: //минуты switch (key) { case 1: //следующая Cursor++; if (Cursor > 5) Cursor = 0; break; case 2: // - if (Minute > 0) Minute--; break; case 3: // + if (Minute < 60) Minute++; break; } lcd.setCursor(7, 0); break; case 2: //секунды switch (key) { case 1: //следующая Cursor++; if (Cursor > 5) Cursor = 0; break; case 2: // - if (Second > 0) Second--; break; case 3: // + if (Second < 60) Second++; break; } lcd.setCursor(10, 0); break; case 3: //день switch (key) { case 1: //следующая Cursor++; if (Cursor > 5) Cursor = 0; break; case 2: // - if (Day > 1) Day--; break; case 3: // + if (Day < 31) Day++; break; } lcd.setCursor(3, 1); break; case 4: //месяц switch (key) { case 1: //следующая Cursor++; if (Cursor > 5) Cursor = 0; break; case 2: // - if (Month > 1) Month--; break; case 3: // + if (Month < 12) Month++; break; } lcd.setCursor(6, 1); break; case 5: //год switch (key) { case 1: //следующая Cursor++; if (Cursor > 5) Cursor = 0; break; case 2: // - if (Year > 16) Year--; break; case 3: // + if (Year < 250) Year++; break; } lcd.setCursor(9, 1); break; } //записываем время если были нажаты клавиши + или - if (key > 1) { Second |= 0x80; // stop the clock Wire.beginTransmission(0x68); Wire.write((uint8_t)0x00); // reset register pointer Wire.write(dec2bcd(Second)) ; Wire.write(dec2bcd(Minute)); Wire.write(dec2bcd(Hour)); // sets 24 hour format Wire.write(Wday); Wire.write(dec2bcd(Day)); Wire.write(dec2bcd(Month)); Wire.write(dec2bcd(Year)); Wire.endTransmission(); Second &= 0x7f; // start the clock Wire.beginTransmission(0x68); Wire.write((uint8_t)0x00); // reset register pointer Wire.write(dec2bcd(Second)) ; Wire.endTransmission(); //!!!!!!!!!!!!!!!!!!!!!!!!!! проверить или будет работать с неполной передачей данных!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } goto Loop; //зацикливаем настройку, выход из настройки - выключением }
извините за глупый вопрос но где его правильно вставить?
Неактивний
https://drive.google.com/file/d/0ByjXDH … sp=sharing
вот такая ошибка
Неактивний
Данный код вставить не получится, так как это часть другой программы, его надо адаптировать для вашей программы - изменить или добавить переменные и функции.
Second, Minute, Hour ... - переменные в них хранятся соответствующие значения.
bcd2dec - функция преобразования формата чисел.
Print_Digits - функция преобразования числа в строку.
Неактивний
Данный код вставить не получится, так как это часть другой программы, его надо адаптировать для вашей программы - изменить или добавить переменные и функции.
Second, Minute, Hour ... - переменные в них хранятся соответствующие значения.
bcd2dec - функция преобразования формата чисел.
Print_Digits - функция преобразования числа в строку.
а можно пример
а то я совсем туго
Неактивний