dimujin

dimujin

Комментарии

dimujin 18.06.2015

<b>Модуль часов DS-1302.</b> <br /><br /> Подключение к Ардуино: <br /><br /> VCC 3,3...5В <br /> GND GND (подключить через резистор 1КОм) <br /> CLK 3 <br /> DAT 1 TX0 <br /> RST 0 RX0 <br /><br /> <a class="link" href="https://cloud.mail.ru/public/68cY/y1C3FKnD2" rel="nofollow" target="_blank">Скачать библиотеку.</a> <br /><br /> <!--uSpoiler--><div class="uSpoilerClosed" id="uSpoilerzmXwSL"><div class="uSpoilerButBl"><input type="button" class="uSpoilerButton" onclick="if($('#uSpoilerzmXwSL')[0]){if ($('.uSpoilerText',$('#uSpoilerzmXwSL'))[0].style.display=='none'){$('.uSpoilerText',$('#uSpoilerzmXwSL'))[0].style.display='';$('.uSpoilerButton',$('#uSpoilerzmXwSL')).val('Закрыть спойлер');$('#uSpoilerzmXwSL').attr('class','uSpoilerOpened');}else {$('.uSpoilerText',$('#uSpoilerzmXwSL'))[0].style.display='none';$('.uSpoilerButton',$('#uSpoilerzmXwSL')).val('Открыть спойлер');$('#uSpoilerzmXwSL').attr('class','uSpoilerClosed');}}" value="Открыть спойлер"/></div><div class="uSpoilerText" style="display:none;"><!--ust--><!--uzcode--><div class="bbCodeBlock"><div class="bbCodeName" style="padding-left:5px;font-weight:bold;font-size:7pt">Код</div><div class="codeMessage" style="border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight<5?this.style.height:scrollHeight>200?'200px':''+(this.scrollHeight+5)+'px');"><!--uzc-->//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> Соответствие пинов часов&nbsp;&nbsp;пинпм Ардуино. <br /> // DS1302: CE pin -&gt; Arduino Digital 3 <br /> // I/O pin -&gt; Arduino Digital 1 <br /> // SCLK pin -&gt; Arduino Digital 0 <br /><br /> #include &lt;DS13022.h&gt; // Подключение библиотеки часов. <br /> #include &lt;Wire.h&gt; <br /> #include &lt;LiquidCrystal_I2C.h&gt; <br /><br /> // Инициализация пинов часов 0-RST 1-DAT 3-CLK <br /> DS1302 rtc(0, 1, 3&#41;; <br /><br /> //задаем адрес LCD экрана 0x27, 20 символов, 2 строки <br /> LiquidCrystal_I2C lcd(0x27, 20, 2&#41;; <br /><br /> void setup(&#41; <br /> { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.init(&#41;; // Инициализируем экран <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Запуск часов <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rtc.halt(false&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rtc.writeProtect(false&#41;; <br /><br /> // Запуск экрана с указанием количества символов и строк <br /> lcd.begin(20, 2&#41;; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// красивая &quot;загрузка&quot; программы при старте &lt;img rel=&quot;usm&quot; src=&quot;http&#58;//remont-aud.net/smailik/smile_.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:&#41;&quot; /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;Loading&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(500&#41;;&nbsp;&nbsp;// ждем 0.5 секунды <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;.&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(500&#41;;&nbsp;&nbsp;// ждем 0.5 секунды <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;.&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(500&#41;;&nbsp;&nbsp;// ждем 0.5 секунды <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;.&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(1000&#41;;&nbsp;&nbsp;// ждем 1 секунду <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.clear(&#41;;&nbsp;&nbsp;//очистка экрана <br /><br /> // Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем. <br /> //rtc.setDOW(THURSDAY&#41;; // День недели, если пятница, то FRIDAY на русском не писать! <br /> //rtc.setTime(11, 18, 0&#41;; // Часы, минуты, секунды 24-часовой формат. <br /> //rtc.setDate(4, 6, 2015&#41;; // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить! <br /><br /> } <br /><br /> void loop(&#41; <br /> { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Выводим сообщение // <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//включаем подсветку <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.backlight(&#41;; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Устанавливаем позицию начиная с которой выводится текст. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Отступ в данном случае 3, строка 1 (отсчет от нуля&#41;. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//lcd.setCursor(2, 0&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//выводим строку 1 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//lcd.print(&quot;Hello, World!&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//аналогично выводим вторую строку <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//lcd.setCursor(1, 1&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//lcd.print(&quot;Arduino&quot;&#41;; <br /><br /> lcd.setCursor(0, 0&#41;; // Устанавливаем курсор для печати времени в верхней строчке <br /> lcd.print(rtc.getTimeStr(&#41;&#41;; // Печатаем время <br /><br /> // Display abbreviated Day-of-Week in the lower left corner <br /> lcd.setCursor(9, 0&#41;; // Устанавливаем курсор слева внизу для печати дня недели <br /> //lcd.print(rtc.getDOWStr(FORMAT_LONG&#41;&#41;; // Печатаем день недели полностью, благо экран позволяет. <br /> lcd.print(rtc.getDOWStr(FORMAT_SHORT&#41;&#41;; // день недели <br /><br /> // Display date in the lower right corner <br /> lcd.setCursor(0, 1&#41;; // Устанавливаем курсор для печати даты <br /> lcd.print(rtc.getDateStr(&#41;&#41;; // Печатаем дату <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> // Wait one second before repeating &lt;img rel=&quot;usm&quot; src=&quot;http&#58;//remont-aud.net/smailik/smile_.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:&#41;&quot; /&gt; <br /> delay (1000&#41;; // Пауза 1 секунда и все по новой! <br /><br /> }<!--/uzc--></div></div><!--/uzcode--><!--/ust--></div></div><!--/uSpoiler-->

