Помогите с программой

Volotner
Offline
Зарегистрирован: 26.06.2016

Добрый день.

Подскажите новичку -нубу. Заливаю скетч все работает отключаюсь от USB все работает от БП. Отключаю БП, включаю снова программа не работает - не реагирует на команды с ИК пульта.

плата - arduino pro micro (китайская поделка на atmega32u4 - определяется win7 как leonardo).

Скетч:

#include <AccelStepper.h>   //подключение библиотеки ШД
#include <IRremote.h>   //подключение библиотеки ИК
\
int RECV_PIN = 9; // назначение пина 9 инф входом от ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
int LED = 8; // Назначение пина 8 вых на вкл/откл света
int en = 6; //Назначение пина 6 для сигнала "enable"
AccelStepper stepper  (1, 10, 2); // настройки ШД :2-х обмоточный движок пин 10-степ пин 2-дир)
int svet = 0; //ввод переменной состояния сигнала вкл/откл света

void setup()

{
  irrecv.enableIRIn();
  pinMode(LED, OUTPUT); // вход
  stepper.setMaxSpeed(1500.0);// задание скорости 1500 импульсов в секунду
  stepper.setAcceleration(4000.0); // задание ускорения 4000
  pinMode(en, OUTPUT);//
  digitalWrite(en, HIGH);// отключение ШД в простое
  digitalWrite(LED, HIGH  );// отключение света в начальный период
}

void loop() {

  if (irrecv.decode(&results))
  {
    if (results.value == 0x25802501 && svet == 0) //чтение кнопки "свет" и сравнение
      // переменной свет: если есть сигнал от ИК пульта "вкл/откл свет" и переменная свет = 0
    {
      delay(50); // защита от дребезга контактов
      svet++;  //присвоение переменной свет значения 1
      digitalWrite(LED, !digitalRead(LED)); // смена значения у выхода вкл/отлк свет
      // на противоположное
    }
    if (results.value == 0x25802501 && svet == 1) ////чтение кнопки "свет" и сравнение
      // переменной свет: если есть сигнал от ИК пульта "вкл/откл свет" и переменная свет = 0
    {
      svet = 0; // присвоение переменной "свет" значения 0
    }
    if (results.value == 0x6F5974BD)// чтение кнопки вверх
    {
      digitalWrite(en, LOW);// включение ШД
      delay (50); // выдержка времени
      stepper.runToNewPosition(0); // команда "поднять"
    }
    if (results.value == 0x57E346E1)//чтение кнопки вниз
    {
      digitalWrite(en, LOW);// включение ШД
      delay (50); // выдержка времени
     stepper.runToNewPosition(-1500);// команда "опустить" ( за 750 шагов выходной вал мотор-редуктора совершает 1 оборот)
    }
    irrecv.resume(); //
    digitalWrite(en, HIGH);// отключение ШД
  }
}

Пробовал скетч с той же библиотеки для ШД, чтобы ШД по циклу шагал в разные положения, этот:

#include <AccelStepper.h>

// Define a stepper and the pins it will use
AccelStepper stepper  (1, 10, 2); 

void setup()
{ 
    stepper.setMaxSpeed(500.0);
    stepper.setAcceleration(4000.0);
}

void loop()
{   
    stepper.runToNewPosition(0);
    stepper.runToNewPosition(500);
    stepper.runToNewPosition(100);
    stepper.runToNewPosition(120);
}

при снятии и подаче питания программа выполняется, но слетают настройки скорости и ускорения.

Есть сомнения что дело в скетче, подскажите в какую сторону копать.

кутузов
Offline
Зарегистрирован: 22.06.2016

Не понятно, ты когда скетч заливаеш, плата к б.п. тоже подключена? Как ведет себя плата если не подключать блок питания вобще, а питать только от юсб компьютера? если обесточив подключить к компу, что происходит?  работает... тогда все дело в БП (плохая стабилизация, скачки напряжения) , не работает... тогда дело в самой плате или коде (с кодом я помоч не смогу, я в этом профан.А по железу хоть по БП, хоть по плате спрашивай, помогу советом )

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013
Volotner
Offline
Зарегистрирован: 26.06.2016

C питанием не все гладко, Там связка импульсный бп 220VAC/12VDC на силовую часть + импульсный БП 12VDC/5VDC на arduino + ИК. Так вот при питании от usb компа при собранной схеме, питания не хватает (диод питания тускнеет, комп теряет плату), видимо на холостом пара БП изрядно прожорлива (честно говоря если что внутри БП 220VAC/12VDC представляю то начинка 12VDC/5VDC - загадка, бп залит компаундом герметично)... При работе от БП - все гуд... Если скинуть БП то плата работает но работает аналогичным образом - тупит при подаче - снятии питания от USB компа. 

