Официальный сайт компании Arduino по адресу arduino.cc
Электропастух.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 08/11/2016 - 09:25
В интернетах такого не встретил, все делают на таймерах или дискретной логике. Исправим.
Суть девайса - на столбиках натянут провод на изоляторах и бок выдает периодически на эту проволоку высоковольтные импулься (искру) относительно земли. Для животных не опасно, но болезненно и быстро вырабатывается рефлекс - не подходить близко к забору. Напряжение 4-5КВ для гладкошерстных и 8-10 для лохматых. Длина участка до 10КМ. Все собрано, все работает. Задействован сторожевой таймер и есть контролька утечки высокого напряжения в линии с сигнализацией. Остальное думаю будет понятно и так. Пользуйтесь кому надо!
// Electric fency. Umka 2016 // http://u-m.biz #include <avr/wdt.h> #define outPin 3 // выход на коммутатор #define pausePin A1 // пин резистора регулировки паузы #define counterPin A3 // пин резистора регулировки пакета искр volatile unsigned long waitAlarm = 30000; // таймер аварии по высокому напряжению unsigned long now; void setup() { //Serial.begin(9600); pinMode(outPin, OUTPUT); // назначаем пин выхода выходом :) pinMode(2, INPUT_PULLUP); pinMode(13, OUTPUT); wdt_enable (WDTO_8S); // заводим сторожевой таймер на 8 сек. attachInterrupt(0, resetAlarm, FALLING);// цепляем прерывание для сброса аварии по искре } void loop() { int pause = analogRead(pausePin) * 3; // задаем резистором паузу 0 - 3 сек. int counter = analogRead(counterPin); counter = map(counter, 0, 1024, 1, 30); // задаем количество искр в каждом пакете now = millis(); if (now < waitAlarm && millis() % pause < 2) { for (int count = 0 ; count < counter ; count++){ // в цикле повторяем для каждой искры digitalWrite(outPin, HIGH); // циклично дрыгаем ногами выхода и светодиода на 13 пине. digitalWrite(13, HIGH); delay(5); digitalWrite(outPin, LOW); digitalWrite(13, LOW); delay(5); //Serial.print(now); //Serial.print(" "); //Serial.println(waitAlarm); } } else if (now > waitAlarm && millis() % 10000 < 2) { analogWrite(13, 120); // при утечке искры зажигаем светодиод и digitalWrite(outPin, HIGH); // раз в 10 секунд выдаем проверочную искру. delay(5); digitalWrite(outPin, LOW); //Serial.println("alarm"); } wdt_reset(); // сбрасываем сторожевой таймер. } void resetAlarm() { // сбрасываем аварийный счетчик по датчику искры waitAlarm = now + 30000; delay(5); }
Видео на youtube:
1 часть.
https://www.youtube.com/watch?v=A6aJ5BiYMKQ
2 часть.
https://www.youtube.com/watch?v=bF6NjrPCUNE
бедная свинка)) а вообще классно. как проблему утечек после дождя решал?
Свинка не бедная. Ей 3 раз хватило чтобы потом неделю не подходить к забору.
Траву выкашивать триммером вдоль забора обязательно. Изоляторы из пластиковых бутылок с сухой зоной. Даже при мокром проводе утечек не должно быть.
Вообще рефлекс развивается устойчивый на сильный болевой раздражитель и проверять постоянно животные забор не будут. Говорят на месяц и больше можно выключать и не разбегаются.
ну тогда все норм
А где схема кстройства? Под спойлером только код
В видео, во 2 части.
Спасио, посмотрел, но очень неудобно, т.к с телефона. Схема в тексте смотрелась бы лучше ;)
https://drive.google.com/open?id=0B0vRuSZ7oRUeblVkZ2M4MGJHbW8
Спасибо!
У автора действительно выходит дешево и сердито. Все можно купись у дедушек на авторынке за сущие копейки. А вместо коммутатора можно поставить мощнейший полевик с материнской платы :)
Или модуль зажигания, например Тойотовский. Там и катушка и коммутатор сразу в одном флаконе.
Доброе время суток!
Заинтересовал данный проект. Купил Ардуино "НАНО", залил скеч "моргание светодиодом" работает (светодиод моргает), заливаю скетч электропастуха из данной темы, на выходе ни чего нет (на выход цепляю осциллограф).
Может, что не так делаю?
На выходе 3 Pina сигнал какой формы должен быть?
На выходе 3 Pina сигнал какой формы должен быть?
прямоугольной, а шо? - нет?
Разобрался, я подключал по схеме которая у автора во 2-ой части, а там если посмотреть, то провод на коммутатор идёт от контакта 3 считая от левого с верху края (у меня подписан как D10) в результате у меня ни чего не получалось. В результате всяких танцев с "бубном" рабочим оказался выход D3 (если смотреть на схему автора, то контакт 10 от левого с верху края).
Теперь другая проблема, всё регулируется, единственное, что через некоторое время всё перестаёт работать пока кнопку "ресет" не нажать. Может ли это быть из за того, что кнопка не подтянута резистором и конденсатором?
Скетч с детектором залил, а детектор искры не сделал да?
Скетч с детектором залил, а детектор искры не сделал да?
О скетче, Я его прежде чем залить "проверил" и в среде Ардуино 1.6.13 (с ней я работаю в данный момент) программа показала ошибку в строке attachInterrupt(0, resetAlarm, FALLING), пишет, что "resetAlarm" не задикларирован. Как правильно это сделать и в какой области?
Скетч заливал без "проблемной" строки.
Прошу прощения, я новичок в Ардуино.
resetAlarm это такая функция в скетче, ктороая будет вызываться по прерыванию внешнему. Суть такая - счетчик аварии считает микросекунды, детектор искры по прерыванию его постоянно сбрасывает, авария не наступает, пока фигачит искра. Про функции можно почитать по ссылке "программирование" вверху страницы.
resetAlarm это такая функция в скетче, ктороая будет вызываться по прерыванию внешнему. Суть такая - счетчик аварии считает микросекунды, детектор искры по прерыванию его постоянно сбрасывает, авария не наступает, пока фигачит искра. Про функции можно почитать по ссылке "программирование" вверху страницы.
Что то про эту функцию в "программирование" я ни чего не нашёл. Да и непонятно почему при проверке прога пишет ошибку. Пытаюсь изучить данную функцию по другим сайтам.
Я не говорил про эту функцию, я говорил про функции в языке программирования. Что это такое, как вызывается и как работают. Если убрать вызов функции по прерыванию, то логично же что сброса таймера аварии не произойдет. Короче марш матчасть учить!
Собрал пастух по Вашей схеме на деталях
Катушка зажигания ВАЗ 2101-07 Б117А-11
Пучок проводов коммутатора ВАЗ 2108-2109
Коммутатор ВАЗ 2108-09-099, 1111 133.3774-01
Батарея WBR HR 1234 W F2 12V/9AH
DC-DC step-down power supply module 3A
+ китайская arduiono nano
В ардуино пришлось перепрошить бутлоадер в optiboot чтобы заработал аппаратный сброс (watch dog)
Как это сделать, например, можно прочитать здесь
Но видимо, что-то собрал не так :)
В момент высоковольтного разряда по всей схеме идёт скачок перенапряжения, да такой, что мультиметр в режиме измерения постоянного тока > 600V , подключенный на выход dc-dc преобразователя начинает показывать нереальное напряжение вместо 5V.
Искра есть, но ардуино в таком режиме зависает через 5-10 секунд, даже если высоковольтный провод не поднесён близко к массе
Аппаратный reset срабатывает изредка, в большинстве случаев помогает только отключение питания.
Вобще удивительно, что arduino и dc-dc преобразователь не сгорают при таких скачках напряжения.
На фото Вашего изделия я вижу еще установлен стабилитрон ZD 4v7