dimujin 18.06.2015

Управлять устройством буду одним устройством - энкодером. Он позволяет и выбирать и перемещаться по меню. <br /> Поскольку энкодер создает шумы при переключении, используем аппаратный фильтр в виде микросхемы 74HC14N <br /><br /> <!--uSpoiler--><div class="uSpoilerClosed" id="uSpoilerWkySiA"><div class="uSpoilerButBl"><input type="button" class="uSpoilerButton" onclick="if($('#uSpoilerWkySiA')[0]){if ($('.uSpoilerText',$('#uSpoilerWkySiA'))[0].style.display=='none'){$('.uSpoilerText',$('#uSpoilerWkySiA'))[0].style.display='';$('.uSpoilerButton',$('#uSpoilerWkySiA')).val('Закрыть спойлер');$('#uSpoilerWkySiA').attr('class','uSpoilerOpened');}else {$('.uSpoilerText',$('#uSpoilerWkySiA'))[0].style.display='none';$('.uSpoilerButton',$('#uSpoilerWkySiA')).val('Открыть спойлер');$('#uSpoilerWkySiA').attr('class','uSpoilerClosed');}}" value="Открыть спойлер"/></div><div class="uSpoilerText" style="display:none;"><!--ust--><img src="http://remont-aud.net/_pu/2/81865368.jpg" border="0" alt=""/><!--/ust--></div></div><!--/uSpoiler--> <br /><br /> <!--uSpoiler--><div class="uSpoilerClosed" id="uSpoilerHfhN3t"><div class="uSpoilerButBl"><input type="button" class="uSpoilerButton" onclick="if($('#uSpoilerHfhN3t')[0]){if ($('.uSpoilerText',$('#uSpoilerHfhN3t'))[0].style.display=='none'){$('.uSpoilerText',$('#uSpoilerHfhN3t'))[0].style.display='';$('.uSpoilerButton',$('#uSpoilerHfhN3t')).val('Закрыть спойлер');$('#uSpoilerHfhN3t').attr('class','uSpoilerOpened');}else {$('.uSpoilerText',$('#uSpoilerHfhN3t'))[0].style.display='none';$('.uSpoilerButton',$('#uSpoilerHfhN3t')).val('Открыть спойлер');$('#uSpoilerHfhN3t').attr('class','uSpoilerClosed');}}" value="Открыть спойлер"/></div><div class="uSpoilerText" style="display:none;"><!--ust--><!--uzcode--><div class="bbCodeBlock"><div class="bbCodeName" style="padding-left:5px;font-weight:bold;font-size:7pt">Код</div><div class="codeMessage" style="border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight<5?this.style.height:scrollHeight>200?'200px':''+(this.scrollHeight+5)+'px');"><!--uzc-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> #include &lt;Encoder.h&gt; <br /> #include &lt;DS13022.h&gt; // Подключение библиотеки часов. <br /> #include &lt;Wire.h&gt; <br /> #include &lt;LiquidCrystal_I2C.h&gt; <br /><br /> // Инициализация пинов часов 0-RST 1-DAT 3-CLK <br /> DS1302 rtc(0, 1, 3&#41;; <br /><br /> //задаем адрес LCD экрана 0x27, 20 символов, 2 строки <br /> LiquidCrystal_I2C lcd(0x27, 20, 2&#41;; <br /><br /> // Энкодер <br /><br /> int val; <br /> int PIN_ENCODER_CLK = 53; <br /> int PIN_ENCODER_DT = 52; <br /> int PIN_ENCODER_SW = 51; <br /><br /> //Encoder myEnc( PIN_ENCODER_DT, PIN_ENCODER_CLK &#41;; <br /> int encoder0Pos = 0; <br /> int encoder0PinALast = LOW; <br /> int n = LOW; <br /><br /> void setup(&#41; <br /> { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pinMode (PIN_ENCODER_CLK,INPUT&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pinMode (PIN_ENCODER_DT,INPUT&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.init(&#41;; // Инициализируем экран <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Запуск часов <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rtc.halt(false&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rtc.writeProtect(false&#41;; <br /><br /> // Запуск экрана с указанием количества символов и строк <br /> lcd.begin(20, 2&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Выводим сообщение // <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//включаем подсветку <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.backlight(&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// красивая &quot;загрузка&quot; программы при старте &lt;img rel=&quot;usm&quot; src=&quot;http&#58;//remont-aud.net/smailik/smile_.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:&#41;&quot; /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;Loading&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(500&#41;;&nbsp;&nbsp;// ждем 0.5 секунды <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;.&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(500&#41;;&nbsp;&nbsp;// ждем 0.5 секунды <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;.&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(500&#41;;&nbsp;&nbsp;// ждем 0.5 секунды <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;.&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(1000&#41;;&nbsp;&nbsp;// ждем 1 секунду <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.clear(&#41;;&nbsp;&nbsp;//очистка экрана <br /><br /> // Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем. <br /> //rtc.setDOW(THURSDAY&#41;; // День недели, если пятница, то FRIDAY на русском не писать! <br /> //rtc.setTime(11, 18, 0&#41;; // Часы, минуты, секунды 24-часовой формат. <br /> //rtc.setDate(4, 6, 2015&#41;; // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить! <br /><br /> } <br /><br /> void loop(&#41; <br /> { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /> lcd.setCursor(0, 0&#41;; // Устанавливаем курсор для печати времени в верхней строчке <br /> lcd.print(rtc.getTimeStr(&#41;&#41;; // Печатаем время <br /><br /> // Display abbreviated Day-of-Week in the lower left corner <br /> lcd.setCursor(9, 0&#41;; // Устанавливаем курсор слева внизу для печати дня недели <br /> //lcd.print(rtc.getDOWStr(FORMAT_LONG&#41;&#41;; // Печатаем день недели полностью, благо экран позволяет. <br /> lcd.print(rtc.getDOWStr(FORMAT_SHORT&#41;&#41;; // день недели <br /><br /> // Display date in the lower right corner <br /> //lcd.setCursor(0, 1&#41;; // Устанавливаем курсор для печати даты <br /> //lcd.print(rtc.getDateStr(&#41;&#41;; // Печатаем дату <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = digitalRead(PIN_ENCODER_CLK&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((encoder0PinALast == LOW&#41; && (n == HIGH&#41;&#41; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (digitalRead(PIN_ENCODER_DT&#41; == LOW&#41; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoder0Pos--; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.setCursor(0, 1&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;&lt;&lt; &quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoder0Pos++; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.setCursor(0, 1&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;&gt;&gt; &quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.setCursor(4, 1&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print (encoder0Pos&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoder0PinALast = n; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.setCursor(11, 1&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( digitalRead(PIN_ENCODER_SW&#41; == LOW &#41; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;Pres&quot;&#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(&quot;NO&nbsp;&nbsp;&quot;&#41;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /> } <br /> <!--/uzc--></div></div><!--/uzcode--><!--/ust--></div></div><!--/uSpoiler--> <br /><br /> Вот тут возникла проблема, енкодер работает четко, но только в одну сторону, прибавляет. В какую бы сторону я ни крутил.