Volotner
Offline
Зарегистрирован: 26.06.2016

Проблема с bootloader`ом много обьясняет. Спасибо.

Я так понимаю без программатора прошить bootloader  не реально? 

 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

В случае с "IRremote.h" там есть один прикол такой, который, как бы, никакого отношения к питанию и не имеет, но без него очень часто и при невыясненных обстоятельствах приёмник перестаёт реагировать на пульт. У меня такое было. Сейчас я свои старые скетчи подниму и гляну в чём там дело. Меня специально тут на форуме носом тыкали в этот момент....

Ага, вот:

 irrecv.resume();  // ========>   Принимаем следующую команду
    delay(500);
}                 // viod loop()

Вот эту комманду надо выполнять в конце общего цикла "void loop()". И обязательно задержку делать, потому что приёмник не успевает подготовиться к приёму следующей комманды. Тоесть тебе там нужно свой "irrecv.resume();" вынести над последней скобкой и приделать небольшой "delay();" Ну у меня было некритично, так что и полсекунды вполне устраивало.

Volotner
Offline
Зарегистрирован: 26.06.2016

Я верно понимаю что вы предлагаете строки 53-56:

53     irrecv.resume(); //
54     digitalWrite(en, HIGH);// отключение ШД
55   }
56 }

Заменить на: 

 
       digitalWrite(en, HIGH);// отключение ШД
       }
    irrecv.resume(); //
    delay("X")
}

 

Где X не менее 50 (а там уже поиграться со значением) ?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Volotner, Да. И TSOP надо подключить по феншую. С резисторми и конденсатором..

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Кондер (4.7Мкф) между ножками питания TSOP, "+" до VCC спустить через 100ом, и подтянуть к VCC 10-ю килоомами выход.

Volotner
Offline
Зарегистрирован: 26.06.2016

p.s. диодом приемник весело моргает (сигнализирует о приеме) у меня шилд потому видно что сам сигнал принят.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Volotner пишет:

p.s. диодом приемник весело моргает (сигнализирует о приеме) у меня шилд потому видно что сам сигнал принят.

ААА! У меня без этих деталей не моргал. И в Serial ничего не выводил... Значит у тебя какая-то другая трабла.

--------------------

Volotner пишет:
Отключаю БП, включаю снова программа не работает - не реагирует на команды с ИК пульта.

Тоесть - светодиод моргает, а скетч не работает? Так что ли?

Volotner
Offline
Зарегистрирован: 26.06.2016

Спасибо, за помощь, закажу программатор и буду копать в этом направлении. По описаниям очень похоже. Ну и очень похоже на правду - в китайском стиле не заморачиваться прошивками. 

Volotner
Offline
Зарегистрирован: 26.06.2016

Именно, шилд получает сигнал но дальше 0 реакции.

В силу своей темноты думал может у него не сохряняет скетч во flash но это нереально. Ну или вариант что программе для старта пинок нужен. Попробовал скетч с шагами по позициям (думал диодом поморгать но на этой плате его нет только сервисные power, tx, rx) так скетч сохряняется но слетают настройки скорости и ускорения. Это показало что скетч в памяти хранится но не весь. Идея про пинок тоже сразу отпала. Тогда подумал может сами кодировки сигнала как-то закинуть в eeprom а в программе их оттуда забирать, но подумал что слишком сложно и решил на форуме проконсультироваться. Тем более что это мой первый опыт и я чего-нибудь могу не видеть.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Volotner пишет:

Именно, шилд получает сигнал но дальше 0 реакции.

В силу своей темноты думал может у него не сохряняет скетч во flash но это нереально. Ну или вариант что программе для старта пинок нужен. Попробовал скетч с шагами по позициям (думал диодом поморгать но на этой плате его нет только сервисные power, tx, rx) так скетч сохряняется но слетают настройки скорости и ускорения. Это показало что скетч в памяти хранится но не весь. Идея про пинок тоже сразу отпала. Тогда подумал может сами кодировки сигнала как-то закинуть в eeprom а в программе их оттуда забирать, но подумал что слишком сложно и решил на форуме проконсультироваться. Тем более что это мой первый опыт и я чего-нибудь могу не видеть.

Чота как для первого опыта - сложновасто... Как говорил Жорик Вартанов: "Вася, Вы такой умный - я ваще ничего не поняль!"

Volotner
Offline
Зарегистрирован: 26.06.2016

Решил делать самодельный экран проектора. Давно была мысль поиграть с ардуино но все не досуг. Сначала решил что будет движок постоянного тока от стеклоподъемников и ик реле. Но потом понял что там надо контролировать степень размотки полотна и ставить герконы (или другие концевички) для защиты от дурака. Но в такой системе - сворачиваемй рулон, установке геркона не оч надежна и рано или поздно даст сбой чисто механически. А пользоваться будет и жена и если что не так то это ЧП и паника. Потому решено было что шаговик (он при достаточном моменте шагает четко и делает это с 1 нажатия без необходимости контроля) и гарантирует четкое позиционирование. Однако ему для управления нужен источник импульсов и тут как раз ардуино иделаьный вариант (недорого, относительно просто, расширяемо) не ну есть конечно ESP8266 он со встроенным wifi но там все сложнее и меньше инфы для новичка. В процессе разработки проект оброс подсветкой (а-ля люстра) из светодиодной ленты, и охлаждением с вентилятором (его пока нет, на первое время планируется аналогично свету с дальнейшим переводом на работу по таймеру  или часам реального времени). Вентилятор нужен потому что вся электроника находится в замкнутом кожухе вместе с шаговиком прямо сбоку от полотна. 

Зы память вроде остается, пины тоже, место в кожухе тоже. Может потом еще что прикручу, может будильник или еще что =)

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Volotner пишет:
Зы память вроде остается, пины тоже, место в кожухе тоже. Может потом еще что прикручу, может будильник или еще что =)
Прикрути автоматическое плавное выключение света по концу разматывания экрана и включение проектора после того как свет полностью потух ))))

Volotner
Offline
Зарегистрирован: 26.06.2016

Включение света по положению полотна точно не нужно - лента, это дополнительный источник света. А вот включение проектора - по положению "экран опущен" оч даже круто =)))) , надо только ИК светодиод прикрутить к ардуине и отсканировать код пульта от проектора =))). Идея хорошая !!! Общий свет только все равно отдельный и ручной , ремонт уже сделан, а коробку с приборами красиво рядом с выключателем не воткнуть. 

 

Закончу - выложу в проекты ;-) с фото и видео...

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Ну ладно. Не нужен свет, прикрути счётчик времени работы проектора. Если это видеопроектор, то время работы лампы с сохранением на флешку будет очень кстати и избавит от незадействованных пинов ))))

кутузов
Offline
Зарегистрирован: 22.06.2016

Можт и правда все дело в прошивке, только меня смущяет, что у тебя  5В ЮСБ не хватает если питаеться только сама ардуина + ИК. Даже самый слабый USB2.0 уверенно выдает ток 0,5А. Этого вполне хватит  чтоб несколько ардуин + ИК подключить. Я бы на твоем месте отключил от платы все кроме ИК, добавил бы в код отправку в Serial сигнала с пульта и попробовал бы так для начала , залил код, проверил что сигнал с пульта приходит в монитор порта, затем обесточил на пару минут и опять в комп посмотреть что в монитор порта приходит. Если и в таком случае пролема останется тогда прошивай, иначе смотри внимательно все подключения.

кутузов
Offline
Зарегистрирован: 22.06.2016

И перед покупкой программатора подумай может вторую ардуино прикупить в место него , ардуино bootloader можно прошить и при помощи другой ардуино

https://www.youtube.com/watch?v=PmS5JUm9Ub0

Volotner
Offline
Зарегистрирован: 26.06.2016

Тут такой момент. Согласно схемы на плату ( по крайней мере с которой это копия)  http://cdn.sparkfun.com/datasheets/Dev/Arduino/Boards/Pro_Micro_v13b.pdf. При питании от юсб и подключении к БП возникает интересная штука. Если во вторичной цепи БП 12/5 VDC есть чему нагружаться то он благополучно будет кушать питание с ЮСБ. Однако с портом поиграюсь. Хотя первоначально уже читал сериал ( когда пульты пробовал и декодировал сигнал). Проседающее питание это 100% цепи БП,  без БП все отлично но программа все равно не работает. Согласен что схема питания плохая и в идеале лучше гальванически развязывать силовые цепи и цепи управления. И не должно быть так - просадки питания, но я не электронщик и с паяльником и схемотехникой не очень дружен, если честно...  Преобразователь 12/5В что-то типа такого http://5198.ru/products/inverter-12v-24v-v-5v-75w-15a-dc-dc-preobrazovatel-12-5-24-5 только на 3А, мне даже излишне но дареному коню как говорится.. Что внутри я без понятия, и если импульсный БП 220/12В я хоть разобрать могу то с этим вообще темная история - его только если болбить комаунд, однако корпус жалко оч удобно его за ухи крепить... и удачно вписался он акурат под драйвером ШД (тб6560) там где радиатора нет и влез.. 

кутузов
Offline
Зарегистрирован: 22.06.2016

Разбирать блок питания однозначно не нужно. С ком портом поиграйся, главное чтоб от платы было отключено все лишнее оставь только саму плату и ИК. Все остальное отключи, так ты провериш забывает ли у тебя плата    скетч залитый в нее после отключения питания, если забывает то однозначно пробывать прошивать. А вот если амнезия у ардуинки пройдет значит дело не в загрузчике, тогда останется исключить оставшиеся варианты 1 проблемы с бп, 2 короткое замыкание на 5В, 3 попадание 12 в на ардуину.

Volotner
Offline
Зарегистрирован: 26.06.2016

Последние полевые испытания дали следующие результаты:

Опыт 1: Запуск с питанием от ЮСБ. скетч считывания кодов пульта а именно: 

#include <IRremote.h>
int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN); //
decode_results results; //

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // 
}

void loop() {
  if (irrecv.decode(&results)) //
  { 
    Serial.println(results.value); //
    irrecv.resume(); // 
  }
}

При подаче -> снятие -> подаче питания исправно работал и слал  коды даже после повторного питания.

Опыт 2:  попробовал запуск моего скетча из первого поста, но с 1 условием: из схемы подключения исключено все кроме ик приемника и релейного модуля, все силовые цепи обесточены, питание релейного модуля и ик от VCC выхода ардуино, питание ардуино от ЮСБ. Результаты:

При залитой программе релешка щелкается, после снятия питания (шнурок ЮСБ) и подачи питания - релешка перестает реагировать. Ик модуль сигнал получает, о чем рапортует диод на плате, ардуино на DI напряжение не дает.. =(

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

1. Проверить уровень импульса на DI

2. Вместо релюшки подключить светодиод.

3. Попробовать задействовать какой-то другой пин для управления реле.

кутузов
Offline
Зарегистрирован: 22.06.2016

Какой релейный модуль применяеш? подключаеш его правильно?

Похоже что ардуино прошивать нет необходимости. Надеюсь у тебя не просто реле на 5В , а готовый релейный модуль. Перепроверь подключение релейного модуля, посмотри на предмет наличия перемычек (если они есть разберись для чего они) , если все правильно ни чего не напутано, ни где не задевает (иногда шилды которые вставляются сверху могут задевать разьем ЮСБ) , попробуй отключить питание релейного модуля от VCC ардуино и переподключи его к RAW , а перемычку SJ1 на ардуине сними. Так судя по схеме на твою плату напряжение на выходах ардуино упадет до 3,3В вместо 5В, но зато для самой атмеги питание снанет стабильней.

Если так заработает, то когда будеш собирать схему полностью питай ардуино не через VCC а через RAW. 

Volotner
Offline
Зарегистрирован: 26.06.2016

Щас на работе. Вечером поиграю. А в обед для понимания постараюсь успеть нарисовать схемы подключения ( для опытов и для рабочей схемы). Чтоб проще обьяснить =) 

Volotner
Offline
Зарегистрирован: 26.06.2016

Отрисовать все схемы не успел. Но пока для затравки кидаю полную схему... При сборке целиком и питании от сети... Ссори развернуть не получилось =( не работает стрелочка =(..  Релейный модуль 

http://ru.aliexpress.com/item/Free-Shipping-1PCS-LOT-5V-2-Channel-Relay-Module-Shield-for-Ardui-ARM-PIC-AVR-DSP/32340779264.html

Ардуина 

http://ru.aliexpress.com/item/Mini-Leonardo-Pro-Micro-ATmega32U4-5V-16MH...

Модуль с ИК приемником

http://ru.aliexpress.com/item/100-New-Infrared-IR-Wireless-Remote-Contro...

Кстати отрисованый проект оч маленький и схемка небольшая... А работать не хочет, ощущаю себя полнейшим нубом =( 

Volotner
Offline
Зарегистрирован: 26.06.2016

Чет не читается схемка, перезалил, форум сьел разрешение а я и не заметил 

Вот

кутузов
Offline
Зарегистрирован: 22.06.2016

Рисовать не буду, попробую так обьяснить. Контакт на релейном модуле VCC тот что рядом с контактом IN2 отсоедини от блока питания и подключи к VCC ардуино. Сними перемычку на релейном модуле. Контакт JD-VCC , тот что был под перемычкой, подключи к +5В блока питания. К онтакт VCC тот что был под перемычкой оставь не подключенным. Должно заработать, удачи.

Volotner
Offline
Зарегистрирован: 26.06.2016

То есть так? . А второй GND тот что у VCC - JD-VCC оставить  висеть?

При таком подключении все равно после снятия питания не работает реле.

 

кутузов
Offline
Зарегистрирован: 22.06.2016

Второй GND должен быть в самом релейном модуле соединен с первым, можеш подключить на всякий случай

 

кутузов
Offline
Зарегистрирован: 22.06.2016

Твоя схемка ,http://s013.radikal.ru/i323/1606/6e/a00c11540d27.jpg, должна работать.