Если можно увидеть полную схему, буду благодарен за помощь
А, на входе стабилитрон, на входе детектора искры. Ну стандартная схема для стабилитрона с резистором, ограничитель напряжения на входе Ардуино. Схему лень рисовать. Советую еще опторазвязку на выход добавить, но вроде и так не виснет и нету никаких разрядов на плате. Может там общие не связаны у коммутатора и платы?
Коммутатор и катушка скручены между собой гайкой и болтом через штатные отверстия и подключены к выходу номер два на коммутаторе и к минусу. Как на схеме
Вот фото как я собрал https://yadi.sk/i/vo258q2_3JE33h и https://yadi.sk/i/0_GHsfKs3JE3kv
Может быть, нельзя так близко располагать коммутатор к катушке? Я программист, а не электронщик, как работает стабилитрон и опторазвязка пока что только в теории знаю.
Буду изучать.
Еще раз внимательно посмотрел на схему и нашел ошибку. Подключил + и - у подстроечных резисторов не к выходу dc-dc преобразователя, а к + и - аккумулятора.
Пересоберу и проверю.
Стабилитрон стоит параллельно входу в обратном включении. Когда напряжение на нем выше напряжения стабилизации, происходит электрический пробой стабилитрона, его сопротивление резко уменьшается и он шунтирует вход, работает всегда в паре с резистором, с которым создает делитель напряжения. Вот все "лишнее" и начинает падать на резисторе, а на вход МК не попадает. Когда напряжение опускается ниже порога стабилизации, стабилитрон восстанавливает свое состояние и не мешает. Это не разрушающий процесс.
https://goo.gl/photos/rX1mTSrpGXdKwBbr7
Оптрон это светодиод на входе и фототранзистор на выходе. Когда светодиод светит - фототранзистор открывается. Смысл его в том что можно больший ток и напряжение коммутировать и из выходной цепи опасное напряжение не попадет никак во входную. Оптическая развязка. Схему лень рисовать, в гугле есть.
Спасибо за объяснение. А почему стабилитрон перед МК, а не перед dc-dc преобразователем? Ему ведь тоже вредно перенапряжение.
Можно ли типа такого
Д815Д металл, Стабилитрон кремниевый мощный, 12В
поставить перед dc-dc?
Про оптрон пока не понимаю, ведь источник питания один. На клеммах аккумулятора скачки напряжения до > 1000В.
Это если бы, скажем, ардуино от отдельных 5v питалась и измерять ей напряжение или ток в сети 220v через оптрон, то да. Поищу еще схемы.
Вообще-то dc-dc и есть сам себе стабилитрон. Ну то есть стабилизатор напряжения. Что ему изменения на входе, тем более от БП или аккумулятора. А стабилитрон на входе с детектора искры тут стоит. Там жестянка пластина на провод высоковольтный трубочкой надета. И импульс там до 20В легко генерируется, я смотрел осциллографом. А что может случиться с МК, если ему на вход 20+В подать? Может просто зависнуть, а может и сгореть вход, в зависимости от силы ЭДС. Стабилитрон тут поможет сделать из непонятного всплеска 4,7В, то есть логическую единичку для мк.
Я Вас понял. Вы решали другую проблему стабилитроном. У меня пока что большие скачки по питанию на ардуино, которые приводят к полной неработоспособности схемы. Детектор искры я пока что даже не делал.
Можете дать ссылку на ваш dc преобразователь?
https://ru.aliexpress.com/item/5PCS-XM1584-Ultra-small-size-DC-DC-step-d...
Вроде разобрался, заработало. Один из подстроечников был не так подключён. Попробую теперь подключить к настоящей изгороди.
Скорее всего есть проблема с большими наводками на мк из-за длинных проводов или еще чего-то. У меня достаточно на D2 подключить кусок провода, чтобы сработало прерывание в вашем скетче. Даже не нужно его к земле притягивать :)
кстати, там опечатка на зажигание диода нужно digitalWrite(13, HIGH) вместо analogWrite(13, 120)
и еще по описанию внутри прерывания функция delay() не работает
а мультиметр показывает скачок напряжения в момент разряда, даже если плюсовую клемму мультиметра отсоединить от аккумулятора!
Здравствуйте. Помогите с прошивки ардуино нано для электропастух.
Чего там у Вас случилось то.
Вы на фермер.ру есть?