<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Nonfinishism studious, заметки с тегом: TMP36</title>
<link>http://medinskiy.net/nfss/tags/tmp36/</link>
<description></description>
<generator>E2 (v2842; Aegea)</generator>

<item><title>Световой терменвокс.</title><guid isPermaLink="true">http://medinskiy.net/nfss/all/svetovoy-termenvoks/</guid><link>http://medinskiy.net/nfss/all/svetovoy-termenvoks/</link><description>&lt;p&gt;А теперь мы немного помузицируем. С помощью фоторезистора и &lt;a href="http://ru.wikipedia.org/wiki/Пьезоэлектрический_громкоговоритель" target="_blank"&gt;пьезоэлемента&lt;/a&gt; мы будем делать световой терменвокс. &lt;a href="http://ru.wikipedia.org/wiki/Терменвокс" target="_blank"&gt;Терменвокс&lt;/a&gt; — это музыкальный инструмент, издающий звуки, в зависимости от движений, которые производит музыкант вокруг инструмента. Такие звуки часто используют в фильмах ужасов.&lt;/p&gt;
&lt;!--more--&gt;&lt;p&gt;У терменвокса две антенны, при изменении положения рук исполнителя относительно них  изменяется ёмкость &lt;a href="http://ru.wikipedia.org/wiki/Колебательный_контур" target="_blank"&gt;колебательного контура&lt;/a&gt; антенн. Эти антенны подключены к аналоговой схеме, которая создает звук. Одна антенна отвечает за частоту звука, а вторая за его громкость. Arduino, конечно же, не может воспроизвести загадочные звуки этого инструмента, но можно эмулировать их с помощью функции &lt;strong&gt;tone(). &lt;/strong&gt;На рисунках ниже можно увидеть разницу между модуляциями произведёнными функцией &lt;strong&gt;analogWrite() &lt;/strong&gt;и функцией &lt;strong&gt;tone()&lt;/strong&gt;. Эти модуляции заставляют воспроизводящие устройства (такие как наушники, колонки или пьезоэлементы) издавать различые звуки.&lt;/p&gt;
&lt;table&gt;
&lt;tr &gt;
&lt;td valign="middle"&gt;
Большую часть времени сигнал равен нулю, но частота такая же как и в ШИМ 150
&lt;/td&gt;
&lt;td align="center"&gt;
&lt;img src="pictures/pwm50.jpg" align="middle"&gt;
PWM 50: analogWrite(50)
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr &gt;
&lt;td valign="middle"&gt;
Большую часть времени сигнал равен единице, но частота такая же как и в ШИМ 50
&lt;/td&gt;
&lt;td align="center"&gt;
&lt;img src="pictures/pwm150.jpg" align="middle"&gt;
PWM 150: analogWrite(50)
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr &gt;
&lt;td valign="middle"&gt;
Рабочий цикл составляет 50% (половину времени сигнал есть, половину времени нет), но частота изменилась.
&lt;/td&gt;
&lt;td align="center"&gt;
&lt;img src="pictures/tone440.jpg" align="middle"&gt;
TONE 440: tone(9,440)
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr &gt;
&lt;td valign="middle"&gt;
Рабочий цикл такой же как и в Tone 440, но частота больше вдвое.
&lt;/td&gt;
&lt;td align="center"&gt;
&lt;img src="pictures/tone880.jpg" align="middle"&gt;
TONE 880: tone(9,440)
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Вместо определения ёмкости с помощью Arduino, мы будем использовать фоторезистор, чтобы определять количество света. Двигая руки над фоторезистором, мы будем менять количество света, которое на него попадает, так же как проекте &lt;a href="http://medinskiy.net/nfss/all/lampa-hameleon-color-mixing-lamp/" target="_blank"&gt;«Лампа хамелеон»&lt;/a&gt;. Изменение напряжения на аналоговом входе будет определять ноту какой частоты играть.&lt;/p&gt;
&lt;p&gt;Фоторезистор к Arduino мы подключим используя схему &lt;a href="http://ru.wikipedia.org/wiki/Делитель_напряжения" target="_blank"&gt;делителя напряжения&lt;/a&gt;. Ранее мы уже заметили, что когда считываем напряжение с этой схемы используя функцию &lt;strong&gt;analogRead()&lt;/strong&gt;, получаемые значения не всегда полностью покрывают диапазон от 0 до 1023 (максимальный диапазон, который может быть считан с аналогового входа). Резистор фиксированного сопротивления, подсоединённый к «земле», ограничивает считываемые значения снизу, а максимальная яркость освещения — сверху. Вместо того, чтобы ограничивать диапазон возможных значений, можно откалибровать сенсор, получив максимальное и минимальное значения, и соотнести их с частотой извлекаемого звука с помощью функции &lt;strong&gt;map()&lt;/strong&gt; (как мы уже &lt;a href="http://medinskiy.net/nfss/all/ispolzovanie-servoprivoda/" target="_blank"&gt;делали&lt;/a&gt;), таким образом, диапазон частот, которые будет издавать наш терменвокс, станет максимально возможным. Так же к нашему сенсору добавится дополнительная «фича»: куда бы мы не перенесли схему, например, в более темное помещение, она будет автоматически подстраиваться.&lt;/p&gt;
&lt;p&gt;Итак , вот схема, которую мы будем собирать:&lt;/p&gt;
&lt;div class="tiles"&gt;
            &lt;a href="pictures/Theremin_схема_1.jpg" rel="lightbox"&gt;
                &lt;img src="pictures/Theremin_схема_1.jpg" /&gt;
            &lt;/a&gt;
