<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para Maker - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/tag/maker/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/maker/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Fri, 29 Sep 2023 17:21:46 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.6</generator>
	<item>
		<title>Como usar um display de LED de sete segmentos com Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-display-de-led-de-sete-segmentos-com-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-display-de-led-de-sete-segmentos-com-arduino/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sun, 27 Nov 2022 23:25:35 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Maker]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=8473</guid>

					<description><![CDATA[<p>Usando um display de LED de sete segmentos com Arduino Um display de LEDs é um componente utilizado para exibir informação em um painel por meio do emprego de múltiplos segmentos de LEDs que emitem luz, acionados por tensões entre 2 e 5VCC geralmente. Esse tipo de display pode exibir caracteres alfanuméricos, apenas números, ou ainda símbolos, além de formas geométricas e pontos em alguns modelos. O tipo de display de LED mais simples é o Display de Sete Segmentos que, como o próprio nome diz, é composto por sete segmentos (LEDs) que podem ser acionados individualmente; geralmente, há também um oitavo segmento, que aciona um LED para representação de um ponto decimal. A figura a seguir mostra um display de sete segmentos típico, que possui também um LED extra para representar o ponto decimal: Figura 01 &#8211; Display de LED de Sete Segmentos Neste tutorial vou mostrar como acionar um display de 7 segmentos típico, criando um contador numérico de 0 a 9, usando o Arduino. Diagrama esquemático Na figura a seguir temos o diagrama esquemático do circuito que vamos utilizar: Lista de componentes Precisaremos dos seguintes componentes para elaborar o circuito: 1 Arduino Uno (ou Mega) 8 Resistores de [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-display-de-led-de-sete-segmentos-com-arduino/">Como usar um display de LED de sete segmentos com Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Usando um display de LED de sete segmentos com Arduino</h2>
<p>Um <a href="http://www.bosontreinamentos.com.br/eletronica/eletronica-digital/como-funciona-um-display-de-leds-de-7-segmentos/" target="_blank" rel="noopener noreferrer">display de LEDs</a> é um componente utilizado para exibir informação em um painel por meio do emprego de múltiplos segmentos de LEDs que emitem luz, acionados por tensões entre 2 e 5VCC geralmente.</p>
<p>Esse tipo de display pode exibir caracteres alfanuméricos, apenas números, ou ainda símbolos, além de formas geométricas e pontos em alguns modelos.</p>
<p>O tipo de display de LED mais simples é o <a href="http://www.bosontreinamentos.com.br/eletronica/eletronica-digital/como-funciona-um-display-de-leds-de-7-segmentos/" target="_blank" rel="noopener noreferrer">Display de Sete Segmentos</a> que, como o próprio nome diz, é composto por sete segmentos (LEDs) que podem ser acionados individualmente; geralmente, há também um oitavo segmento, que aciona um LED para representação de um ponto decimal.</p>
<p>A figura a seguir mostra um display de sete segmentos típico, que possui também um LED extra para representar o ponto decimal:</p>
<div id="attachment_8711" style="width: 460px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8711" class="wp-image-8711" title="Display de LED de Sete Segmentos" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/11/display-LED-7-segmentos-min.jpg" alt="Display de LED de Sete Segmentos" width="450" height="405" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2016/11/display-LED-7-segmentos-min.jpg 500w, https://www.bosontreinamentos.com.br/wp-content/uploads/2016/11/display-LED-7-segmentos-min-420x378.jpg 420w" sizes="auto, (max-width: 450px) 100vw, 450px" /><p id="caption-attachment-8711" class="wp-caption-text">Figura 01 &#8211; Display de LED de Sete Segmentos</p></div>
<p>Neste tutorial vou mostrar como acionar um display de 7 segmentos típico, criando um contador numérico de 0 a 9, usando o Arduino.</p>
<h3>Diagrama esquemático</h3>
<p>Na figura a seguir temos o diagrama esquemático do circuito que vamos utilizar:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8713" title="Diagrama esquemático do display de 7 segmentos com Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/11/display-sete-segmentos-esquemático.jpg" alt="Diagrama esquemático do display de 7 segmentos com Arduino" width="699" height="519" /></p>
<h3>Lista de componentes</h3>
<p>Precisaremos dos seguintes componentes para elaborar o circuito:</p>
<ul>
<li>1 Arduino Uno (ou Mega)</li>
<li>8 Resistores de 220Ω</li>
<li>1 Display de LED de sete segmentos, catodo comum (pode ser utilizado anodo comum, porém deverão ser feitas alterações simples no circuito e no código)</li>
<li>Matriz de contatos</li>
<li>Fios (jumpers) diversos.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8714 size-full" title="Pinagem do display de 7 segmentos de LED" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/11/pinagem-LED-7-segmentos.gif" alt="Pinagem do display de 7 segmentos de LED" width="116" height="247" /></p>
<p>&nbsp;</p>
<h3>Código do sketch</h3>
<p>Abaixo temos o código do programa que será executado neste circuito:</p>
<table style="height: 41px;" width="652">
<tbody>
<tr>
<td>
<pre><span style="color: #339966;"><strong>// Matriz de bits para representar os números de 0 a 9:</strong></span>
<span style="color: #ff0000;"><strong>int numero[11][8] = { <span style="color: #339966;">// 11 linhas, 8 colunas</span></strong></span>
<span style="color: #ff0000;"><strong> { 1,1,1,1,1,1,0,0 }, <span style="color: #339966;">//0</span></strong></span>
<span style="color: #ff0000;"><strong> { 0,1,1,0,0,0,0,0 }, <span style="color: #339966;">//1</span></strong></span>
<span style="color: #ff0000;"><strong> { 1,1,0,1,1,0,1,0 }, <span style="color: #339966;">//2</span></strong></span>
<span style="color: #ff0000;"><strong> { 1,1,1,1,0,0,1,0 }, <span style="color: #339966;">//3</span></strong></span>
<span style="color: #ff0000;"><strong> { 0,1,1,0,0,1,1,0 }, <span style="color: #339966;">//4</span></strong></span>
<span style="color: #ff0000;"><strong> { 1,0,1,1,0,1,1,0 }, <span style="color: #339966;">//5</span></strong></span>
<span style="color: #ff0000;"><strong> { 0,0,1,1,1,1,1,0 }, <span style="color: #339966;">//6</span></strong></span>
<span style="color: #ff0000;"><strong> { 1,1,1,0,0,0,0,0 }, <span style="color: #339966;">//7</span></strong></span>
<span style="color: #ff0000;"><strong> { 1,1,1,1,1,1,1,0 }, <span style="color: #339966;">//8</span></strong></span>
<span style="color: #ff0000;"><strong> { 1,1,1,0,0,1,1,0 }, <span style="color: #339966;">//9</span></strong></span>
<span style="color: #ff0000;"><strong> { 0,0,0,0,0,0,0,1 } <span style="color: #339966;">//ponto decimal</span></strong></span>
<span style="color: #ff0000;"><strong>};

</strong></span><span style="color: #339966;"><strong>// Array de configuração dos pinos digitais associados a cada segmento:</strong></span>
<span style="color: #ff0000;"><strong>const int segmentos[8] = { 2,3,4,5,6,7,8,9 };</strong></span>
<span style="color: #339966;"><strong>// 2 = segmento a</strong></span>
<span style="color: #339966;"><strong>// 3 = segmento b</strong></span>
<span style="color: #339966;"><strong>// 4 = segmento c</strong></span>
<span style="color: #339966;"><strong>// 5 = segmento d</strong></span>
<span style="color: #339966;"><strong>// 6 = segmento e</strong></span>
<span style="color: #339966;"><strong>// 7 = segmento f</strong></span>
<span style="color: #339966;"><strong>// 8 = segmento g</strong></span>
<span style="color: #339966;"><strong>// 9 = ponto decimal

</strong></span><span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #339966;"><strong> // Configurar os pinos de cada segmento para saída:</strong></span>
<span style="color: #ff0000;"><strong> for (int i = 0; i &lt;= 7; i++) {</strong></span>
<span style="color: #ff0000;"><strong>   pinMode(segmentos[i], OUTPUT);</strong></span>
<span style="color: #ff0000;"><strong> }</strong></span>
<span style="color: #ff0000;"><strong>}

</strong></span><span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #339966;"><strong> // Displays de catodo comum: acendem com valor 1 nos pinos digitais</strong></span>
<span style="color: #339966;"><b style="color: #339966;"> // chamar função mostraNumero, que exibe os </b><span style="color: #339966;"><b>números</b></span><b style="color: #339966;"> em sequência a cada 0,5 segundo (500ms):</b></span>
<span style="color: #ff0000;"><strong> for (int i = 0; i &lt;=10; i++) {</strong></span>
<span style="color: #ff0000;"><strong>   mostraNumero(i);</strong></span>
<span style="color: #ff0000;"><strong>   delay(500);</strong></span>
<span style="color: #ff0000;"><strong> }</strong></span>
<span style="color: #ff0000;"><b style="color: #ff0000;">}
</b><span style="color: #339966;"><span style="color: #339966;"><b>// Função mostraNumero, que acende os LEDs correspondentes para exibir os </b></span><span style="color: #339966;"><b>números</b></span><span style="color: #339966;"><b>:</b></span></span>
<strong style="color: #ff0000;">void mostraNumero(int valor) { <span style="color: #339966;">// valor é a linha (número a mostrar)</span></strong>
<strong style="color: #ff0000;">   int pino = 2; <span style="color: #339966;">// começar contagem no pino 2</span></strong>
<strong style="color: #ff0000;">   for (int i = 0; i &lt; 8; i++) {</strong>
<strong style="color: #ff0000;">       digitalWrite(pino, numero[valor][i]); <span style="color: #339966;">// fixa na linha e aciona os bits de cada coluna (0 ou 1)</span></strong>
<strong style="color: #ff0000;">       pino++;</strong>
<strong style="color: #ff0000;">   }</strong>
<strong style="color: #ff0000;">}</strong></span></pre>
</td>
</tr>
</tbody>
</table>
<h3>Funcionamento do Código</h3>
<h4>Matriz de Bits</h4>
<p>A primeira parte do código é uma matriz chamada numero. Essa matriz é usada para representar os números de 0 a 9 e um ponto decimal (usando o último elemento da matriz). A matriz é uma matriz bidimensional com 11 linhas e 8 colunas, na qual cada linha representa um dígito (0 a 9 e o ponto decimal, com 8 bits), e cada coluna representa um segmento do display de 7 segmentos.</p>
<p>Sendo assim, cada elemento da matriz (numero[i][j]) é um valor binário (0 ou 1) que determina se um determinado segmento do display deve estar aceso (1) ou apagado (0) para exibir o número correspondente.</p>
<h4>Configuração dos Pinos</h4>
<p>Na sequência temos a configuração dos pinos digitais associados a cada segmento do display de 7 segmentos, usando um array de números. Os pinos serão configurados como saída usando a função pinMode na função setup().</p>
<h4>Função setup()</h4>
<p>Dentro da função setup(), todos os pinos digitais associados aos segmentos são configurados como saída, para que seja possível controlá-los.</p>
<h4>Função loop()</h4>
<p>A função loop() é onde o programa principal é executado continuamente. Nesse caso, ele exibe os números de 0 a 9 e o ponto decimal em sequência a cada 500 milissegundos (0,5 segundos). Isso é feito chamando a função mostraNumero(i) em um loop for que varia de 0 a 10.</p>
<h4>Função mostraNumero(int valor)</h4>
<p>Esta função recebe um valor inteiro que representa o número que você deseja exibir. O valor é usado como índice para acessar a matriz numero e determinar quais segmentos do display de 7 segmentos devem ser acesos ou apagados para exibir o número correspondente.</p>
<p>O loop for dentro da função mostraNumero percorre cada coluna da matriz numero (cada segmento do display) e usa a função digitalWrite para definir o estado (ligado ou desligado) de cada segmento com base nos valores na matriz numero.</p>
<h3>Visualização</h3>
<p>Veja o circuito montado em ação, realizando a contagem de números de 0 a 9 (e o ponto decimal também):</p>
<blockquote class="imgur-embed-pub" lang="en" data-id="a/aW9t6">
<p><a href="//imgur.com/aW9t6">Arduino</a></p>
</blockquote>
<p><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script></p>
<p>Se preferir, assista a um vídeo que mostra os procedimentos descritos em ação:</p>
<p><iframe loading="lazy" src="https://www.youtube.com/embed/ZmvgD2ly_c8" width="640" height="480" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>É isso aí! Nos próximos tutoriais vamos explorar mais a fundo o uso de displays de sete segmentos, incluindo displays de dois ou mais dígitos, e também o uso de bibliotecas do Arduino para esse componente.</p>
<p>Até!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-display-de-led-de-sete-segmentos-com-arduino/">Como usar um display de LED de sete segmentos com Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-display-de-led-de-sete-segmentos-com-arduino/feed/</wfw:commentRss>
			<slash:comments>22</slash:comments>
		
		
			</item>
		<item>
		<title>Controlando direção de rotação de um motor DC com Arduino e Ponte H</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/controlando-direcao-de-rotacao-de-um-motor-dc-com-arduino-e-ponte-h/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/controlando-direcao-de-rotacao-de-um-motor-dc-com-arduino-e-ponte-h/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 22 Jul 2022 14:46:20 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Maker]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=9831</guid>

					<description><![CDATA[<p>Como controlar a direção de rotação de um motor DC com Arduino e Ponte H Em nosso projeto anterior com Arduino, mostramos como é possível controlar a velocidade de um motor DC usando a técnica de PWM (Pulse Width Modulation). Agora, vamos mostrar como controlar a direção de rotação do motor, função extremamente importante, por exemplo, para controlar a direção de movimentação de um robô ou veículo qualquer. Para tal, utilizaremos um circuito especializado chamado de &#8220;Ponte H&#8220;. A figura a seguir mostra a operação básica de uma ponte H: Operação básica de uma ponte H Imagem: Wikimedia Commons Uma ponte H possui quatro modos de operação: Aberto: O motor não gira (motor desligado) Freio: Motor não gira (parado) Para frente: Motor gira em uma direção Para trás: Motor gira na direção oposta. Neste projeto usaremos o chip L293D, que consiste em duas pontes H full (quatro half bridges). Lista de materiais 1 Arduino (Uno, Mega, etc) 1 Motor DC 1 chip L293D (ponte H) 1 Fonte de alimentação entre 4,5 e 36V para o motor Matriz de contatos Fios diversos Diagrama esquemático do circuito A seguir temos o diagrama esquemático do circuito a ser montado: Visão do circuito A [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/controlando-direcao-de-rotacao-de-um-motor-dc-com-arduino-e-ponte-h/">Controlando direção de rotação de um motor DC com Arduino e Ponte H</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como controlar a direção de rotação de um motor DC com Arduino e Ponte H</h2>
<p>Em nosso projeto anterior com Arduino, mostramos como é possível <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/controlando-velocidade-de-motor-dc-com-arduino-e-potenciometro-projeto/">controlar a velocidade de um motor DC usando a técnica de PWM</a> (Pulse Width Modulation). Agora, vamos mostrar como controlar a direção de rotação do motor, função extremamente importante, por exemplo, para controlar a direção de movimentação de um robô ou veículo qualquer.</p>
<p>Para tal, utilizaremos um circuito especializado chamado de &#8220;<a href="http://www.bosontreinamentos.com.br/eletronica/curso-de-eletronica/como-funciona-uma-ponte-h-controle-direcional-de-motores-dc/">Ponte H</a>&#8220;. A figura a seguir mostra a operação básica de uma ponte H:</p>
<div id="attachment_10044" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-10044" class="wp-image-10044 size-full" title="Funcionamento de uma ponte H" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/ponte-H-modos-operação.png" alt="Funcionamento de uma ponte H" width="800" height="246" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/ponte-H-modos-operação.png 800w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/ponte-H-modos-operação-420x129.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/ponte-H-modos-operação-768x236.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-10044" class="wp-caption-text">Operação básica de uma ponte H Imagem: Wikimedia Commons</p></div>
<p>Uma ponte H possui quatro modos de operação:</p>
<ul>
<li>Aberto: O motor não gira (motor desligado)</li>
<li>Freio: Motor não gira (parado)</li>
<li>Para frente: Motor gira em uma direção</li>
<li>Para trás: Motor gira na direção oposta.</li>
</ul>
<p>Neste projeto usaremos o chip L293D, que consiste em duas pontes H full (quatro half bridges).</p>
<h3>Lista de materiais</h3>
<ul>
<li>1 Arduino (Uno, Mega, etc)</li>
<li>1 Motor DC</li>
<li>1 <a href="http://www.bosontreinamentos.com.br/eletronica/controlador-l293d-ponte-h-dupla/" target="_blank" rel="noopener noreferrer">chip L293D (ponte H)</a></li>
<li>1 Fonte de alimentação entre 4,5 e 36V para o motor</li>
<li>Matriz de contatos</li>
<li>Fios diversos</li>
</ul>
<h3>Diagrama esquemático do circuito</h3>
<p>A seguir temos o diagrama esquemático do circuito a ser montado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-19304 size-full" title="Controle de direção de rotação de motor DC com arduino e ponte H" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/controla-motor-arduino-L293D.png" alt="Controle de direção de rotação de motor DC com arduino e ponte H" width="614" height="453" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/controla-motor-arduino-L293D.png 614w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/controla-motor-arduino-L293D-420x310.png 420w" sizes="auto, (max-width: 614px) 100vw, 614px" /></p>
<h3>Visão do circuito</h3>
<p>A figura a seguir ilustra a conexão entre os componentes em uma matriz de contatos (breadboard):</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-19306 size-full" title="Direção de giro do motor DC com Arduino e L293D" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/motor-com-arduino-fabio-dos-reis.png" alt="Direção de giro do motor DC com Arduino e L293D" width="684" height="411" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/motor-com-arduino-fabio-dos-reis.png 684w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/07/motor-com-arduino-fabio-dos-reis-420x252.png 420w" sizes="auto, (max-width: 684px) 100vw, 684px" /></p>
<h3>Código-fonte do sketch</h3>
<p>A seguir temos o código-fonte utilizado no projeto para que o motor gire para um lado e depois para outro:</p>
<pre><span style="color: #ff0000;"><strong>const int HABILITA = 11;</strong></span>
<span style="color: #ff0000;"><strong>int Pino1A = 8;</strong></span>
<span style="color: #ff0000;"><strong>int Pino2A = 7;</strong></span>
<span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #ff0000;"><strong>  pinMode(HABILITA, OUTPUT);</strong></span>
<span style="color: #ff0000;"><strong>  pinMode(Pino1A, OUTPUT);</strong></span>
<span style="color: #ff0000;"><strong>  pinMode(Pino2A, OUTPUT);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(HABILITA, LOW);</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span>
<span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(Pino1A, HIGH);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(Pino2A, LOW);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(HABILITA, HIGH);</strong></span>
<span style="color: #ff0000;"><strong>  delay(3000);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(HABILITA, LOW);</strong></span>
<span style="color: #ff0000;"><strong>  delay(2000);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(Pino1A, LOW);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(Pino2A, HIGH);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(HABILITA, HIGH);</strong></span>
<span style="color: #ff0000;"><strong>  delay(3000);</strong></span>
<span style="color: #ff0000;"><strong>  digitalWrite(HABILITA, LOW);</strong></span>
<span style="color: #ff0000;"><strong>  delay(2000);</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>Começamos criando uma constante de nome HABILITA e atribuindo-lhe o valor 11, correspondente ao pino do Arduino conectado ao pino 1 do L293D (habilita os canais 1 e 2 do controlador H).</p>
<p>Na sequência, criamos duas variáveis, Pino1A e Pino2A, que corresponderão aos pinos 8 e 7, onde o motor será conectado.</p>
<p>Na função de setup() configuramos os três pinos para saída (OUTPUT).</p>
<p>Na função principal de loop() fazemos uso da função digitalWrite() para ativar ou desativar o sinal nos pinos de controle do motor.</p>
<p>Quando o Pino1A está em nível alto e o Pino2A em nível baixo, o motor irá girar em uma direção; invertendo os níveis lógicos, o motor gira na direção oposta.</p>
<p>O pino HABILITA recebe nível lógico alto ou baixo quando queremos ativar ou desativar o circuito, respectivamente. Esse pino deve ser colocado em nível HIGH apenas após termos configurado o nível lógico nos pinos do motor.</p>
<p>Também usamos a função delay() para ajustar o tempo em que o motor fica girando em cada direção, ou parado.</p>
<p>É isso aí! Em nosso próximo projeto vamos utilizar um shield de motor para controlar a direção e velocidade de rotação de motores DC.</p>
<p>Até!</p>
<p>Anterior: <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/controlando-velocidade-de-motor-dc-com-arduino-e-potenciometro-projeto/">Controlando a velocidade de rotação de um motor DC com Arduino</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/controlando-direcao-de-rotacao-de-um-motor-dc-com-arduino-e-ponte-h/">Controlando direção de rotação de um motor DC com Arduino e Ponte H</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/controlando-direcao-de-rotacao-de-um-motor-dc-com-arduino-e-ponte-h/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>O que é um UAV &#8211; Unmanned Aerial Vehicle</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/o-que-e-um-uav-unmanned-aerial-vehicle/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/o-que-e-um-uav-unmanned-aerial-vehicle/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 06 Sep 2019 18:14:29 +0000</pubDate>
				<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Maker]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=14668</guid>

					<description><![CDATA[<p>O que é um UAV &#8220;UAV&#8221; é uma sigla que significa &#8220;Unmanned Aerial Vehicle&#8220;, ou, em português, Veículo Aéreo Não-Tripulado (VANT). Trata-se de um tipo de aeronave que não possui um piloto a bordo para guiá-la. Esse tipo de equipamento é controlado remotamente &#8211; ou seja, pilotado a partir de uma estação terrestre. Em alguns casos, seu voo é totalmente autônomo, por meio do emprego de planos de voo pré-programados ou ainda sistemas de controle mais complexos. De forma bem técnica, todo UAV é um drone, mas nem todo drone é um UAV. Atualmente, podemos usar ambos os termos de forma intercambiável, sendo que o termo &#8220;drone&#8221; é muito mais popular devido ao seu emprego na mídia, em filmes, na TV, etc.; já o termo UAV é mais empregado pelas Forças Armadas. UAV SkyGuardian Porém, especialistas na indústria postulam que os UAVs precisam especificamente possuir capacidade de voo autônomo, mas os drones não. Um outro termo muito comum associado a estas tecnologias é o acrônimo UAS &#8211; Unmanned Aircraft Systems (Sistemas de Aeronave Não-Tripuladas), que se refere ao conjunto formado pelo UAV ou drone mais a pessoa que controla o voo e o sistema que conecta ambos. Assim, temos que [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/o-que-e-um-uav-unmanned-aerial-vehicle/">O que é um UAV &#8211; Unmanned Aerial Vehicle</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>O que é um UAV</h2>
<p>&#8220;<strong>UAV</strong>&#8221; é uma sigla que significa &#8220;<em><strong>Unmanned Aerial Vehicle</strong></em>&#8220;, ou, em português, <strong>Veículo Aéreo Não-Tripulado (VANT)</strong>. Trata-se de um tipo de aeronave que não possui um piloto a bordo para guiá-la. Esse tipo de equipamento é controlado remotamente &#8211; ou seja, pilotado a partir de uma estação terrestre. Em alguns casos, seu voo é totalmente autônomo, por meio do emprego de planos de voo pré-programados ou ainda sistemas de controle mais complexos.</p>
<p>De forma bem técnica, todo UAV é um drone, mas nem todo drone é um UAV. Atualmente, podemos usar ambos os termos de forma intercambiável, sendo que o termo &#8220;drone&#8221; é muito mais popular devido ao seu emprego na mídia, em filmes, na TV, etc.; já o termo UAV é mais empregado pelas Forças Armadas.</p>
<div id="attachment_15115" style="width: 626px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-15115" class="size-full wp-image-15115" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/SkyGuardian-UAV.jpg" alt="UAV SkyGuardian" width="616" height="347" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/SkyGuardian-UAV.jpg 616w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/SkyGuardian-UAV-420x237.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/SkyGuardian-UAV-580x326.jpg 580w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/SkyGuardian-UAV-174x98.jpg 174w" sizes="auto, (max-width: 616px) 100vw, 616px" /><p id="caption-attachment-15115" class="wp-caption-text">UAV SkyGuardian</p></div>
<p>Porém, especialistas na indústria postulam que os UAVs precisam especificamente possuir capacidade de voo autônomo, mas os drones não.</p>
<p>Um outro termo muito comum associado a estas tecnologias é o acrônimo UAS &#8211; Unmanned Aircraft Systems (Sistemas de Aeronave Não-Tripuladas), que se refere ao conjunto formado pelo UAV ou drone mais a pessoa que controla o voo e o sistema que conecta ambos. Assim, temos que o UAV é uma parte de um UAS.</p>
<div id="attachment_15116" style="width: 447px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-15116" class="size-full wp-image-15116" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/drone-comum.png" alt="Drone comum" width="437" height="272" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/drone-comum.png 437w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/drone-comum-420x261.png 420w" sizes="auto, (max-width: 437px) 100vw, 437px" /><p id="caption-attachment-15116" class="wp-caption-text">Drone comum</p></div>
<p>Os UAVs foram desenvolvidos a princípio para aplicações militares e atualmente são amplamente empregados em tarefas de reconhecimento, vigilância ou ataque. Já os drones encontram múltiplas aplicações no mundo civil, como fotografia aérea, entrega de mercadorias, vigilância, entretenimento, e muitas outras.</p>
<h3>Pequeno histórico dos UAVs</h3>
<p>1792 &#8211; A forma mais antiga de UAVs existiu na forma de balões. Os irmãos Montgolfier, na França, foram os primeiros a realizarem experimentos com balões e a enviar aerostatos não tripulados em preparação para voos tripulados. Durante a Guerra Civil Americana (1861 &#8211; 1865), o exército da União lançou balões não-tripulados contendo dispositivos incendiários para causar incêndios nas linhas de batalha dos Confederados.</p>
<p>1918 &#8211; A empresa Dayton-Wright Airplane Co. constrói o Torpedo Aéreo Kettering, contando com Orville Wright (dos irmãos Wright) como consultor, além de Elmer Ambrose Sperry como designer dos sistemas de controle e orientação. Uma vez lançado, um pequeno giroscópio a bordo guia a aeronave até seu destino usando um sistema vácuo/pneumático, um sistema elétrico e um altímetro/barômetro aneroide.</p>
<p>1942 &#8211; Uma aeronave Interstate BQ-4/TDR, carregando uma câmera a bordo é guiada com sucesso até um navio alvo a partir de uma aeronave de controla, a 50 km de distância.</p>
<div id="attachment_15117" style="width: 547px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-15117" class="size-full wp-image-15117" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/interstate-bq-4-TDR.jpg" alt="Interstate BQ-4/TDR" width="537" height="295" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/interstate-bq-4-TDR.jpg 537w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/interstate-bq-4-TDR-420x231.jpg 420w" sizes="auto, (max-width: 537px) 100vw, 537px" /><p id="caption-attachment-15117" class="wp-caption-text">Interstate BQ-4/TDR</p></div>
<p>1951 &#8211; O UAV Ryan Firebee é projetado para ser um alvo de artilharia movido a jato. Ele evolui para um sistema de vigilância não-tripulado nos anos 1960, sendo rebatizado como AQM-34, e realizando mais de 34.000 missões ISR sobre o sudeste asiático durante a guerra do Vietnã.</p>
<p>1983 &#8211; O BQM1BR foi o primeiro UAV fabricado no Brasil, pela CBT (Companhia Brasileira de Tratores), sendo um dispositivo de propulsão a jato, para emprego como alvo aéreo.</p>
<p>1989 &#8211; Abraham Karem, na General Atomics apresenta o UAV Gnat 750. Equipado com câmeras de vídeo, ele realiza missões de reconhecimento aéreo sobre a Bósnia, sendo controlado do solo por pessoal na Albânia. Este UAV é precursor do famoso RQ-1/MQ-1 Predator, e suas variantes.</p>
<div id="attachment_15118" style="width: 730px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-15118" class="wp-image-15118" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/general-atomic-GNAT-750.jpg" alt="General Atomic GNAT 750" width="720" height="352" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/general-atomic-GNAT-750.jpg 864w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/general-atomic-GNAT-750-420x205.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/general-atomic-GNAT-750-768x375.jpg 768w" sizes="auto, (max-width: 720px) 100vw, 720px" /><p id="caption-attachment-15118" class="wp-caption-text">General Atomic GNAT 750</p></div>
<p>1998 &#8211; O Northrop Grumman RQ-4 Global Hawk, inicialmente projetado pela empresa Ryan Aeronautical, fornece uma ampla visão geral&nbsp; &#8211; de grande altitude &#8211; e vigilância persistente usando um radar de abertura sintética de alta resolução (SAR) e sensores infravermelhos / eletro-ópticos de longo alcance.</p>
<p>2012 &#8211; A Lei de Reforma e Modernização da FAA de 2012 define o prazo de 30 de setembro de 2015 para que a agência estabeleça regulações permitindo o uso de UAVs comerciais no espaço aéreo dos Estados Unidos.</p>
<p>2014 &#8211; A <a href="https://www.oedigital.com/news/455867-bp-launches-alaska-drone-program" target="_blank" rel="noopener">BP (British Petroleum) obtém a primeira aprovação Federal</a> para voar veículos aéreos não-tripulados sobre o território dos Estados Unidos, com propósitos comerciais. A fabricante de UAVs AeroVironment usa sua aeronave para inspecionar dutos da BP, estradas e equipamentos próximo à Baía de Prudhoe, no Alasca.</p>
<h3>Referências</h3>
<p>Stem Works &#8211; Microwave Journal &#8211; Outubro de 2014.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/o-que-e-um-uav-unmanned-aerial-vehicle/">O que é um UAV &#8211; Unmanned Aerial Vehicle</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/o-que-e-um-uav-unmanned-aerial-vehicle/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Acionando um alarme com buzzer e LED usando sensor HC-SR04 e Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/acionando-um-alarme-com-buzzer-e-led-usando-sensor-hc-sr04-e-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/acionando-um-alarme-com-buzzer-e-led-usando-sensor-hc-sr04-e-arduino/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 25 Apr 2018 19:21:13 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Maker]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=11846</guid>

					<description><![CDATA[<p>Como acionar buzzer e LED com sensor HC-SR04 e Arduino Olá pessoal! Vamos criar mais um projetinho usando Arduino? Vamos construir um pequeno alarme de distância! Neste projeto vamos empregar o sensor ultrassônico de distância HC-SR04 para criar um alarme sonoro e visual, que será acionado quando um objeto for detectado a uma determinada distância do sensor, que pode ser ajustada via código. O alarme consistirá na emissão de um tom sonoro de frequência específica por meio de um buzzer, além de um sinal luminoso utilizando-se um LED colorido. É possível usar um pequeno alto-falante no lugar do buzzer, porém nesse caso o volume sonoro gerado deve ser menor. Lista de Materiais: Arduino Sensor ultrassônico HC-SR04 LED de qualquer cor Resistor de 220Ω Buzzer (ou alto-falante pequeno) Matriz de Contatos Jumpers diversos Circuito O diagrama esquemático a seguir detalha o circuito que devemos construir: Diagrama Esquemático criado com Fritzing Conectamos o pino de Trigger do sensor ao pino digital 8 do arduino, o pino de eco ao pino digital 7, e vamos acionar o buzzer e o LED por meio dos pinos digitais 4 e 3, respectivamente. Note que acrescentamos um resistor de 220Ω para limitação de corrente no LED, de [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/acionando-um-alarme-com-buzzer-e-led-usando-sensor-hc-sr04-e-arduino/">Acionando um alarme com buzzer e LED usando sensor HC-SR04 e Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como acionar buzzer e LED com sensor HC-SR04 e Arduino</h2>
<p>Olá pessoal! Vamos criar mais um projetinho usando Arduino? Vamos construir um pequeno alarme de distância!</p>
<p>Neste projeto vamos empregar o sensor ultrassônico de distância HC-SR04 para criar um alarme sonoro e visual, que será acionado quando um objeto for detectado a uma determinada distância do sensor, que pode ser ajustada via código.</p>
<p>O alarme consistirá na emissão de um tom sonoro de frequência específica por meio de um buzzer, além de um sinal luminoso utilizando-se um LED colorido. É possível usar um pequeno alto-falante no lugar do buzzer, porém nesse caso o volume sonoro gerado deve ser menor.</p>
<h3>Lista de Materiais:</h3>
<ul>
<li>Arduino</li>
<li>Sensor ultrassônico HC-SR04</li>
<li>LED de qualquer cor</li>
<li>Resistor de 220Ω</li>
<li>Buzzer (ou alto-falante pequeno)</li>
<li>Matriz de Contatos</li>
<li>Jumpers diversos</li>
</ul>
<h3>Circuito</h3>
<p>O diagrama esquemático a seguir detalha o circuito que devemos construir:</p>
<div id="attachment_11857" style="width: 719px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11857" class="wp-image-11857 size-full" title="Arduino com sensor ultrassônico e alarme com buzzer e LED" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/04/arduino-hcsr04-led-buzzer.png" alt="Arduino com sensor ultrassônico e alarme com buzzer e LED" width="709" height="478" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/04/arduino-hcsr04-led-buzzer.png 709w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/04/arduino-hcsr04-led-buzzer-420x283.png 420w" sizes="auto, (max-width: 709px) 100vw, 709px" /><p id="caption-attachment-11857" class="wp-caption-text">Diagrama Esquemático criado com Fritzing</p></div>
<p>Conectamos o pino de Trigger do sensor ao pino digital 8 do arduino, o pino de eco ao pino digital 7, e vamos acionar o buzzer e o LED por meio dos pinos digitais 4 e 3, respectivamente. Note que acrescentamos um resistor de 220Ω para limitação de corrente no LED, de modo a evitar que se danifique quando se acender.</p>
<h3>Código-fonte</h3>
<p>A seguir temos o código do Arduino para a aplicação do sensor de distância, comentado:</p>
<pre><span style="color: #339966;"><strong>/* </strong></span><span style="color: #339966;"><strong>Acionando alarme com Sensor Ultrassônico HC-SR04</strong></span>
<span style="color: #339966;"><strong>Por Fábio dos Reis</strong></span>
<span style="color: #339966;"><strong>www.bosontreinamentos.com.br </strong></span><span style="color: #339966;"><strong>*/
</strong></span>
<span style="color: #339966;"><strong>// Definir os números dos pinos</strong></span>
<span style="color: #ff0000;"><strong>const int trigger = 8;</strong></span>
<span style="color: #ff0000;"><strong>const int eco = 7;
const int buzzer = 4;
const int led = 3;
</strong></span>
<span style="color: #339966;"><strong>// Definir as variáveis</strong></span>
<span style="color: #ff0000;"><strong>long duracao;</strong></span>
<span style="color: #ff0000;"><strong>float dist;
</strong></span>
<span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #ff0000;"><strong> pinMode(trigger, OUTPUT); <span style="color: #339966;">// Configura o pino trigger como saída</span></strong></span>
<span style="color: #ff0000;"><strong> pinMode(eco, INPUT); <span style="color: #339966;">// Configura o pino eco como entrada.
</span></strong><strong> pinMode(buzzer, OUTPUT); <span style="color: #339966;">// Configura o pino de acionamento do buzzer</span>
 pinMode(led, OUTPUT); <span style="color: #339966;">// Configura o pino de acionamento do LED
</span></strong></span> <span style="color: #ff0000;"><strong>digitalWrite(led, LOW); <span style="color: #339966;">// Desliga LED ao iniciar a placa.
</span></strong></span> <span style="color: #ff0000;"><strong>digitalWrite(buzzer, LOW); <span style="color: #339966;">// Desliga buzzer ao iniciar a placa.</span></strong></span>
<span style="color: #ff0000;"><strong>}
</strong></span>
<span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #339966;"><strong> // Limpa o trigger</strong></span>
<span style="color: #ff0000;"><strong> digitalWrite(trigger, LOW);</strong></span>
<span style="color: #ff0000;"><strong> delayMicroseconds(5);
</strong></span>
<span style="color: #339966;"><strong> // Configurar o trigger para nível alto para transmissão de sinais</strong></span>
<span style="color: #ff0000;"><strong> digitalWrite(trigger, HIGH);</strong></span>
<span style="color: #ff0000;"><strong> delayMicroseconds(10); <span style="color: #339966;">// tempo para envio do sinal</span></strong></span>
<span style="color: #ff0000;"><strong> digitalWrite(trigger, LOW);
</strong></span>
<span style="color: #339966;"><strong> // Inicia contagem de tempo e lê o pino de eco</strong></span>
<span style="color: #ff0000;"><strong> duracao = pulseIn(eco, HIGH);
</strong></span>
<span style="color: #339966;"><strong> // Calcular a distância</strong></span>
<span style="color: #ff0000;"><strong> dist = duracao * 0.034 / 2;
</strong></span>
<span style="color: #339966;"><strong> // Acionar buzzer e LED se objeto detectado estiver a menos de 10cm do sensor:</strong></span>
<span style="color: #ff0000;"><strong> if (dist &lt;= 10) {
   tone(buzzer, 700);
   digitalWrite(led, HIGH);
</strong></span><span style="color: #ff0000;"><strong> }
 else {
   noTone(buzzer);
   digitalWrite(led, LOW);
 }</strong></span>
<span style="color: #339966;"><strong> // Aguardar 100ms antes da próxima leitura para evitar interferência</strong></span>
<span style="color: #ff0000;"><strong> delay(100);</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>A explicação detalhada de como funciona o <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/usando-um-sensor-ultrassonico-hc-sr04-com-arduino/" target="_blank" rel="noopener">sensor ultrassônico HC-SR04 pode ser consultada aqui</a>.</p>
<p>Para acionar o buzzer usamos a função <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/arduino-conhecendo-as-funcoes-tone-e-notone/" target="_blank" rel="noopener">tone()</a>, que gera um tom de frequência determinada a ser enviado a um dos pinos do Arduino. E, para parar a execução do som, samos a função <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/arduino-conhecendo-as-funcoes-tone-e-notone/" target="_blank" rel="noopener">noTone()</a>.</p>
<h3>Como testar o circuito</h3>
<p>Testar o circuito é bem simples: basta aproximar um objeto do sensor de ultrassom, e observar que o buzzer é acionado, juntamente com o LED, quando o objeto chegar a 10cm ou menos de distância, e o &#8220;alarme&#8221; pára quando o obstáculo se afasta além dos 10 centímetros.</p>
<p>Você pode fazer modificações diversas no circuito, como por exemplo alterar a distância de disparo do alarme, ou ainda tentar modificar o circuito para que o buzzer reproduza sons de diferentes frequências dependendo da distância do obstáculo ao sensor.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/acionando-um-alarme-com-buzzer-e-led-usando-sensor-hc-sr04-e-arduino/">Acionando um alarme com buzzer e LED usando sensor HC-SR04 e Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/acionando-um-alarme-com-buzzer-e-led-usando-sensor-hc-sr04-e-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A classe EthernetServer &#8211; Configurando um servidor web com Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/a-classe-ethernetserver-usando-o-arduino-como-um-servidor-de-rede/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/a-classe-ethernetserver-usando-o-arduino-como-um-servidor-de-rede/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 03 Apr 2018 23:33:01 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Maker]]></category>
		<category><![CDATA[Redes]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=11283</guid>

					<description><![CDATA[<p>Arduino como servidor de rede &#8211; a classe EthernetServer Projeto: Criando um Servidor Web com Arduino e Ethernet Shield Vamos colocar em prática a teoria mostrada na lição anterior sobre o shield ethernet no Arduino, criando um projeto simples com um Arduino Uno (outras placas também funcionam) e um Shield Ethernet: um Servidor Web, sistema que aceita solicitações de clientes e permite enviar dados como resposta. Por exemplo, podemos ter um sensor medindo a temperatura do ambiente, e consultar os valores medidos pela Internet ou rede local, usando um navegador que acessa o  Servidor Web configurado. Neste tutorial vamos mostrar como usar um shield Ethernet e a classe EthernetServer para configurar um servidor de rede (web) com Arduino. Lista de materiais Vamos precisar de : 1 Shield Ethernet Arduino (Uno, Mega, etc) Cabo de Rede Roteador da sua rede local PC com navegador para testes A seguir podemos ver o Shield Ethernet conectado a um Arduino Uno: A Classe EthernetServer A função desta classe é criar um objeto servidor que irá escutar (aguardar solicitações) requisições de conexão de clientes em uma porta específica, e então servir a esses clientes um serviço quando essa conexão é efetuada. O primeiro passo para configurar um servidor web com Arduino e shield [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/a-classe-ethernetserver-usando-o-arduino-como-um-servidor-de-rede/">A classe EthernetServer &#8211; Configurando um servidor web com Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Arduino como servidor de rede &#8211; a classe EthernetServer</h2>
<h3>Projeto: Criando um Servidor Web com Arduino e Ethernet Shield</h3>
<p>Vamos colocar em prática a teoria mostrada na lição anterior sobre o <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-shield-ethernet-no-arduino/" target="_blank" rel="noopener">shield ethernet no Arduino</a>, criando um projeto simples com um Arduino Uno (outras placas também funcionam) e um Shield Ethernet: um Servidor Web, sistema que aceita solicitações de clientes e permite enviar dados como resposta. Por exemplo, podemos ter um sensor medindo a temperatura do ambiente, e consultar os valores medidos pela Internet ou rede local, usando um navegador que acessa o  Servidor Web configurado.</p>
<p>Neste tutorial vamos mostrar como usar um shield Ethernet e a classe EthernetServer para configurar um servidor de rede (web) com Arduino.</p>
<h4>Lista de materiais</h4>
<p>Vamos precisar de :</p>
<ul>
<li>1 Shield Ethernet</li>
<li>Arduino (Uno, Mega, etc)</li>
<li>Cabo de Rede</li>
<li>Roteador da sua rede local</li>
<li>PC com navegador para testes</li>
</ul>
<p>A seguir podemos ver o Shield Ethernet conectado a um Arduino Uno:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-11735" title="Shield Ethernet encaixado no Arduino Uno" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/Arduino-Shield-Ethernet-01.jpg" alt="" width="650" height="505" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/Arduino-Shield-Ethernet-01.jpg 800w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/Arduino-Shield-Ethernet-01-420x327.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/Arduino-Shield-Ethernet-01-768x597.jpg 768w" sizes="auto, (max-width: 650px) 100vw, 650px" /></p>
<h3>A Classe EthernetServer</h3>
<p>A função desta classe é criar um objeto servidor que irá escutar (aguardar solicitações) requisições de conexão de clientes em uma porta específica, e então servir a esses clientes um serviço quando essa conexão é efetuada.</p>
<p>O primeiro passo para configurar um servidor web com Arduino e shield Ethernet é criar um objeto servidor, usando a sintaxe a seguir:</p>
<pre><span style="color: #ff0000;"><strong>EthernetServer servidor = EthernetServer(porta);</strong></span></pre>
<p>Onde<em> porta</em> é o número da porta de comunicações na qual o servidor escutará. O padrão é a porta 80 para o serviço web.</p>
<p>Devemos inicializar a biblioteca Ethernet passando como parâmetro, no mínimo, o MAC address do shield Ethernet, como segue:</p>
<pre><span style="color: #ff0000;"><strong>Ethernet.begin(mac);</strong></span></pre>
<p>Também é possível passar outros parâmetros de rede, com o ip, máscara de subrede e gateway padrão, caso utilizamos IP fixo, por exemplo:</p>
<pre><span style="color: #ff0000;"><strong>Ethernet.begin(mac, ip, gateway, subrede);</strong></span></pre>
<p>O servidor será inicializado quando necessário invocando-se o método begin:</p>
<pre><span style="color: #ff0000;"><strong>servidor.begin();</strong></span></pre>
<h3>Classe EthernetCLient</h3>
<p>Para começar a ouvir, é necessário também criar um objeto cliente, o qual irá representar o cliente real com o qual o servidor irá se comunicar. Para isso, usamos a classe EthernetClient, como segue:</p>
<pre><span style="color: #ff0000;"><strong>EthernetClient cliente = servidor.available();</strong></span></pre>
<p>Esse objeto cliente retorna o valor falso (0) se não houver nenhum cliente disponível no momento.</p>
<p>Para fechar a conexão com um cliente, após a transmissão dos dados requisitados, por exemplo, usamos o método stop():</p>
<pre><span style="color: #ff0000;"><strong>cliente.stop();</strong></span></pre>
<p>Consulte a descrição completa das <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-shield-ethernet-no-arduino/" target="_blank" rel="noopener">funções de cliente e servidor no Arduino</a> para saber mais sobre como usar essas classes.</p>
<h3>Enviar e receber dados de um cliente</h3>
<p>Usamos as funções <strong>print(), println()</strong> e <strong>write()</strong> para enviar dados a um cliente. Para receber (ler) dados do cliente, usamos o método <strong>read()</strong>.</p>
<p>Código de exemplo (simplificados)</p>
<pre><span style="color: #ff0000;"><strong>EthernetServer servidor = EthernetServer(80);</strong></span>
<span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #ff0000;"><strong>  Ethernet.begin(mac, ip, gateway, subrede);</strong></span>
<span style="color: #ff0000;"><strong>  servidor.begin();</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span>
<span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #ff0000;"><strong>  EthernetClient cliente = servidor.available();</strong></span>
<span style="color: #ff0000;"><strong>  if (cliente) {</strong></span>
<span style="color: #ff0000;"><strong>    Serial.print(cliente.read());  <span style="color: #339966;">// Ler dados do cliente e enviar para o monitor serial</span></strong></span>
<span style="color: #ff0000;"><strong>  }</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>No exemplo, criamos um objeto <strong>EthernetServer</strong> de nome <em><strong>servido</strong></em>r, inicializando-o com o número da porta que será utilizada, no caso a porta <strong>80</strong> (padrão HTTP).</p>
<p>Na função de setup() inicializamos a biblioteca Ethernet, passando os dados de endereço mac, ip, gateway e máscara de subrede.</p>
<p>Na função loop() criamos o objeto <strong>EthernetClient</strong>, de nome <em><strong>cliente</strong></em>, que recebe o retorno do método <strong>servidor.available()</strong>, o qual verifica se o servidor está disponível. Caso esteja, será impressa no monitor serial um dado lido proveniente do cliente de rede.</p>
<p>O método <strong>available()</strong> retorna o valor 0 (zero) caso não haja um cliente disponível. Caso haja, o objeto cliente o representará.</p>
<p>Vejamos o código completo para a criação de um servidor web simples, que inclui a geração de um cabeçalho HTTP de resposta e o envio de uma página HTML ao cliente (navegador em um computador ou outro dispositivo)</p>
<h3>Código para o servidor Web</h3>
<p>Abaixo temos o código completo do sketch de nosso servidor web com Arduino:</p>
<pre><span style="color: #800000;"><strong>#include &lt;SPI.h&gt;</strong></span>
<span style="color: #800000;"><strong>#include &lt;Ethernet.h&gt;
</strong></span>
<span style="color: #800000;"><strong>byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };</strong></span>
<span style="color: #800000;"><strong>EthernetServer servidor(80);
</strong></span>
<span style="color: #800000;"><strong>void setup() {</strong></span>
<span style="color: #800000;"><strong> Serial.begin(9600);</strong></span>
<span style="color: #339966;"><strong>//Desativando o SD Card:</strong></span>
<span style="color: #800000;"><strong> pinMode(4, OUTPUT);</strong></span>
<span style="color: #800000;"><strong> digitalWrite(4, HIGH);</strong></span>
 
<span style="color: #800000;"><strong> Ethernet.begin(mac);</strong></span>
<span style="color: #800000;"><strong> servidor.begin();</strong></span>
 
<span style="color: #800000;"><strong> Serial.print("IP do servidor: ");</strong></span>
<span style="color: #800000;"><strong> Serial.println(Ethernet.localIP());
 Serial.print("Gateway: ");</strong></span>
<span style="color: #800000;"><strong> Serial.println(Ethernet.gatewayIP());</strong></span>
<span style="color: #800000;"><strong>}
</strong></span>
<span style="color: #800000;"><strong>void loop() {</strong></span>
<span style="color: #800000;"><strong> EthernetClient cliente = servidor.available();</strong></span>
<span style="color: #800000;"><strong> if (cliente) {</strong></span>
<span style="color: #800000;"><strong>   boolean linha_atual_branca = true;</strong></span>
<span style="color: #800000;"><strong>   while (cliente.connected()) {</strong></span>
<span style="color: #800000;"><strong>     if (cliente.available()) {</strong></span>
<span style="color: #800000;"><strong>       char c = cliente.read();</strong></span>
<span style="color: #800000;"><strong>       Serial.write(c);</strong></span>
 
<span style="color: #800000;"><strong>       if (c == '\n' &amp;&amp; linha_atual_branca) {
</strong></span>         <span style="color: #339966;"><strong>// Criando o cabeçalho HTTP:</strong></span>
<span style="color: #800000;"><strong>         cliente.println("HTTP/1.1 200 OK");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("Content-Type: text/html");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("Connection: close");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("Refresh: 5");</strong></span>
<span style="color: #800000;"><strong>         cliente.println();
</strong></span>         <span style="color: #339966;"><strong>// Código da página Web a ser exibida:</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;!DOCTYPE html&gt;");
         cliente.println("&lt;html lang='pt-br'&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;head&gt;");
         cliente.println("&lt;meta charset='UTF-8'&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;title&gt;Servidor Web com Arduino&lt;/title&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;/head&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;body&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;hr&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;p&gt;Bem-vindo à Bóson Treinamentos em Tecnologia!&lt;/p&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;hr&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;/body&gt;");</strong></span>
<span style="color: #800000;"><strong>         cliente.println("&lt;/html&gt;");</strong></span>
<span style="color: #800000;"><strong>         break;</strong></span>
<span style="color: #800000;"><strong>       }</strong></span>
<span style="color: #800000;"><strong>     if (c == '\n') {</strong></span>
<span style="color: #339966;"><strong>       // Iniciando uma nova linha</strong></span>
<span style="color: #800000;"><strong>       linha_atual_branca = true;</strong></span>
<span style="color: #800000;"><strong>     }
     else if (c != '\r') {</strong></span>
<span style="color: #339966;"><strong>       // Há um caractere na linha atual</strong></span>
<span style="color: #800000;"><strong>       linha_atual_branca = false;</strong></span>
<span style="color: #800000;"><strong>     }</strong></span>
<span style="color: #800000;"><strong>   }</strong></span>
<span style="color: #800000;"><strong> }</strong></span>
<span style="color: #339966;"><strong> // Tempo para o navegador receber os dados</strong></span>
<span style="color: #800000;"><strong> delay(1);</strong></span>
<span style="color: #339966;"><strong> // Fechar a conexão:</strong></span>
<span style="color: #800000;"><strong> cliente.stop();</strong></span>
<span style="color: #800000;"><strong> }
</strong></span><span style="color: #800000;"><strong>}</strong></span>    </pre>
<p>Após carregar o sketch no Arduino, abrimos o monitor serial para verificar se um endereço IP foi atribuído corretamente ao shield ethernet:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-11727" title="Web Server no Arduino - Monitor Serial" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/arduino-web-server-monitor-serial.jpg" alt="Web Server no Arduino - Monitor Serial" width="549" height="146" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/arduino-web-server-monitor-serial.jpg 620w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/arduino-web-server-monitor-serial-420x112.jpg 420w" sizes="auto, (max-width: 549px) 100vw, 549px" /></p>
<p>Veja que foi atribuído o IP 192.168.1.109 ao shield ethernet. Vamos agora abrir um navegador no computador e acessar o endereço do nosso servidor web:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-11728 size-full" title="Servidor Web com Shield Ethernet no Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/arduino-web-server-navegador-ethernet-shield.jpg" alt="Servidor Web com Shield Ethernet no Arduino" width="433" height="125" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/arduino-web-server-navegador-ethernet-shield.jpg 433w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/arduino-web-server-navegador-ethernet-shield-420x121.jpg 420w" sizes="auto, (max-width: 433px) 100vw, 433px" /></p>
<p>Note que também é possível usar um endereço IP fixo no servidor web, bastando para isso acrescentar a seguinte linha ao nosso código (logo após a declaração do endereço MAC), fornecendo o IP desejado, com seus números separados por vírgulas, como no exemplo:</p>
<pre><span style="color: #ff0000;"><strong>IPAddress ip(192, 168, 1, 10);</strong></span></pre>
<p>E então alterar a instrução:</p>
<pre><span style="color: #ff0000;"><strong>Ethernet.begin(mac);</strong></span></pre>
<p>para</p>
<pre><span style="color: #ff0000;"><strong>Ethernet.begin (mac, ip);</strong></span></pre>
<p>Desta forma, será usado o IP fornecido no código, em vez de um endereço IP obtido a partir de um servidor DHCP na rede &#8211; o qual pode mudar de tempos em tempos, dificultando a tarefa de acessar o Arduino pela rede.</p>
<p>No próximo tutorial vamos mostrar como é possível enviar comandos a um Arduino a partir de um navegador, por meio da configuração do servidor Web.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/a-classe-ethernetserver-usando-o-arduino-como-um-servidor-de-rede/">A classe EthernetServer &#8211; Configurando um servidor web com Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/a-classe-ethernetserver-usando-o-arduino-como-um-servidor-de-rede/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Usando um Sensor Ultrassônico de Distância HC-SR04 com Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/usando-um-sensor-ultrassonico-hc-sr04-com-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/usando-um-sensor-ultrassonico-hc-sr04-com-arduino/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sun, 25 Feb 2018 15:49:19 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Maker]]></category>
		<category><![CDATA[Sensor]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=11464</guid>

					<description><![CDATA[<p>Sensor Ultrassônico HC-SR04 Neste tutorial vamos mostrar como funciona o sensor ultrassônico de distância HC-SR04 e como usá-lo para detectar a distância de objetos com um Arduino. Sensor Ultrassônico Um sensor de ultrassom funciona emitindo um pulso sonoro em uma frequência acima da faixa audível pelo ser humano (aproximadamente 20.000 Hz), o qual viaja pelo ar até atingir um obstáculo, sendo então refletido de volta e detectado pelo sensor. Desta forma, conhecendo-se a velocidade de propagação do som no ar e medindo o tempo entre a transmissão e a recepção do pulso sonoro, é possível calcular a que distância se encontra o objeto que refletiu o som. O sensor considerado (HC-SR04) é um módulo de baixo custo que opera na faixa dos 40 kHz (40.000 Hz), e possui um alcance de detecção de cerca de 2cm até 4m de distância, de acordo com seu datasheet. Sensor de distância por ultrassom HC-SR04 Esse módulo sensor possui quatro pinos: VCC &#8211; Alimentação do sensor (5V) GND &#8211; Comum (Ground) Trig &#8211; Trigger (disparo), pino usado para transmitir um pulso de ultrassom Echo &#8211; Eco, pino que recebe e detecta o pulso de ultrassom refletido por um obstáculo Características do HC-SR04 As principais [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/usando-um-sensor-ultrassonico-hc-sr04-com-arduino/">Usando um Sensor Ultrassônico de Distância HC-SR04 com Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Sensor Ultrassônico HC-SR04</h2>
<p>Neste tutorial vamos mostrar como funciona o sensor ultrassônico de distância <strong>HC-SR04</strong> e como usá-lo para detectar a distância de objetos com um Arduino.</p>
<h4>Sensor Ultrassônico</h4>
<p>Um sensor de ultrassom funciona emitindo um pulso sonoro em uma frequência acima da faixa audível pelo ser humano (aproximadamente 20.000 Hz), o qual viaja pelo ar até atingir um obstáculo, sendo então refletido de volta e detectado pelo sensor.</p>
<p>Desta forma, conhecendo-se a velocidade de propagação do som no ar e medindo o tempo entre a transmissão e a recepção do pulso sonoro, é possível calcular a que distância se encontra o objeto que refletiu o som.</p>
<p>O sensor considerado (HC-SR04) é um módulo de baixo custo que opera na faixa dos 40 kHz (40.000 Hz), e possui um alcance de detecção de cerca de 2cm até 4m de distância, de acordo com seu datasheet.</p>
<div id="attachment_11470" style="width: 487px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11470" class="wp-image-11470 size-full" title="Sensor de ultrassom HC-SR04" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/sensor-ultrassom-HC-SR04-arduino.jpg" alt="Sensor de ultrassom HC-SR04" width="477" height="361" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/sensor-ultrassom-HC-SR04-arduino.jpg 477w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/sensor-ultrassom-HC-SR04-arduino-420x318.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/sensor-ultrassom-HC-SR04-arduino-174x131.jpg 174w" sizes="auto, (max-width: 477px) 100vw, 477px" /><p id="caption-attachment-11470" class="wp-caption-text">Sensor de distância por ultrassom HC-SR04</p></div>
<p>Esse módulo sensor possui quatro pinos:</p>
<ul>
<li>VCC &#8211; Alimentação do sensor (5V)</li>
<li>GND &#8211; Comum (Ground)</li>
<li>Trig &#8211; Trigger (disparo), pino usado para transmitir um pulso de ultrassom</li>
<li>Echo &#8211; Eco, pino que recebe e detecta o pulso de ultrassom refletido por um obstáculo</li>
</ul>
<h3>Características do HC-SR04</h3>
<p>As principais características do sensor HC-SR04 são as seguintes, de acordo com seu datasheet: </p>
<table style="height: 238px;" width="454">
<tbody>
<tr>
<td style="width: 218.75px;"><strong>Parâmetro</strong></td>
<td style="width: 219.659px;"><strong>Valor</strong></td>
</tr>
<tr>
<td style="width: 218.75px;">Tensão de operação</td>
<td style="width: 219.659px;">5v DC</td>
</tr>
<tr>
<td style="width: 218.75px;">Corrente de operação</td>
<td style="width: 219.659px;">15 mA</td>
</tr>
<tr>
<td style="width: 218.75px;">Frequência de operação</td>
<td style="width: 219.659px;">40 kHz</td>
</tr>
<tr>
<td style="width: 218.75px;">Alcance mínimo</td>
<td style="width: 219.659px;">2 cm</td>
</tr>
<tr>
<td style="width: 218.75px;">Alcance máximo</td>
<td style="width: 219.659px;">4 m</td>
</tr>
<tr>
<td style="width: 218.75px;">Ângulo de medição</td>
<td style="width: 219.659px;">15º</td>
</tr>
<tr>
<td style="width: 218.75px;">Sinal de entrada de disparo</td>
<td style="width: 219.659px;">Pulso TTL de 10 μs</td>
</tr>
</tbody>
</table>
<h3>Funcionamento do HC-SR04</h3>
<p>O sensor ultrassônico consiste em dois componentes distintos &#8211; um circuito que gera e emite o sinal e outro que detecta o sinal refletido de volta. Além disso, o HC-SR04 possui um pequeno microcontrolador responsável por determinar o intervalo de tempo entre o envio e o recebimento do sinal sonoro. Esse intervalo de tempo corresponde a um valor de tensão elétrica: quanto maior o tempo, maior a tensão.</p>
<p>Para gerar o ultrassom o pino <strong>Trig</strong> deve ser colocado em nível alto por um intervalo de tempo de alguns microssegundos, o que permitirá enviar uma sequência de pulsos sonoros, viajando na velocidade do som e que serão detectados eventualmente pelo pino <strong>Echo</strong>. O pino Echo retorna a duração de tempo em microssegundos (μs) dos pulsos recebidos.</p>
<p>Por exemplo, suponha que um obstáculo esteja localizado a 20cm de distância do sensor. A velocidade do som no ar é de 340 m/s, ou 0,034 cm/μs, ou ainda aproximadamente 29,4 μs por centímetro percorrido. Assim, as ondas sonoras terão de viajar por cerca de 588 μs entre o sensor e o obstáculo, de acordo com a fórmula:</p>
<pre><span style="color: #800080;"><strong>t = s/v</strong></span></pre>
<p>Onde <strong>t</strong> é o tempo, <strong>s</strong> é o espaço percorrido pela onda de ultrassom e v é sua velocidade de propagação no ar.</p>
<p>Ou seja:</p>
<pre><span style="color: #800080;"><strong>T = 20cm / 0,034cm/μs = 588,23 μs</strong></span></pre>
<p>Na prática, o tempo total de viagem do pulso, medido ida e volta, será o <strong>dobro</strong> desse valor. Em nosso exemplo, o tempo total decorrido entre a transmissão do pulso de ultrassom e seu recebimento será de:</p>
<pre><span style="color: #800080;"><strong>588,23 μs x 2 = 1176,46 μs</strong></span></pre>
<p>Assim, para obter a distância real até o objeto, devemos dividir o valor medido por 2. Desta maneira, a fórmula para determinação da distância até o objeto será:</p>
<pre><span style="color: #800080;"><strong>s = t x 0,034 / 2</strong></span></pre>
<p>Ou ainda:</p>
<pre><span style="color: #800080;"><strong>s = microssegundos / 29,4 / 2</strong></span></pre>
<p>Aplicando as fórmulas em nosso exemplo:</p>
<pre><strong><span style="color: #0000ff;">s = 1176,46 x 0,034 / 2 = 20 cm</span></strong></pre>
<p>ou</p>
<pre><span style="color: #0000ff;"><strong>s = 1176,46 / 29,4 / 2 = 20 cm</strong></span></pre>
<p>Podemos usar qualquer uma dessas fórmulas em nosso programa.</p>
<div id="attachment_11477" style="width: 542px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11477" class="wp-image-11477 size-full" title="Sensor de distância HC-SR04" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/sensor-distância-HC-SR04.jpg" alt="Sensor de distância HC-SR04" width="532" height="274" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/sensor-distância-HC-SR04.jpg 532w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/sensor-distância-HC-SR04-420x216.jpg 420w" sizes="auto, (max-width: 532px) 100vw, 532px" /><p id="caption-attachment-11477" class="wp-caption-text">Funcionamento do sensor de distância HC-SR04</p></div>
<p><strong>Resumindo o funcionamento:</strong></p>
<ol>
<li>Configuramos em nível baixo (LOW) os pinos Trig e Echo quando o módulo é inicializado</li>
<li>Transmitimos um pulso em nível alto (HIGH) por pelo menos 10 μs ao pino Trig, que equivale a oito ondas quadradas de 40 kHz.</li>
<li>Esperamos a captura da saída da borda de subida pelo pino Echo (valor HIGH). Simultaneamente, iniciar um timer para começar a contar o tempo (função <strong>pulseIn</strong> no Arduino).</li>
<li>Capturar a borda de descida no pino Echo, e ao mesmo tempo, ler o contador, que indica o tempo de deslocamento do sinal ultrassônico.</li>
<li>Finalmente, aplicando a fórmula ao valor lido, calculamos a distância até o obstáculo, e então tomamos uma decisão sobre o que fazer (acender um LED, emitir um alarme sonoro, etc).</li>
</ol>
<p>A seguir podemos visualizar o diagrama de temporização do sensor (retirado de seu datasheet):</p>
<div id="attachment_11481" style="width: 717px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11481" class="wp-image-11481 size-full" title="Diagrama de Temporização do sensor HC-SR04" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/HC-SR04-sensor-diagrama-temporização-e1526221267770.jpg" alt="Diagrama de Temporização do sensor HC-SR04" width="707" height="292" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/HC-SR04-sensor-diagrama-temporização-e1526221267770.jpg 707w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/HC-SR04-sensor-diagrama-temporização-e1526221267770-420x173.jpg 420w" sizes="auto, (max-width: 707px) 100vw, 707px" /><p id="caption-attachment-11481" class="wp-caption-text">Diagrama de Temporização do sensor HC-SR04 (Fonte: Datasheet da ElecFreaks)</p></div>
<h3>Aplicações de sensores ultrassônicos</h3>
<p>Os sensores de ultrassom são empregados em uma variedade de aplicações, em diversas áreas, como:</p>
<ul>
<li>Medição de distância (nosso objetivo aqui)</li>
<li>Medição de profundidade ou espessura</li>
<li>Visualização de imagens</li>
<li>Polimento e limpeza</li>
<li>Solda ultrassônica</li>
</ul>
<p>entre outras. Neste artigo empregaremos um sensor de ultrassom de baixo custo para detectar e medir a distância de um objeto (obstáculo).</p>
<h3>Montando o circuito</h3>
<p>Para este projeto precisaremos dos seguintes componentes:</p>
<ul>
<li>Sensor HC-SR04</li>
<li>Arduino</li>
<li>Fios e matriz de contatos</li>
</ul>
<p>A figura a seguir mostra a conexão dos componentes usando a breadboard. Basicamente, ligamos o pino 8 do Arduino ao pino Trig do sensor, o pino 7 ao pino Echo, e conectamos VCC e GND aos pinos correspondentes no microcontrolador:</p>
<h3><img loading="lazy" decoding="async" class="aligncenter wp-image-11465 size-full" title="Sensor de distância HC-SR04 com Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/HC-SR04-arduino-breadboard.jpg" alt="Sensor de distância HC-SR04 com Arduino" width="672" height="474" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/HC-SR04-arduino-breadboard.jpg 672w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/02/HC-SR04-arduino-breadboard-420x296.jpg 420w" sizes="auto, (max-width: 672px) 100vw, 672px" /> Código do sketch</h3>
<p>A seguir temos o código do Arduino para a aplicação do sensor de distância, comentado:</p>
<pre><span style="color: #339966;"><strong>/*</strong></span>
<span style="color: #339966;"><strong>Sensor Ultrassônico HC-SR04</strong></span>
<span style="color: #339966;"><strong>Fábio dos Reis</strong></span>
<span style="color: #339966;"><strong>www.bosontreinamentos.com.br </strong></span><span style="color: #339966;"><strong>*/
</strong></span>
<span style="color: #339966;"><strong>// Definir os números dos pinos</strong></span>
<span style="color: #ff0000;"><strong>const int trigger = 8;</strong></span>
<span style="color: #ff0000;"><strong>const int eco = 7;
</strong></span>
<span style="color: #339966;"><strong>// Definir as variáveis</strong></span>
<span style="color: #ff0000;"><strong>long duracao;</strong></span>
<span style="color: #ff0000;"><strong>float dist;
</strong></span>
<span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #ff0000;"><strong> pinMode(trigger, OUTPUT); <span style="color: #339966;">// Configura o pino trigger como saída</span></strong></span>
<span style="color: #ff0000;"><strong> pinMode(eco, INPUT); <span style="color: #339966;">// Configura o pino eco como entrada.</span></strong></span>
<span style="color: #ff0000;"><strong> Serial.begin(9600); <span style="color: #339966;">// Inicia a comunicação serial</span></strong></span>
<span style="color: #ff0000;"><strong>}
</strong></span>
<span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #339966;"><strong> // Limpa o trigger</strong></span>
<span style="color: #ff0000;"><strong> digitalWrite(trigger, LOW);</strong></span>
<span style="color: #ff0000;"><strong> delayMicroseconds(5);
</strong></span>
<span style="color: #339966;"><strong> // Configurar o trigger para nível alto para transmissão de sinais</strong></span>
<span style="color: #ff0000;"><strong> digitalWrite(trigger, HIGH);</strong></span>
<span style="color: #ff0000;"><strong> delayMicroseconds(10); <span style="color: #339966;">// tempo para envio do sinal</span></strong></span>
<span style="color: #ff0000;"><strong> digitalWrite(trigger, LOW);
</strong></span>
<span style="color: #339966;"><strong> // Inicia contagem de tempo e lê o pino de eco</strong></span>
<span style="color: #ff0000;"><strong> duracao = pulseIn(eco, HIGH);
</strong></span>
<span style="color: #339966;"><strong> // Calcular a distância</strong></span>
<span style="color: #ff0000;"><strong> dist = duracao * 0.034 / 2;
</strong></span>
<span style="color: #339966;"><strong> // Mostrar a distância no monitor serial</strong></span>
<span style="color: #ff0000;"><strong> if (dist &gt;= 400 || dist &lt;= 2) {
   Serial.println("Valor fora do alcance");
 }
 else {
   Serial.print("Distancia em cm: ");</strong></span>
<span style="color: #ff0000;"><strong>   Serial.println(dist);
 }
</strong></span>
<span style="color: #339966;"><strong> // Aguardar 100ms antes da próxima leitura para evitar interferência</strong></span>
<span style="color: #ff0000;"><strong> delay(100);</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<h4>Explicando o código:</h4>
<ul>
<li>Primeiramente definimos os pinos de trigger e eco, que serão respectivamente os pinos 8 e 7.</li>
<li>Criamos então duas variáveis: duracao, para armazenar a duração do pulso lido pelo sensor, e dist, onde será armazenado o valor da distância calculada até o objeto.</li>
<li>Na função setup() configuramos os modos de operação dos pinos, sendo modo de saída para o pino trigger e entrada para o pino de eco. Inicializamos também o monitor serial.</li>
<li>Na função principal, loop(), começamos limpando o trigger ao colocá-lo em nível baixo por cerca de 5 us (suficiente).</li>
<li>Em seguida, colocamos o trigger em nível alto por 10 us (função delayMicroseconds), para que seja gerado o sinal ultrassônico e enviado, e então colocamos o pino de volta ao nível LOW.</li>
<li>Os pulsos de ultrassom são enviados, batem em um obstáculo e são refletidos de volta (eco). Devemos agora ler o valor detectado no pino de eco, usando para isso a função do Arduino <em>pulseIn</em> (veja quadro abaixo a respeito dessa função).</li>
<li>Calculamos a distância usando a fórmula <strong>dist = duracao * 0,034 / 2</strong></li>
<li>E finalmente mostramos a distância calculada no monitor serial (ou realizamos outra tarefa). Caso a distância do objeto seja maior ou igual a 4m (400cm) ou menor ou igual a 2cm (limites de detecção do sensor), será exibida a mensagem &#8220;Valor fora do alcance&#8221;.</li>
<li>Aguardamos 100 ms antes do próximo ciclo de detecção (varie à vontade esse valor, para obter mais ou menos leituras por segundo; idealmente, não use um valor abaixo de 60 ms para que não haja interferência entre os sinais enviados e recebidos pelo sensor).</li>
</ul>
<table style="height: 897px;" width="1077">
<tbody>
<tr>
<td style="width: 1067px;">
<h3>A função <strong>pulseIn()</strong></h3>
<p>A função <strong>pulseIn()</strong> (&#8220;pulse input&#8221;) lê um pulso presente em um pino, tanto em nível alto quanto baixo, e retorna a duração desse pulso.</p>
<p>Sintaxe:</p>
<pre><span style="color: #800080;"><strong>pulseIn(pino, valor)</strong></span></pre>
<p>ou</p>
<pre><span style="color: #800080;"><strong>pulseIn(pino, valor, timeout)</strong></span></pre>
<p>Parâmetros:</p>
<ul>
<li>pino &#8211; número do pino a partir de onde será lido o pulso</li>
<li>valor &#8211; tipo de pulso que será lido: HIGH (nível alto) ou LOW (nível baixo)</li>
<li>timeout &#8211; parâmetro opcional, indica o número de microssegundos a esperar até que o pulso se inicie; o padrão é um segundo</li>
</ul>
<p>Por exemplo, se valor for estabelecido como HIGH (nível alto), a função espera o valor do pino ir a alto, começa a contar o tempo (temporização), e então espera o pino ir a nível baixo (LOW) para parar a contagem de tempo. Desta forma é retornada a duração do pulso recebido em microssegundos.<br />
 Caso nenhum pulso seja detectado, retorna o valor 0.<br />
 Essa função opera melhor com pulsos entre 10 μs e 3 minutos de duração; pulsos mais longos podem induzir erros de leitura.</p>
<p><strong>Exemplo:</strong><br />
 Queremos determinar a duração de um pulso aplicado ao pino 10 do Arduino:</p>
<pre><strong><span style="color: #ff0000;">int pino = 10;</span></strong>
<strong><span style="color: #ff0000;">unsigned long duracao;</span></strong>
<strong><span style="color: #ff0000;">void setup()</span></strong>
<strong><span style="color: #ff0000;">{</span></strong>
<strong><span style="color: #ff0000;">  pinMode(pino, INPUT);</span></strong>
<strong><span style="color: #ff0000;">  Serial.begin(9600);</span></strong>
<strong><span style="color: #ff0000;">}</span></strong>
<strong><span style="color: #ff0000;">void loop()</span></strong>
<strong><span style="color: #ff0000;">{</span></strong>
<strong><span style="color: #ff0000;">  duracao = pulseIn(pino, HIGH);</span></strong>
<strong><span style="color: #ff0000;">  Serial.println(duracao);</span></strong>
<strong><span style="color: #ff0000;">}</span></strong></pre>
</td>
</tr>
</tbody>
</table>
<p>É isso aí! Nos próximos projetos vamos explorar mais o sensor de distância HC-SR04. Até! </p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/usando-um-sensor-ultrassonico-hc-sr04-com-arduino/">Usando um Sensor Ultrassônico de Distância HC-SR04 com Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/usando-um-sensor-ultrassonico-hc-sr04-com-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Como usar um Shield Ethernet no Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-shield-ethernet-no-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-shield-ethernet-no-arduino/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 19 Jan 2018 20:54:49 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Maker]]></category>
		<category><![CDATA[Redes]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=11249</guid>

					<description><![CDATA[<p>Usando um Shield Ethernet no Arduino Uma das formas mais importantes de comunicação disponíveis com o Arduino é o padrão Ethernet. Trata-se de um protocolo de comunicação em redes que permite que dispositivos variados, como PCs, smartphones, roteadores, arduinos, etc., se comuniquem por meio do envio e recebimento de pacotes (frames / quadros, para ser mais exato), que são fluxos de dados organizados. Cada dispositivo em uma rede possui seu próprio endereço IP, que é um endereço numérico que permite identificar cada dispositivo e dessa forma, se comunicarem entre si usando diferentes protocolos (padrões de software). Shield Ethernet No Arduino é bastante simples realizar essa comunicação via padrão Ethernet, com o uso de um Shield Ethernet e sua biblioteca correspondente. A imagem a seguir mostra um shield ethernet típico: O Shield Ethernet na plataforma Arduino utiliza o chip WIZnet W5100 Ethernet, que fornece a pilha de rede TCP/IP, habilitando o dispositivo a se comunicar através de uma rede comum, tanto local quanto via Internet. Esse shield possui um conector para cabo de rede RJ45, e sua taxa de transferência máxima é de 100 Mbps, podendo operar também em 10 Mbps (10/100). Além disso, ele traz um slot para cartão microSD, que [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-shield-ethernet-no-arduino/">Como usar um Shield Ethernet no Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Usando um Shield Ethernet no Arduino</h2>
<p>Uma das formas mais importantes de comunicação disponíveis com o Arduino é o padrão Ethernet. Trata-se de um protocolo de comunicação em redes que permite que dispositivos variados, como PCs, smartphones, roteadores, arduinos, etc., se comuniquem por meio do envio e recebimento de pacotes (frames / quadros, para ser mais exato), que são fluxos de dados organizados.</p>
<p>Cada dispositivo em uma rede possui seu próprio endereço IP, que é um endereço numérico que permite identificar cada dispositivo e dessa forma, se comunicarem entre si usando diferentes protocolos (padrões de software).</p>
<h3>Shield Ethernet</h3>
<p>No Arduino é bastante simples realizar essa comunicação via padrão Ethernet, com o uso de um Shield Ethernet e sua biblioteca correspondente. A imagem a seguir mostra um shield ethernet típico:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-11250" title="Shield Ethernet no Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/01/Arduino-Ethernet-Shield.jpg" alt="Shield Ethernet no Arduino" width="300" height="213" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/01/Arduino-Ethernet-Shield.jpg 450w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/01/Arduino-Ethernet-Shield-420x299.jpg 420w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>O Shield Ethernet na plataforma Arduino utiliza o chip WIZnet W5100 Ethernet, que fornece a pilha de rede TCP/IP, habilitando o dispositivo a se comunicar através de uma rede comum, tanto local quanto via Internet.</p>
<p>Esse shield possui um conector para cabo de rede RJ45, e sua taxa de transferência máxima é de 100 Mbps, podendo operar também em 10 Mbps (10/100).</p>
<p>Além disso, ele traz um slot para cartão microSD, que permite ler e armazenar dados no próprio shield (obviamente inserindo um cartão SD e executando a biblioteca SD).</p>
<p>Um shield ethernet realiza, basicamente, o papel que uma placa de rede executa em um computador comum. Antes de mostrarmos como funciona e como configurar esse shield, vamos discutir alguns termos relacionados a redes de computadores, que serão importantes no entendimento do processo de comunicação do Arduino.</p>
<h3>Conceitos básicos de Redes</h3>
<ul>
<li>Ethernet: Tecnologia de rede que permite a dispositivos enviarem dados entre si por meio de uma rede com fios, por meio de um endereço físico (identificação de hardware).</li>
<li><a href="http://www.bosontreinamentos.com.br/redes-computadores/o-que-e-um-endereco-mac-mac-address/" target="_blank" rel="noopener noreferrer">Endereço MAC</a>: Media Access Control / Controle de Acesso ao Meio, trata-se de um identificador (endereço) único que é atribuído aos dispositivos de rede, de modo que cada dispositivo seja identificado de forma única e possam assim se comunicar com outros dispositivos. Cada shield Ethernet para Arduino possui seu próprio endereço MAC, que nunca se repete.</li>
<li>Protocolo de Rede: Um protocolo é uma linguagem de comunicação padronizada que permite que dispositivos troquem informações entre si (&#8220;conversem&#8221;). Para que essa comunicação seja possível, os dispositivos devem usar o mesmo protocolo, como se fosse a mesma &#8220;linguagem&#8221;. Um protocolo muito comum é o protocolo HTTP, que permite configurar um servidor Web (que podemos fazer com Arduino!).</li>
<li>TCP/IP: Trata-se de uma pilha ou suíte de protocolos específica, ou seja, um grupo de protocolos que trabalham em conjunto para fornecer conectividade de rede a dispositivos. TCP significa &#8220;Protocolo de Controle de Transmissão&#8221;, e IP significa &#8220;Protocolo de Internet&#8221;, e esses dois são os protocolos mais importantes da pilha, que na verdade contém mais de 50 protocolos diferentes, cada um com uma função bem definida.</li>
<li>Endereço IP: O IP é um endereço lógico, ou seja, não associado fisicamente a um dispositivo, mas que permite que os dispositivos de identifiquem em uma rede como a Internet.</li>
<li>Gateway: Um gateway, também chamado de Gateway Padrão, é basicamente o endereço IP da porta de um roteador conectada à rede interna, a qual permite o roteamento (encaminhamento) dos pacotes para uma outra rede, geralmente a Internet.</li>
</ul>
<div id="attachment_11316" style="width: 760px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11316" class="wp-image-11316" title="Shield Ethernet encaixado no Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/01/shield-ethernet-encaixado-arduino-Uno.jpg" alt="Shield Ethernet encaixado no Arduino" width="750" height="575" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/01/shield-ethernet-encaixado-arduino-Uno.jpg 900w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/01/shield-ethernet-encaixado-arduino-Uno-420x322.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/01/shield-ethernet-encaixado-arduino-Uno-768x589.jpg 768w" sizes="auto, (max-width: 750px) 100vw, 750px" /><p id="caption-attachment-11316" class="wp-caption-text">Shield Ethernet encaixado no Arduino</p></div>
<h3>A Biblioteca Ethernet</h3>
<p>A biblioteca Ethernet, necessária para que seja possível utilizar o shield correspondente, é distribuída juntamente com o IDE do Arduino e permite a comunicação do Arduino com uma rede.</p>
<p>A tabela a seguir fornece uma descrição simplificada de algumas das funções mais comuns da biblioteca Ethernet, pertencentes às classes <strong>Ethernet</strong>, <strong>EthernetClient, </strong><strong>EthernetServer</strong> e <strong>EthernetUDP</strong>:</p>
<table style="height: 2033px; width: 600px;">
<tbody>
<tr style="height: 24px;">
<td style="width: 212px; text-align: center; height: 24px;"><strong>Função</strong></td>
<td style="width: 461px; text-align: center; height: 24px;"><strong>Descrição da Função</strong></td>
</tr>
<tr style="height: 128px;">
<td style="width: 212px; height: 128px;">
<pre>Ethernet.begin(mac)
Ethernet.begin(mac, ip)
Ethernet.begin(mac, ip, gateway)
Ethernet.begin(mac, ip, gateway,subnet)</pre>
</td>
<td style="width: 461px; height: 128px;">Função para inicialização da biblioteca, usando MAC, e opcionalmente IP e/ou gateway e máscara de sub-rede.</td>
</tr>
<tr style="height: 56px;">
<td style="width: 212px; height: 56px;">
<pre>Server(port)</pre>
</td>
<td style="width: 461px; height: 56px;">Permite criar um servidor que irá escutar em uma porta de comunicações específica.</td>
</tr>
<tr style="height: 56px;">
<td style="width: 212px; height: 56px;">
<pre>Server.begin()</pre>
</td>
<td style="width: 461px; height: 56px;">Função para inicializar o servidor, de modo a escutar as mensagens que chegam</td>
</tr>
<tr style="height: 56px;">
<td style="width: 212px; height: 56px;">
<pre>Server.write()</pre>
</td>
<td style="width: 461px; height: 56px;">Permite enviar dados para os dispositivos clientes conectados</td>
</tr>
<tr style="height: 56px;">
<td style="width: 212px; height: 56px;">
<pre>Server.available()</pre>
</td>
<td style="width: 461px; height: 56px;">Retorna um cliente, caso ele possua dados prontos para envio</td>
</tr>
<tr style="height: 120px;">
<td style="width: 212px; height: 120px;">
<pre>Server.print()</pre>
</td>
<td style="width: 461px; height: 120px;">Imprime dados para todos os clientes disponíveis. Esses dados são impressos na forma de uma sequência de dígitos ASCII. Por exemplo, o número 753 é retornado como os caracteres &#8220;7&#8221;, &#8220;5&#8221; e &#8220;3&#8221;.</td>
</tr>
<tr style="height: 120px;">
<td style="width: 212px; height: 120px;">
<pre>Server.println()</pre>
</td>
<td style="width: 461px; height: 120px;">Idem à função Server.print(), porém mudando de linha no final da mensagem</td>
</tr>
<tr style="height: 72px;">
<td style="width: 212px; height: 72px;">
<pre>Client(ip. porta)</pre>
</td>
<td style="width: 461px; height: 72px;">Permite criar um cliente que poderá se conectar ao endereço IP e à porta passadas à função.</td>
</tr>
<tr style="height: 24.4531px;">
<td style="width: 212px; height: 24.4531px;">
<pre>Client.connect()</pre>
</td>
<td style="width: 461px; height: 24.4531px;">Inicia a conexão com o cliente</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>Client.connected()</pre>
</td>
<td style="width: 461px; height: 48px;">Verifica se o cliente está ou não conectado ao servidor</td>
</tr>
<tr style="height: 24px;">
<td style="width: 212px; height: 24px;">
<pre>Client.write()</pre>
</td>
<td style="width: 461px; height: 24px;">Permite gravar dados no servidor</td>
</tr>
<tr style="height: 96px;">
<td style="width: 212px; height: 96px;">
<pre>Client.print()</pre>
</td>
<td style="width: 461px; height: 96px;">Imprime dados para o servidor. Esses dados são impressos na forma de uma sequência de dígitos ASCII. Por exemplo, o número 753 é retornado como os caracteres &#8220;7&#8221;, &#8220;5&#8221; e &#8220;3&#8221;.</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>Client.println()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Idem Client.print(), porém mudando de linha no final da mensagem</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>Client.available()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Retorna o número de bytes que estão disponíveis para serem lidos, enviados a partir do servidor.</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>Client.read()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Lê o próximo byte recebido do servidor</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>Client.flush()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Limpa todos os bytes escritos para o cliente, porém ainda não lidos</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>Client.stop()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Desconecta o cliente do servidor.</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>EthernetUDP.begin(port)</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Inicializa o objeto UDP, especificando a porta a ser utilizada</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>EthernetUDP.read(packetBuffer,
MaxSize)</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Lê os pacotes UDP de um buffer</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>EthernetUDP.write(mensagem)</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Envia uma mensagem UDP para a conexão remota</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>EthernetUDP.beginPacket(ip. port)</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Executado antes de enviar uma mensagem, para especificar o endereço IP e a porta de destino</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>EthernetUDP.endPacket()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Função invocada após o envio da mensagem, para terminar a transmissão</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>EthernetUDP.parsePacket()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Verifica se existe mensagem para ser lida</p>
</td>
</tr>
<tr style="height: 48px;">
<td style="width: 212px; height: 48px;">
<pre>Ethernet.available()</pre>
</td>
<td style="width: 461px; height: 48px;">
<p>Retorna a quantidade de dados que foi recebida e também a que está disponível para ser lida na sequência.</p>
</td>
</tr>
</tbody>
</table>
<p>Nas próximas partes desse tutorial, vamos mostrar como utilizar o shield Ethernet e as bibliotecas listadas acima para criar diversas aplicações de rede com o Arduino, como por exemplo um servidor Web e um cliente de rede local.</p>
<h3>Próximo: Projeto &#8211; <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/a-classe-ethernetserver-usando-o-arduino-como-um-servidor-de-rede/">Criando um Servidor Web com Arduino e um Shield Ethernet</a></h3>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-shield-ethernet-no-arduino/">Como usar um Shield Ethernet no Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-shield-ethernet-no-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Tocando uma melodia com o Arduino: Ode à Alegria, de Beethoven</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-uma-melodia-com-o-arduino-ode-a-alegria-de-beethoven/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-uma-melodia-com-o-arduino-ode-a-alegria-de-beethoven/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 30 Sep 2017 16:18:33 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Maker]]></category>
		<category><![CDATA[Música]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=10769</guid>

					<description><![CDATA[<p>Tocando uma melodia com o Arduino: Ode à Alegria, de Beethoven Anteriormente mostramos como tocar notas musicais específicas usando o Arduino, inclusive com a reprodução de uma escala musical pré-determinada. Neste novo projeto, vamos aplicar essas técnicas para reproduzir uma melodia bastante conhecida, a Ode à Alegria, parte da Nona Sinfonia de Beethoven. É uma melodia simples, portanto indicada para esta tarefa. Posteriormente iremos alterar nosso código para tocar músicas mais complexas e mais longas. A figura abaixo mostra a partitura da melodia que iremos reproduzir: Circuito A figura a seguir mostra o circuito a ser utilizado, que é o mesmo que empregamos no projeto anterior, &#8220;tocando uma escala musical com Arduino&#8220;: Precisaremos apenas de um Arduino (qualquer versão), um alto-falante ou buzzer, e um resistor de 150Ω, além de fios conectores e uma matriz de contatos pequena. Código Neste programa precisamos incluir o arquivo de cabeçalho pitches.h, o qual já utilizamos em um projeto anterior, e que contém o mapeamento das frequências das notas musicais para um nome de constante. Porém, aqui, eu modifiquei o conteúdo do arquivo, eliminando a palavra &#8220;NOTE&#8221; que aparece em cada nome de nota, e deixando apenas o padrão _XY, com X sendo o [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-uma-melodia-com-o-arduino-ode-a-alegria-de-beethoven/">Tocando uma melodia com o Arduino: Ode à Alegria, de Beethoven</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tocando uma melodia com o Arduino: Ode à Alegria, de Beethoven</h2>
<p>Anteriormente mostramos <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/tocando-notas-musicais-com-o-arduino/" target="_blank" rel="noopener noreferrer">como tocar notas musicais específicas usando o Arduino</a>, inclusive com a reprodução de uma escala musical pré-determinada. Neste novo projeto, vamos aplicar essas técnicas para reproduzir uma melodia bastante conhecida, a Ode à Alegria, parte da Nona Sinfonia de Beethoven. É uma melodia simples, portanto indicada para esta tarefa. Posteriormente iremos alterar nosso código para tocar músicas mais complexas e mais longas.</p>
<p>A figura abaixo mostra a partitura da melodia que iremos reproduzir:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10846 size-full" title="Ode à Alegria, de Beethoven, no Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/Ode-à-Alegria-Beethove-Partitura-e1526222190327.gif" alt="Ode à Alegria, de Beethoven, no Arduino" width="650" height="464" /></p>
<h3>Circuito</h3>
<p>A figura a seguir mostra o circuito a ser utilizado, que é o mesmo que empregamos no projeto anterior, &#8220;<a href="http://www.bosontreinamentos.com.br/eletronica/arduino/tocando-notas-musicais-com-o-arduino/" target="_blank" rel="noopener noreferrer">tocando uma escala musical com Arduino</a>&#8220;:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10757" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocar-escala-musical-arduino.jpg" alt="Tocar notas musicais no Arduino" width="707" height="522" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocar-escala-musical-arduino.jpg 707w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocar-escala-musical-arduino-420x310.jpg 420w" sizes="auto, (max-width: 707px) 100vw, 707px" /></p>
<p>Precisaremos apenas de um Arduino (qualquer versão), um alto-falante ou buzzer, e um resistor de 150Ω, além de fios conectores e uma matriz de contatos pequena.</p>
<h3>Código</h3>
<p>Neste programa precisamos incluir o arquivo de cabeçalho <strong>pitches.h</strong>, o qual já utilizamos em um projeto anterior, e que contém o mapeamento das frequências das notas musicais para um nome de constante. Porém, aqui, eu modifiquei o conteúdo do arquivo, eliminando a palavra &#8220;<strong>NOTE</strong>&#8221; que aparece em cada nome de nota, e deixando apenas o padrão _XY, com X sendo o nome da nota em notação musical, e Y o número da oitava. Assim por exemplo, a nota <strong>NOTE_C4</strong> será representada apenas por <strong>_C4</strong>. Fiz isso para simplificar  e diminuir o tamanho do código, pois ele terá muitas dezenas de notas, e pode ficar confuso.</p>
<p>Vamos ao código da aplicação:</p>
<pre><span style="color: #ff0000;"><strong>#include "pitches.h"</strong></span>
<span style="color: #ff0000;"><strong>int falante = 8;</strong></span>
<span style="color: #ff0000;"><strong>float bpm = 80;</strong></span>
<span style="color: #ff0000;"><strong>int T;</strong></span>
<span style="color: #ff0000;"><strong>int minima, seminima, seminimaAumentada, colcheia;</strong></span>
<span style="color: #ff0000;"><strong>int nota[] = {</strong></span>
<span style="color: #ff0000;"><strong> _B4, _B4, _C5, _D5, _D5, _C5, _B4, _A4, _G4, _G4, _A4, _B4, _B4, _A4, _A4,</strong></span>
<span style="color: #ff0000;"><strong> _B4, _B4, _C5, _D5, _D5, _C5, _B4, _A4, _G4, _G4, _A4, _B4, _A4, _G4, _G4,</strong></span>
<span style="color: #ff0000;"><strong> _A4, _A4, _B4, _G4, _A4, _B4, _C5, _B4, _G4, _A4, _B4, _C5, _B4, _A4, _G4, _A4, _D4,</strong></span>
<span style="color: #ff0000;"><strong> _B4, _B4, _C5, _D5, _D5, _C5, _B4, _A4, _G4, _G4, _A4, _B4, _A4, _G4, _G4</strong></span>
<span style="color: #ff0000;"><strong>};

</strong></span><strong><span style="color: #339966;">/* Tempos: </span></strong>
<strong><span style="color: #339966;">1 = colcheia</span></strong>
<strong><span style="color: #339966;">2 = seminima</span></strong>
<strong><span style="color: #339966;">3 = seminima + colcheia</span></strong>
<strong><span style="color: #339966;">4 = minima</span></strong>
<strong><span style="color: #339966;">*/
</span></strong>
<span style="color: #ff0000;"><strong>int tempo[] ={</strong></span>
<span style="color: #ff0000;"><strong> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 4,</strong></span>
<span style="color: #ff0000;"><strong> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 4,</strong></span>
<span style="color: #ff0000;"><strong> 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2,</strong></span>
<span style="color: #ff0000;"><strong> 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 4</strong></span>
<span style="color: #ff0000;"><strong>};
</strong></span>
<span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #ff0000;"><strong> minima = round((1 / (bpm / 60)) * 1000 * 2);</strong></span>
<span style="color: #ff0000;"><strong> seminima = round((1 / (bpm / 60)) * 1000);</strong></span>
<span style="color: #ff0000;"><strong> seminimaAumentada = round((1 / (bpm / 60)) * 1500);</strong></span>
<span style="color: #ff0000;"><strong> colcheia = round((1 / (bpm / 60)) * 500);</strong></span>
<span style="color: #339966;"><strong> // Serial.begin(9600); // para debug</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span>
<span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #339966;"><strong> // Tocar cada nota durante o tempo especificado:</strong></span>
<span style="color: #ff0000;"><strong> for (int i = 0; i &lt; 62; i++) {</strong></span>
<span style="color: #ff0000;"><strong>   switch (tempo[i]) {</strong></span>
<span style="color: #ff0000;"><strong>   case 1:</strong></span>
<span style="color: #ff0000;"><strong>     T = colcheia;</strong></span>
<span style="color: #ff0000;"><strong>     break;</strong></span>
<span style="color: #ff0000;"><strong>   case 2:</strong></span>
<span style="color: #ff0000;"><strong>     T = seminima;</strong></span>
<span style="color: #ff0000;"><strong>     break;</strong></span>
<span style="color: #ff0000;"><strong>   case 3:</strong></span>
<span style="color: #ff0000;"><strong>     T = seminimaAumentada;</strong></span>
<span style="color: #ff0000;"><strong>     break;</strong></span>
<span style="color: #ff0000;"><strong>   case 4:</strong></span>
<span style="color: #ff0000;"><strong>     T = minima; 
</strong></span>   <strong><span style="color: #ff0000;">  break;</span></strong>
<span style="color: #ff0000;"><strong> }</strong></span>
<span style="color: #339966;"><strong> /* Visualizando os tempos (para debug):</strong></span>
<span style="color: #339966;"><strong> Serial.println(minima);</strong></span>
<span style="color: #339966;"><strong> Serial.println(seminima);</strong></span>
<span style="color: #339966;"><strong> Serial.println(seminimaAumentada);</strong></span>
<span style="color: #339966;"><strong> Serial.println(colcheia);</strong></span>
<span style="color: #339966;"><strong> */</strong></span>
<span style="color: #ff0000;"><strong> tone(falante, nota[i], T);</strong></span>
<span style="color: #ff0000;"><strong> delay(T);</strong></span>
<span style="color: #ff0000;"><strong> }</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<h3>Explicando o código</h3>
<p>Neste código usaremos as seguintes variáveis:</p>
<ul>
<li><strong>falante</strong> &#8211; Variável para armazenar o número do pino onde está conectado o alto-falante ou buzzer. </li>
<li><strong>bpm</strong> &#8211; Nesta variável vamos armazenar um número que indicará o andamento da música (sua &#8220;velocidade&#8221;). bpm significa &#8220;batidas por minuto&#8221;.</li>
<li><strong>T</strong> &#8211; A variável T receberá o valor do tempo que deve ser aplicado a cada nota durante sua execução (duração da nota).</li>
<li><strong>minima, seminima, seminimaAumentada, colcheia</strong> &#8211; Essas variáveis determinam o valor da duração para cada tipo de nota, pois algumas notas possuem duração mais longa do que outras.</li>
</ul>
<p>Também criaremos dois arrays (vetores) para armazenar as notas e seus respectivos tempos de duração:</p>
<ul>
<li>O array <strong>nota[]</strong> contém as notas da melodia a ser reproduzida, na sequência correta, como fizemos no artigo sobre escalas musicais no Arduino.</li>
<li>O array <strong>tempo[]</strong> armazenará um número que será usado para calcular a duração de cada nota tocada, também na sequência correta de reprodução da melodia. Assim, a primeira posição deste array possui a duração da nota na primeira posição no array nota[], e assim sucessivamente.</li>
</ul>
<p>No array tempo[] utilizamos números para representar as durações das notas tocadas. Em nosso código, o número 1 simboliza uma colcheia, o valor 2 representa uma seminima, o valor 3 uma semínima aumentada ( 1 tempo e 1/2), e o valor 4 representa uma mínima (2 tempos).</p>
<p>Na rotina de setup é calculado o valor de tempo em milissegundos de cada tipo de nota, de acordo com o andamento (variável bpm). A duração de cada nota depende do andamento da música, que é dado pelo valor armazenado em bpm. Assim, valores maiores de bpm farão a música ser executada mais rapidamente, e vice-versa.</p>
<p>Na rotina de loop usamos uma estrutura de decisão Switch / Case para determinar a duração a ser aplicada a cada nota tocada, de acordo com o valor armazenado no array tempo[] e com a duração de cada tipo de nota, calculada na rotina de setup.</p>
<p>E, finalmente, chamamos a função <strong>tone()</strong> para executar a nota na posição <strong>i</strong> do array <strong>nota[]</strong>, usando a duração <strong>T</strong> determinada, e a função <strong>delay()</strong> na sequência faz o Arduino aguardar a nota ser executada antes de reproduzir a próxima nota da música.</p>
<p>Após carregar o código, basta esperar alguns instantes e a melodia da Ode à Alegria (Ode to Joy) de Beethoven será reproduzida no alto-falante.</p>
<p>É isso aí!</p>
<p>Até a próxima!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-uma-melodia-com-o-arduino-ode-a-alegria-de-beethoven/">Tocando uma melodia com o Arduino: Ode à Alegria, de Beethoven</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-uma-melodia-com-o-arduino-ode-a-alegria-de-beethoven/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Tocando notas musicais com o Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-notas-musicais-com-o-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-notas-musicais-com-o-arduino/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 15 Sep 2017 19:20:42 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Maker]]></category>
		<category><![CDATA[Música]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=10742</guid>

					<description><![CDATA[<p>Como tocar notas musicais com o Arduino Em um projeto anterior mostramos como tocar sons utilizando o Arduino. Agora, vamos mostrar como selecionar as frequências a serem reproduzidas para que sejam tocadas notas musicais com Arduino específicas &#8211; assim, poderemos criar sequências melódicas e tocar músicas simples. Ao reproduzirmos sequências de música dessa forma com o Arduino, é interessante o uso de um arquivo de definição que mapeie as diversas frequências sonoras para os nomes das notas musicais. Assim, é muito mais fácil escrever as melodias a serem reproduzidas, e isso também torna o código mais limpo e fácil de manter. As notas musicais são representadas por letras, que representam o tom (frequência) de cada nota. Assim, para as notas de Dó a Si usamos as seguintes letras como representação: C = Dó D = Ré E = Mi F = Fá G = Sol A = Lá B = Si Também podemos ter algumas notas intermediárias, meio tom acima (&#8220;sustenido&#8221;, representado por #) ou meio tom abaixo (&#8220;bemol&#8221;, representado pelo símbolo ♭). Por exemplo, um som de frequência intermediária entre um dó e um ré pode ser representado por C# (dó sustenido) ou ainda por D♭ (ré bemol). Na prática, pode [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-notas-musicais-com-o-arduino/">Tocando notas musicais com o Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como tocar notas musicais com o Arduino</h2>
<p>Em um projeto anterior mostramos <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/tocando-sons-baseados-em-entrada-de-sensor-de-luz-com-arduino/" target="_blank" rel="noopener noreferrer">como tocar sons utilizando o Arduino</a>. Agora, vamos mostrar como selecionar as frequências a serem reproduzidas para que sejam tocadas notas musicais com Arduino específicas &#8211; assim, poderemos criar sequências melódicas e tocar músicas simples.</p>
<p>Ao reproduzirmos sequências de música dessa forma com o Arduino, é interessante o uso de um <strong><em>arquivo de definição</em></strong> que mapeie as diversas frequências sonoras para os nomes das notas musicais. Assim, é muito mais fácil escrever as melodias a serem reproduzidas, e isso também torna o código mais limpo e fácil de manter.</p>
<p>As notas musicais são representadas por letras, que representam o tom (frequência) de cada nota. Assim, para as notas de Dó a Si usamos as seguintes letras como representação:</p>
<ul>
<li>C = Dó</li>
<li>D = Ré</li>
<li>E = Mi</li>
<li>F = Fá</li>
<li>G = Sol</li>
<li>A = Lá</li>
<li>B = Si</li>
</ul>
<p>Também podemos ter algumas notas intermediárias, meio tom acima (&#8220;sustenido&#8221;, representado por <strong>#</strong>) ou meio tom abaixo (&#8220;bemol&#8221;, representado pelo símbolo<strong> ♭</strong>). Por exemplo, um som de frequência intermediária entre um dó e um ré pode ser representado por C# (dó sustenido) ou ainda por D♭ (ré bemol). Na prática, pode existir uma minúscula diferença entre essas notas, mas para todos os efeitos vamos considerá-las como iguais.</p>
<p>O IDE do Arduino inclui um arquivo de cabeçalho, de nome &#8220;<strong>pitches.h</strong>&#8220;,  que efetua o mapeamento das frequências (em Hertz) com as notas musicais correspondentes, de modo que não é necessário criar essa mapeamento &#8211; devemos apenas entender como o arquivo é estruturado e como utilizá-lo.</p>
<p>Para incluir o arquivo pitches.h em um projeto devemos copiá-lo para a pasta do sketch, fechar o IDE e abri-lo de novo, e então incluir o seguinte comando no início de seu sketch:</p>
<pre><span style="color: #ff0000;"><strong>#include "pitches.h"</strong></span></pre>
<p>Você pode baixar o <a href="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/pitches.h">arquivo pitches.h clicando aqui</a>.</p>
<p>Ao copiarmos o arquivo e incluirmos essa linha de comandos em um sketch, será aberto uma nova aba no IDE, ao lado do arquivo principal de código, como podemos ver na ilustração a seguir:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10746 size-full" title="Arquivo de definição de tons no Arduino - pitches.h" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/pitches-arduino-notas-musicais.png" alt="Arquivo de definição de tons no Arduino - pitches.h" width="583" height="433" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/pitches-arduino-notas-musicais.png 583w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/pitches-arduino-notas-musicais-420x312.png 420w" sizes="auto, (max-width: 583px) 100vw, 583px" /></p>
<p>E a seguir temos o conteúdo completo do arquivo pitches.h, que é bastante simples, consistindo na definição de uma constante para cada nota musical, seguida do valor de sua frequência sonora:</p>
<pre><span style="color: #339966;">/*************************************************</span>
<span style="color: #339966;"> * Public Constants</span>
<span style="color: #339966;"> *************************************************/</span></pre>
<pre><span style="color: #ff0000;"><strong>#define NOTE_B0 31</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C1 33</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS1 35</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D1 37</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS1 39</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_E1 41</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_F1 44</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_FS1 46</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_G1 49</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_GS1 52</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_A1 55</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_AS1 58</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_B1 62</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C2 65</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS2 69</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D2 73</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS2 78</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_E2 82</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_F2 87</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_FS2 93</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_G2 98</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_GS2 104</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_A2 110</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_AS2 117</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_B2 123</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C3 131</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS3 139</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D3 147</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS3 156</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_E3 165</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_F3 175</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_FS3 185</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_G3 196</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_GS3 208</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_A3 220</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_AS3 233</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_B3 247</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C4 262</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS4 277</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D4 294</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS4 311</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_E4 330</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_F4 349</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_FS4 370</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_G4 392</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_GS4 415</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_A4 440</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_AS4 466</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_B4 494</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C5 523</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS5 554</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D5 587</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS5 622</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_E5 659</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_F5 698</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_FS5 740</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_G5 784</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_GS5 831</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_A5 880</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_AS5 932</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_B5 988</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C6 1047</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS6 1109</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D6 1175</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS6 1245</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_E6 1319</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_F6 1397</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_FS6 1480</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_G6 1568</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_GS6 1661</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_A6 1760</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_AS6 1865</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_B6 1976</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C7 2093</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS7 2217</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D7 2349</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS7 2489</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_E7 2637</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_F7 2794</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_FS7 2960</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_G7 3136</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_GS7 3322</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_A7 3520</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_AS7 3729</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_B7 3951</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_C8 4186</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_CS8 4435</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_D8 4699</strong></span>
<span style="color: #ff0000;"><strong>#define NOTE_DS8 4978</strong></span></pre>
<p>Por exemplo, a nota Lá central, que possui uma frequência de 440 Hz, é definida no arquivo com a linha:</p>
<pre><span style="color: #ff0000;"><strong>#define NOTE_A4 440</strong></span></pre>
<p>Desta forma, sempre que quisermos reproduzir essa nota específica, podemos usar a constante de nome NOTE_A4 no código. O número que vem logo após o nome da nota (&#8220;4&#8221;, no caso) se refere à oitava da nota reproduzida &#8211; podemos reproduzir sons até a 8ª oitava usando esse arquivo de definições.</p>
<p>Podemos também realizar alterações no arquivo, para incluir notas de frequências mais altas ou ainda trocar os nomes das constantes, se assim o desejarmos.</p>
<h3>O Circuito</h3>
<p>Para exemplificar a reprodução das notas, vamos usar um circuito bem simples, que consiste em um pequeno alto-falante ou buzzer conectado ao Arduino, como podemos ver no esquemático a seguir:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10757" title="Tocar notas musicais no Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocar-escala-musical-arduino.jpg" alt="Tocar notas musicais no Arduino" width="650" height="480" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocar-escala-musical-arduino.jpg 707w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocar-escala-musical-arduino-420x310.jpg 420w" sizes="auto, (max-width: 650px) 100vw, 650px" /></p>
<p>Este circuito consiste apenas em um Arduino, um alto-falante e um resistor. O resistor, em série com o alto-falante, é muito importante para limitar a corrente que circulará no circuito, pois os pinos do Arduino só podem fornecer no máximo 40 mA, e se uma corrente maior do que isso for exigida, poderá ocasionar danos ao seu microcontrolador.</p>
<p>O valor do resistor pode ser calculado usando-se a Lei de Ohm. Sabemos que R = U / I, sendo que o valor da tensão fornecida pelo Arduino é de <strong>5V</strong>, e a corrente máxima, como citado, é de <strong>40mA</strong>. Portando, o valor mínimo do resistor deverá ser:</p>
<pre style="text-align: center;"><strong>R = 5 / 0,04 = 125Ω</strong></pre>
<p>Como o alto-falante possui resistência interna, geralmente de 8Ω, então o resistor em série precisará ter, na verdade, 125Ω &#8211; 8Ω = 117Ω. Este valor não existe comercialmente, de modo que teremos de usar o valor mais próximo encontrado no mercado, que é de <strong>150Ω</strong>.</p>
<h3>Tocando as notas musicais em sequência</h3>
<p>Vamos agora criar uma pequena aplicação que permita reproduzir notas selecionadas em sequência. Não vamos prestar atenção ao tempo das notas no momento, pois isso será abordado em nosso próximo tutorial. Usaremos a <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/arduino-conhecendo-as-funcoes-tone-e-notone/" target="_blank" rel="noopener noreferrer">função tone()</a> para reproduzir as notas desejadas.</p>
<p>Suponha que você queira tocar as seguintes notas no Arduino, nesta ordem:</p>
<p style="text-align: center;"><strong>C D E F G A B C</strong></p>
<p>Ou seja, uma escala de uma oitava de dó a dó. Para executá-la, basta escolher a oitava desejada (altura do som) e então usar os nomes das constantes definidas no arquivo de cabeçalho para reproduzi-las.</p>
<p>Digite o código a seguir em seu programa principal para tocar essa escala sequencialmente:</p>
<pre><span style="color: #ff0000;"><strong>#include "pitches.h"

int falante = 7;</strong></span>
<strong><span style="color: #ff0000;">int tempo = 500;
</span><span style="color: #339966;">// Array com as notas na ordem em que devem ser tocadas:</span></strong>
<span style="color: #ff0000;"><strong>int notas[] = {</strong></span>
<span style="color: #ff0000;"><strong> NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, </strong></span>
<span style="color: #ff0000;"><strong> NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5 </strong></span>
<span style="color: #ff0000;"><strong>};
</strong></span>
<span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #339966;"><strong> // nada a fazer aqui</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span>
<span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #339966;"><strong> // Tocar cada nota do array durante o tempo especificado:</strong></span>
<span style="color: #ff0000;"><strong> for (int i = 0; i &lt; 8; i++) {</strong></span>
<span style="color: #ff0000;"><strong>   tone(falante, notas[i], tempo);</strong></span>
<span style="color: #ff0000;"><strong>   delay(tempo);</strong></span>
<span style="color: #ff0000;"><strong> }</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>Neste exemplo, criamos um array para armazenar as notas, de modo que para tocá-las na sequência basta iterar pelo array, executando o tom de cada uma de suas posições com a função <strong>tone()</strong>. Note que acrescentei uma chamada à função delay() dentro do laço for.</p>
<p>Essa chamada é para que haja tempo da função tone() terminar de tocar a nota passada a ela, pois como esa função pode ser executada em segundo plano, corremos o risco do laço for iterar e chamar a função tone() novamente, tocando outro som antes do som anterior ter finalizado, e assim cumulativamente até que o som tocado não seja mais inteligível.</p>
<p>A função delay() deve executar uma pausa com a mesma duração do som tocado.</p>
<p>Note também que o som gerado é uma onda quadrada, pois o Arduino não é capaz de gerar ondas sinusoidais, do tipo que ouvimos no mundo real. Por isso, o timbre do som irá lembrar aquelas melodias de videogames de 8 bits, dos anos 80.</p>
<p>Para gerar sons mais realistas precisamos de um circuito conversor digital-analógico (DAC), o qual está presente por padrão apenas no Arduino Due. Para outros modelos, será necessário construir o circuito &#8211; o que faremos em uma lição futura.</p>
<p>Você pode experimentar alterar as notas tocadas trocando-as ou acrescentando mais notas no array, lembrando sempre de ajustar o laço for de acordo, pois ele deve iterar pelo número de itens presentes no array. Caso queira acrescentar uma pausa (momento de silêncio), basta usar o valor 0 (zero) na posição desejada dentro do array.</p>
<p>É isso aí! No próximo tutorial vamos fazer o Arduino tocar uma música inteira, além de implementar um controle de volume simples em nosso circuito.</p>
<p>Até!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-notas-musicais-com-o-arduino/">Tocando notas musicais com o Arduino</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-notas-musicais-com-o-arduino/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Tocar sons no Arduino baseados em entrada de sensor de luz</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-sons-baseados-em-entrada-de-sensor-de-luz-com-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-sons-baseados-em-entrada-de-sensor-de-luz-com-arduino/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 12 Sep 2017 15:41:31 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Artes]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Maker]]></category>
		<category><![CDATA[Música]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=10703</guid>

					<description><![CDATA[<p>Tocar sons no Arduino baseados em entrada de sensor de luz Neste projetinho vamos fazer com que o Arduino produza sons em diferentes frequências, de acordo com valores medidos a partir de um sensor de luminosidade (LDR) conectado a uma entrada analógica. A ideia é que, de acordo com a intensidade da luz que incide sobre o sensor, seja gerado um sinal de uma frequência diferente, a ser reproduzido em um alto-falante pequeno ou buzzer, como uma espécie de Theremin, porém acionado por luz. Lista de Componentes: 1 Arduino Uno 1 resistor 4,7 kΩ 1 resistor 150 Ω 1 alto-falante ou buzzer 1 LDR (Light-Dependent Resistor) fios diversos matriz de contatos Circuito esquemático: Na figura a seguir podemos ver o esquemático do circuito que construiremos: Circuito na matriz de contatos: O circuito montado em uma matriz de contatos pode ser visto na ilustração a seguir: Código: Usaremos a função tone() do Arduino para gerar o sinal sonoro a ser reproduzido. Essa função recebe três parâmetros: pino de saída, frequência do tom e tempo de reprodução. Para saber mais sobre a função tone() leia nosso artigo sobre funções tone() e notone() no Arduino. Vamos ao código utilizado na programação do Arduino: [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-sons-baseados-em-entrada-de-sensor-de-luz-com-arduino/">Tocar sons no Arduino baseados em entrada de sensor de luz</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tocar sons no Arduino baseados em entrada de sensor de luz</h2>
<p>Neste projetinho vamos fazer com que o Arduino produza sons em diferentes frequências, de acordo com valores medidos a partir de um <a href="http://www.bosontreinamentos.com.br/eletronica/curso-de-eletronica/curso-de-eletronica-o-que-e-um-ldr-light-dependent-resistor/" target="_blank" rel="noopener noreferrer">sensor de luminosidade (LDR)</a> conectado a uma entrada analógica.</p>
<p>A ideia é que, de acordo com a intensidade da luz que incide sobre o sensor, seja gerado um sinal de uma frequência diferente, a ser reproduzido em um alto-falante pequeno ou buzzer, como uma espécie de <a href="https://pt.wikipedia.org/wiki/Teremim" target="_blank" rel="noopener">Theremin</a>, porém acionado por luz.</p>
<h3>Lista de Componentes:</h3>
<ul>
<li>1 Arduino Uno</li>
<li>1 resistor 4,7 kΩ</li>
<li>1 resistor 150 Ω</li>
<li>1 alto-falante ou buzzer</li>
<li>1 LDR (Light-Dependent Resistor)</li>
<li>fios diversos</li>
<li>matriz de contatos</li>
</ul>
<h3>Circuito esquemático:</h3>
<p>Na figura a seguir podemos ver o esquemático do circuito que construiremos:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10705 size-full" title="Circuito esquemático - tocar sons no Arduino com sensor de luz" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocando-sons-arduino-LDR-esquemático.jpg" alt="Circuito esquemático - tocar sons no Arduino com sensor de luz" width="700" height="430" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocando-sons-arduino-LDR-esquemático.jpg 700w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocando-sons-arduino-LDR-esquemático-420x258.jpg 420w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<h3>Circuito na matriz de contatos:</h3>
<p>O circuito montado em uma matriz de contatos pode ser visto na ilustração a seguir:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10704" title="Tocando sons no Arduino a partir de sensor LDR" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocando-sons-arduino-LDR.jpg" alt="Tocando sons no Arduino a partir de sensor LDR" width="700" height="516" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocando-sons-arduino-LDR.jpg 800w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocando-sons-arduino-LDR-420x310.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/tocando-sons-arduino-LDR-768x566.jpg 768w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<h2>Código:</h2>
<p>Usaremos a <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/arduino-conhecendo-as-funcoes-tone-e-notone/" target="_blank" rel="noopener noreferrer">função tone() </a>do Arduino para gerar o sinal sonoro a ser reproduzido. Essa função recebe três parâmetros: pino de saída, frequência do tom e tempo de reprodução. Para saber mais sobre a função tone() leia nosso artigo sobre <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/arduino-conhecendo-as-funcoes-tone-e-notone/" target="_blank" rel="noopener noreferrer">funções tone() e notone() no Arduino</a>.</p>
<p>Vamos ao código utilizado na programação do Arduino:</p>
<pre><span style="color: #ff0000;"><strong>int leitura;</strong></span>
<span style="color: #ff0000;"><strong>float tom;</strong></span>
<span style="color: #ff0000;"><strong>int altoFalante = 8;</strong></span>
<span style="color: #ff0000;"><strong>int tempo = 10;</strong></span>
<span style="color: #ff0000;"><strong>void setup() {</strong></span>
<span style="color: #339966;"><strong> // Serial.begin(9600);</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span>
 
<span style="color: #ff0000;"><strong>void loop() {</strong></span>
<span style="color: #339966;"><strong> // efetuar leitura do sensor:</strong></span>
<span style="color: #ff0000;"><strong> leitura = analogRead(A0);</strong></span>
<span style="color: #339966;"><strong> /*Serial.println(leitura);</strong></span>
<span style="color: #339966;"><strong> delay(60);*/</strong></span>
<span style="color: #339966;"><strong> // mapear o resultado da leitura do sensor para faixa de tons desejada:</strong></span>
<span style="color: #ff0000;"><strong> tom = map(leitura, 70, 1000, 30, 2500);</strong></span>
<span style="color: #339966;"><strong> // alterar o tom, tocando por 10 ms:</strong></span>
<span style="color: #ff0000;"><strong> tone(altoFalante, tom, tempo);</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>Usamos a função map() para mapear os valores lidos na entrada analógica para valores de frequência que serão reproduzidos pela função tone(). No caso, os valores lidos se encontram na faixa de 70 a 1000 aproximadamente (usamos as funções Serial para descobrir esses valores), e são dependentes dos resistores utilizados no divisor de tensão conectado à entrada A0. E mapeamos esses valores para a faixa de 30 a 2500 Hz, que correspondem aos sons que serão reproduzidos. Você pode experimentar com outros valores de frequências, até o limite da audição humana (20 Hz a 20.000 Hz)!.</p>
<p>Para testar, carregue o código no microcontrolador e aproxime / afaste sua mão do sensor LDR para variar a luminosidade que incide sobre ele. Você ouvirá o som produzido no alto-falante variado sua frequência de acordo.</p>
<p>É isso aí! Até o próximo projeto!</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-sons-baseados-em-entrada-de-sensor-de-luz-com-arduino/">Tocar sons no Arduino baseados em entrada de sensor de luz</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/tocando-sons-baseados-em-entrada-de-sensor-de-luz-com-arduino/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