Pavel7 25.06.2015

могу помочь с энкодером, чтоб в обе стороны работал

dimujin 26.06.2015

Нашел ошибку, CLK энкодера, обязательно должен быть подключен к RX arduino. На меге это 17,18 порты. После подключения на 18 порт ноги CLK энкодера, вращение заработало стабильно. <br /><br /> Сейчас сделал простенькое меню, при достижении заданной температуры должно включаться реле. Реле требуется запитать отдельно. <br /> Если будут &quot;последователи&quot;, буду чаще выкладывать инфу, пока эксперементирую, планирую выложить сюда конечный вариант. <br /> В любом случае буду презнателен за советы и полезный опыт!

dimujin 08.07.2015

Отказался от кучи датчиков, собрав по <a class="link" href="http://www.electroschematics.com/wp-content/uploads/2014/03/arduino-water-level-sensor.jpg" rel="nofollow" target="_blank">такой схеме</a> <a class="link" href="http://www.electroschematics.com/9964/arduino-water-level-indicator-controller/" rel="nofollow" target="_blank">датчик уровней жидкости.</a> <br /> Все работает! <br /> Собрал из центральных жил антенн такой датчик с 3-мя уровнями, для долгвечностизалил жидкими гвоздями, оставив только оголенные концы.

dimujin 30.07.2015

Продолжение данной темы переехало на <a class="link" href="http://forum.amperka.ru/forums/projects/" rel="nofollow" target="_blank">forum.amperka.ru</a>

Чтобы оставить комментарий, пожалуйста, авторизуйтесь или зарегистрируйтесь
×