&lt;a href="pictures/empty.jpg" &gt;
                &lt;img src="pictures/empty.jpg" /&gt;
            &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Собранный макет:&lt;/p&gt;
&lt;div class="tiles"&gt;
            &lt;a href="pictures/photo-3_t.jpg" rel="lightbox"&gt;
                &lt;img src="pictures/photo-3_t.jpg" /&gt;
            &lt;/a&gt;
&lt;a href="pictures/empty.jpg" &gt;
                &lt;img src="pictures/empty.jpg" /&gt;
            &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Пишем программу, для управления терменвоксом:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; sVal;&lt;span style="color: #7e7e7e;"&gt;//Значение на фоторезисторе&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; sLow=1023; &lt;span style="color: #7e7e7e;"&gt;//минимальное значение фоторезистора&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; sHigh=0;&lt;span style="color: #7e7e7e;"&gt;//максимальное значение фоторезистора&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; ledPin=13;&lt;span style="color: #7e7e7e;"&gt;//встроенный светодиод&lt;/span&gt;

&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;(){
  &lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(ledPin,&lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(ledPin,&lt;span style="color: #006699;"&gt;HIGH&lt;/span&gt;); &lt;span style="color: #7e7e7e;"&gt;//начало калибровки&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;while&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;millis&lt;/span&gt;()&amp;lt;5000) { &lt;span style="color: #7e7e7e;"&gt;//калибруем в течении 5 секунд&lt;/span&gt;
    sVal=&lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;(A0);
    &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (sVal&amp;gt;sHigh){
      sHigh=sVal;
    }
    &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(sVal&amp;lt;sLow){
      sLow=sVal;
    }
  }
  &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(ledPin,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);&lt;span style="color: #7e7e7e;"&gt;//окончание калибровки&lt;/span&gt;
}

&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;(){
  &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; freq;
  sVal=&lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;(A0);&lt;span style="color: #7e7e7e;"&gt;//считываем значение с фоторезистора&lt;/span&gt;
  freq=&lt;span style="color: #cc6600;"&gt;map&lt;/span&gt;(sVal,sLow,sHigh,50,4000);&lt;span style="color: #7e7e7e;"&gt;//приводим значение&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;tone&lt;/span&gt;(8,freq,20);&lt;span style="color: #7e7e7e;"&gt;//извлекаем звук&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(10);
}&lt;/pre&gt;
&lt;p&gt;Небольшой комментарий к программе:&lt;/p&gt;
&lt;p&gt;Объявления переменных:&lt;/p&gt;
&lt;p&gt;sVal — сюда будем считывать значение с фоторезистора;&lt;/p&gt;
&lt;p&gt;sLow и sHigh — максимальное и минимальное значения, которые можно прочитать с фоторезистора. В начале программы они соответственно равны 1023 (минимальное) и 0 (максимальное). В процессе калибровки в этих переменных появятся реальные значения минимума и максимума.&lt;/p&gt;
&lt;p&gt;ledPin — пин со светодиодом, при начале калибровки включим его, по окончании выключим.&lt;/p&gt;
&lt;p&gt;Инициализация:&lt;/p&gt;
&lt;p&gt;Включаем светодиод. Втечении первых пяти секунд, в цикле считывается значение с фоторезистора, если оно меньше уже зафиксированного минимального значения (первоначально 1023), то записываем его в минимальное, если оно больше уже зафиксированного максимального значения (первоначально 0), то записываем его в максимальное. Используем функцию &lt;strong&gt;mills()&lt;/strong&gt;, для определения времени, прошедшего с момента включения Arduino.&lt;/p&gt;
&lt;p&gt;Основная программа: вобщем довольно простая, функция tone() используется для воспроизведения звука, первый её параметр — пин, на который выводить звук, второй — частота звука, третий — длительность.&lt;/p&gt;
&lt;p&gt;Вот что вышло:&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe width="768" height="480" src="http://www.youtube.com/embed/CFNT91OJ66o" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Настоящий терменвокс позволяет управлять не только частотой звука, но и его громкостью. В этом примере мы можем менять только частоту. Если подсоединить потенциоментр последовательно с пьезоэлементом, то звук можно будет регулировать с помощью его ручки или можно поставить второй фоторезистор. Мы решили подключить потенциометр.&lt;/p&gt;
&lt;p&gt;Схема и фото макета ниже, а вот видео:&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe width="768" height="480" src="http://www.youtube.com/embed/Qnfdkh-NzWQ" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div class="tiles"&gt;
     &lt;a href="pictures/photo-1_t.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/photo-1_t.jpg" /&gt;
        &lt;/a&gt;
  &lt;a href="pictures/Theremin_схема_1.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/Theremin_схема_1.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/photo-3_t.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/photo-3_t.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/photo-2_t.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/photo-2_t.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/Theremin_схема_2.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/Theremin_схема_2.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/IMG_0198.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0198.jpg" /&gt;
           &lt;/a&gt;
&lt;/div&gt;
</description><pubDate>Mon, 18 Mar 2013 12:07:18 +0300</pubDate></item><item><title>Использование сервопривода.</title><guid isPermaLink="true">http://medinskiy.net/nfss/all/ispolzovanie-servoprivoda/</guid><link>http://medinskiy.net/nfss/all/ispolzovanie-servoprivoda/</link><description>&lt;p&gt;&lt;a href="http://wiki.amperka.ru/робототехника:сервоприводы" target="_blank"&gt;Сервопривод&lt;/a&gt;  — это такие типы двигателей, которые не крутятся все время по кругу, а поворачиваются на определённый угол и останавливаются до тех пор, пока им не поступит другая команда повернуться. Сервопривод обычно поворачиваются только на 180 градусов (половина круга). &lt;!—more—&gt;Если присоединить  к такому мотору вырезанную из картона шкалу, можно использовать его в качестве указателя чего-нибудь, например, настроения.&lt;/p&gt;
&lt;div class="tiles"&gt;
            &lt;a href="pictures/IMG_0179.jpg" rel="lightbox"&gt;
                &lt;img src="pictures/IMG_0179.jpg" /&gt;
            &lt;/a&gt;
&lt;a href="pictures/empty.jpg" &gt;
                &lt;img src="pictures/empty.jpg" /&gt;
            &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Аналогично тому, как мы использовали &lt;a href="http://ru.wikipedia.org/wiki/Широтно-импульсная_модуляция" target="_blank"&gt;ШИМ&lt;/a&gt; для управления светодиодами в опыте с &lt;a href="http://medinskiy.net/nfss/all/lampa-hameleon-color-mixing-lamp/" target="_blank"&gt;«лампой-хамелеоном»&lt;/a&gt;, сервопривод ожидает поступления определенного количества импульсов, чтобы понять, на какой угол ему надо повернуться. С аналогового выхода Arduino импульсы всегда поступают через один и тот же временной интервал, но продолжительность их меняется от 1000 до 2000 микросекунд. Программу, которая генерирует такие импульсы написать не очень сложно самим, но среда разработки Arduino уже включает в себя специальную библиотеку для управления моторами. Поскольку сообщество разработчиков для Arduino достаточно велико, существует великое множество дополнительных программ и библиотек для разных сенсоров, актуаторов и прочих устройств, которые могут взаимодействовать с Arduino. И мы этим тоже будем пользоваться.&lt;/p&gt;
&lt;p&gt;Схема, которую мы будем собирать выглядит так:&lt;/p&gt;
&lt;div class="tiles"&gt;
            &lt;a href="pictures/ServoMoto.jpg " rel="lightbox"&gt;
                &lt;img src="pictures/ServoMoto.jpg " /&gt;
            &lt;/a&gt;
&lt;a href="pictures/empty.jpg" &gt;
                &lt;img src="pictures/empty.jpg" /&gt;
            &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Один контакт потенциометр подсоединяем на плюс, второй — на минус, подвижный контакт  — к аналоговому входу Arduino. При вращении ручки потенциометр, напряжение между подвижным контактом (входом Arduino) и минусом будет изменяться, это изменение мы будем «читать» и управлять вращением сервопривод.&lt;/p&gt;
&lt;p&gt;Сервопривод  тоже имеет три контакта: два — питание (плюс и минус), третий для управления, его подсоединяем с выходу Arduino.&lt;/p&gt;
&lt;p&gt;Когда сервопривод начинает движение, ток, проходящий через него, значительно больше, чем во время самого движения, из-за этого происходить сильное падение напряжения во всей схеме. Если подключить два конденсатора параллельно сервопривод и потенциометр, можно это сгладить. Такие конденсаторы называют «развязывающие» или разделяющие, так как они отделяют изменения, произведенные какими-либо компонентами, от остальной схемы.&lt;/p&gt;
&lt;p&gt;Итак, макет готов:&lt;/p&gt;
&lt;div class="tiles"&gt;
            &lt;a href="pictures/IMG_0184.jpg" rel="lightbox"&gt;
                &lt;img src="pictures/IMG_0184.jpg" /&gt;
            &lt;/a&gt;
&lt;a href="pictures/empty.jpg" &gt;
                &lt;img src="pictures/empty.jpg" /&gt;
            &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Теперь пишем программу:&lt;/p&gt;
&lt;pre&gt;#include&amp;lt;&lt;span style="color: #cc6600;"&gt;Servo&lt;/span&gt;.h&amp;gt; &lt;span style="color: #7e7e7e;"&gt;//используем библиотеку для управления сервоприводом&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;Servo&lt;/span&gt; motor;      &lt;span style="color: #7e7e7e;"&gt;//наш мотор&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; potens=A0;    &lt;span style="color: #7e7e7e;"&gt;//пин потенциометра &lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; motorpin=9;   &lt;span style="color: #7e7e7e;"&gt;//пин мотора&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; potensVal=0;  &lt;span style="color: #7e7e7e;"&gt;//значение потенциометра&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; angle;        &lt;span style="color: #7e7e7e;"&gt;//угол поворота сервопривода&lt;/span&gt;

&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;(){ 
  motor.&lt;span style="color: #cc6600;"&gt;attach&lt;/span&gt;(motorpin); &lt;span style="color: #7e7e7e;"&gt;//подключаем мотор&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(9600);
}

&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;(){
  potensVal=&lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;(potens);&lt;span style="color: #7e7e7e;"&gt;//читаем положение потенциометра&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;«potensVal: „&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(potensVal);
  angle=&lt;span style="color: #cc6600;"&gt;map&lt;/span&gt;(potensVal,0,1023,0,179);&lt;span style="color: #7e7e7e;"&gt;//преобразуем в градусы&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;“, angle: „&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(angle);
  motor.&lt;span style="color: #cc6600;"&gt;write&lt;/span&gt;(angle);&lt;span style="color: #7e7e7e;"&gt;//поворачиваем мотор&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(15);
}&lt;/pre&gt;
&lt;p&gt;Небольшой комментарий по преобразованию значения, считанного с потенциометр, в градусы. С аналогового входа Arduino можно считать значение от 0 до 1023, в зависимости от напряжения на нем. В случае с потенциометром мы задействует все эти значения. На аналоговый выход Arduino мы может подать значение от 0 до 254, а в случае с сервоприводом, в команду движения мы вообще можем передавать значения только до 179. То есть нам надо пропорционально преобразовать значения из интервала [0;1023] в интервал [0;179]. У Arduino для этого есть специальная функция map(), в качестве первого параметра мы передаем значение, которое надо преобразовать, в качестве второго и третьего — границы первого интервала, четвертое и пятое — границы второго  интервала. В результате функция возвращает преобразованное значение, которое уже можно использовать. После команды поворота добавлена небольшая пауза, чтобы сервопривод успел повернуться. Фу… вроде все.&lt;/p&gt;
&lt;p&gt;На консоль мы выводим значение, прочитанное с потециометра и уже преобразованное значение (угол поворота сервопривод).&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe width="768" height="480" src="http://www.youtube.com/embed/IxFyYS32zqM" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Теперь мы решили вместо потенциометр поставить в схему термосенсор, и поворачивать сервопривод в зависимости от внешней температуры. Немного изменили программу:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;(){
  tempVal=&lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;(tempPin);
  &lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; v=(tempVal/1024.0)*5.0;
  &lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; t=(v-0.5)*100;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;» temperature: «&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(t);
  angle=&lt;span style="color: #cc6600;"&gt;map&lt;/span&gt;( t, 15, 35,0,179);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;«, angle: „&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(angle);
  motor.&lt;span style="color: #cc6600;"&gt;write&lt;/span&gt;(angle);
  &lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(1000);
}&lt;/pre&gt;
&lt;p&gt;Преобразовываем значение, считанное с термосенсор, в градусы, как мы это уже &lt;a href="http://medinskiy.net/nfss/all/heat-o-meter-izmerenie-temperatury/" target="_blank"&gt;делали&lt;/a&gt;. В функции map() мы указали интервал от 15 до 35, потому что именно в этих пределах будет меняться температура в нашем опыте, и сервопривод будет поворачиваться на все 180 градусов при изменении температуры.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe width="768" height="480" src="http://www.youtube.com/embed/lPtEp3FOx5o" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div class="tiles"&gt;
     &lt;a href="pictures/IMG_0179.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0179.jpg" /&gt;
        &lt;/a&gt;
  &lt;a href="pictures/IMG_0180.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0180.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/IMG_0184.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0184.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/IMG_0186.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0186.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/ServoMoto.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/ServoMoto.jpg" /&gt;
           &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;angle&lt;/p&gt;
</description><pubDate>Sun, 10 Mar 2013 13:24:38 +0300</pubDate></item><item><title>Heat-o-Meter  (измерение температуры).</title><guid isPermaLink="true">http://medinskiy.net/nfss/all/heat-o-meter-izmerenie-temperatury/</guid><link>http://medinskiy.net/nfss/all/heat-o-meter-izmerenie-temperatury/</link><description>&lt;p&gt;Arduino можно использовать для измерения температуры.&lt;br /&gt;
Переключатели и кнопки — замечательно, но реальный мир вокруг не всегда можно описать двумя состояниями (вкл. и выкл.)&lt;/p&gt;
&lt;p&gt;Немного теории:&lt;/p&gt;
&lt;!--more--&gt;&lt;p&gt;Несмотря на то, что Arduino  — это цифровое устройство, оно может получать информацию с аналоговых сенсоров для измерения температуры или освещенности. Для этих целей необходимо использовать встроенный в Arduino аналого-цифровой перобразователь (АЦП). Аналоговые входы A0-A5 выдают значение от 0 до 1023, что соответствует напряжению от 0 до 5-ти вольт.&lt;/p&gt;
&lt;p&gt;Для измерения температуры мы использовали температурный сенсор (TMP 36).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://medinskiy.net/nfss/pictures/IMG_0144.jpg" width="640" height="853" alt="Термосенсор (TMP36)" /&gt;
&lt;/div&gt;
&lt;p&gt;Этот компонент изменяет напряжение на выходе в зависимости от температуры окружающей среды. Датчик имеет три контакта: один подсоединяется на «ground», второй  — на «power», а третий, который выдает изменяющееся напряжение, подсоединяется к Arduino. В программе для этого проекта мы будем считывать значения, которые выдает сенсор, и использовать их для включения и выключения светодиодов для индикации температуры.&lt;/p&gt;
&lt;p&gt;Теперь к практике. Как обычно, сначала рисуем «схему»:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://medinskiy.net/nfss/pictures/IMG_0148.jpg" width="640" height="495" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В собранном виде на макетной плате, она выглядит так:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://medinskiy.net/nfss/pictures/IMG_0149.jpg" width="640" height="480" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В среде разработки (IDE) Arduino есть терминал, который позволяет получать и просматривать информацию с микроконтроллера. С использованием этого терминала, можно отображать на экране компьютера информацию, считываемую с сенсоров, а потом придумать, как ее обработать и дописать программу.&lt;/p&gt;
&lt;p&gt;Вот такая получилась программа, для считывания и вывода информации с сенсора:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; spin = A0; &lt;span style="color: #7e7e7e;"&gt;//датчик температуры&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;(){
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt; (9600);&lt;span style="color: #7e7e7e;"&gt;//для вывода на экран компьютера&lt;/span&gt;
}
&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;(){
  &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; sVal = &lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;(spin);&lt;span style="color: #7e7e7e;"&gt;//Считываем информацию с сенсора&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;«Sensor Value: „&lt;/span&gt;);&lt;span style="color: #7e7e7e;"&gt;//выводим значение на экран компьютера&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(sVal);
  &lt;span style="color: #7e7e7e;"&gt;//конвертируем значение в вольты&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; v=(sVal/1024.0)*5.0;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;“, Volts: „&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(v);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;“, degrees C: „&lt;/span&gt;);
  &lt;span style="color: #7e7e7e;"&gt;//переводим вольты в градусы&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; t=(v-0.5)*100;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(t);
}&lt;/pre&gt;
&lt;p&gt;В этой программе использована команда &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(9600), с помощью неё открывается соединение между Arduino и компьютером. Функция &lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;() считывает значение с аналогового входа и возвращается значение от 0 до 1024, в зависимости от напряжения. Функция &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;() отправляет информацию с Arduino на компьютер, затем эта информация отображается в терминале.&lt;/p&gt;
&lt;p&gt;Как расчитывается температура? Сначала необходимо понять сколько вольт получается на выходе термосенсора. Поскольку всего может быть 1024 значения (от 0 до 1023), а напряжение от 0В до 5В, используется формула [значение на аналоговом входе]* 5В/1024. Затем по документации на этот термосенсор переводим выдаваемое им напряжение в градусы по шкале Цельсия &lt;strong&gt;t=(v-0.5)*100.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Вот как выглядят результаты работы программы:&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe width="768" height="480" src="http://www.youtube.com/embed/wCs8FOCpTm8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Теперь программируем работу светодиодов. Базовой температурой будем считать 23 градуса (такая температура была у нас в комнате). Если термосенсор нагревается на 2 градуса — загорается первый диод, еще на 2 (всего на 4) — второй диод, затем еще на 4 градуса (всего на 8) — третий диод.&lt;/p&gt;
&lt;p&gt;Параллельно а работой над программой мы решили, что будет интереснее сделать светодиоды разноцветными:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://medinskiy.net/nfss/pictures/IMG_0154.jpg" width="640" height="853" alt="Макет с разноцветными диодами" /&gt;
&lt;/div&gt;
&lt;p&gt;Вот наша программа:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; spin = A0; &lt;span style="color: #7e7e7e;"&gt;//датчик температуры&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; basetemp= 23.0; &lt;span style="color: #7e7e7e;"&gt;//комнатная температура&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; led1 = 2;&lt;span style="color: #7e7e7e;"&gt;//красный&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; led2 = 3;&lt;span style="color: #7e7e7e;"&gt;//жёлтый&lt;/span&gt;
&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; led3 = 4;&lt;span style="color: #7e7e7e;"&gt;//зелёный&lt;/span&gt;

&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;(){
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt; (9600);&lt;span style="color: #7e7e7e;"&gt;//для вывода на экран компьютера&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(led1,&lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(led2,&lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(led3,&lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led1,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led2,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led3,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
}

&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;(){
  &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; sVal = &lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;(spin);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;«Sensor Value: „&lt;/span&gt;);&lt;span style="color: #7e7e7e;"&gt;//выводим информацию на экран компьютера&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(sVal);
  &lt;span style="color: #7e7e7e;"&gt;//конвертируем значение в вольты&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; v=(sVal/1024.0)*5.0;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;“, Volts: „&lt;/span&gt;);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(v);
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;“, degrees C: „&lt;/span&gt;);
  &lt;span style="color: #7e7e7e;"&gt;//переводим вольты в градусы&lt;/span&gt;
  &lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; t=(v-0.5)*100;
  &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(t);
  &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(t&amp;lt;basetemp){&lt;span style="color: #7e7e7e;"&gt;//температура поднимается на 2 градуса — ничего не горит&lt;/span&gt;
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led2,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led3,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led1,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
  }
  &lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;( (t&amp;gt;=basetemp+2)&amp;amp;&amp;amp;(t&amp;lt;basetemp+4) ){&lt;span style="color: #7e7e7e;"&gt;//температура подниамется от 2 до 4 градусов горит только зеленый&lt;/span&gt;
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led2,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led3,&lt;span style="color: #006699;"&gt;HIGH&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led1,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
  }
  &lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;( (t&amp;gt;=basetemp+4)&amp;amp;&amp;amp;(t&amp;lt;basetemp+8) ){
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led2,&lt;span style="color: #006699;"&gt;HIGH&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led3,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led1,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
  }
  &lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (t&amp;gt;=basetemp+8){
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led2,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led3,&lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);
    &lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(led1,&lt;span style="color: #006699;"&gt;HIGH&lt;/span&gt;);
  }
}&lt;/pre&gt;
&lt;p&gt;Результаты работы программы:&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe width="768" height="480" src="http://www.youtube.com/embed/SGSG5j1boCo" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div class="tiles"&gt;
     &lt;a href="pictures/IMG_0144.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0144.jpg" /&gt;
        &lt;/a&gt;
  &lt;a href="pictures/IMG_0148.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0148.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/IMG_0149.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0149.jpg" /&gt;
           &lt;/a&gt;
  &lt;a href="pictures/IMG_0154.jpg" rel="lightbox[01]"&gt;
                &lt;img src="pictures/IMG_0154.jpg" /&gt;
           &lt;/a&gt;
&lt;/div&gt;
</description><pubDate>Mon, 25 Feb 2013 17:26:30 +0300</pubDate></item>
</channel>

</rss>