<?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 Arduino - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/tag/arduino/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/arduino/</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>Mon, 11 Sep 2023 16:59:51 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Sensor de Temperatura TMP36 com Arduino e visor LCD 16&#215;2</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 07 Sep 2023 21:29:01 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[Sensor]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19653</guid>

					<description><![CDATA[<p>Sensor de Temperatura TMP36 com com Arduino e visor LCD Neste projeto vamos empregar um sensor para verificar a temperatura do ambiente e enviar a leitura para um Arduino, que se encarregará de interpretar o valor lido e então exibir em um display LCD a temperatura medida em graus Celsius (ºC). Para tal usaremos o sensor TMP36, que é um sensor de baixo custo, bastante comum e muito empregado em circuitos que envolvam controle de temperatura para realização de processos diversos. Outros modelos de sensores podem ser empregados, como o TMP35 ou TMP37 bastando para isso realizar pequenas alterações no programa de acordo com as características de cada componente. Algumas das aplicações mais comuns do TMP36 incluem: Sistemas de controle ambiental Proteção térmica de circuitos Controle de processos industriais Alarmes de incêndio Monitoramento de sistemas de potência Gerenciamento térmico de CPU entre muitas outras que podemos imaginar. Algumas características do sensor TMP36 A seguir temos listadas algumas das características técnicas do sensor TMP36, retiradas de seu datasheet: Saída Analógica: O TMP36 gera uma saída analógica proporcional à temperatura medida. A tensão de saída aumenta linearmente com o aumento da temperatura. Precisão: Boa precisão em relação à medição de temperatura. Sua precisão [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/">Sensor de Temperatura TMP36 com Arduino e visor LCD 16&#215;2</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 de Temperatura TMP36 com com Arduino e visor LCD</h2>
<p>Neste projeto vamos empregar um sensor para verificar a temperatura do ambiente e enviar a leitura para um Arduino, que se encarregará de interpretar o valor lido e então exibir em um display LCD a temperatura medida em graus Celsius (ºC).</p>
<p>Para tal usaremos o sensor <strong>TMP36,</strong> que é um sensor de baixo custo, bastante comum e muito empregado em circuitos que envolvam controle de temperatura para realização de processos diversos.</p>
<p>Outros modelos de sensores podem ser empregados, como o TMP35 ou TMP37 bastando para isso realizar pequenas alterações no programa de acordo com as características de cada componente.</p>
<p>Algumas das aplicações mais comuns do TMP36 incluem:</p>
<ul>
<li>Sistemas de controle ambiental</li>
<li>Proteção térmica de circuitos</li>
<li>Controle de processos industriais</li>
<li>Alarmes de incêndio</li>
<li>Monitoramento de sistemas de potência</li>
<li>Gerenciamento térmico de CPU</li>
</ul>
<p>entre muitas outras que podemos imaginar.</p>
<h4>Algumas características do sensor TMP36</h4>
<p>A seguir temos listadas algumas das características técnicas do sensor TMP36, retiradas de seu datasheet:</p>
<ul>
<li>Saída Analógica: O TMP36 gera uma saída analógica proporcional à temperatura medida. A tensão de saída aumenta linearmente com o aumento da temperatura.</li>
<li>Precisão: Boa precisão em relação à medição de temperatura. Sua precisão é de cerca de ±2°C.</li>
<li>Alimentação: Alimentado com uma baixa tensão, tipicamente entre 2,7V e 5,5V</li>
<li>Faixa de Operação: O sensor pode medir temperaturas em uma ampla faixa, geralmente de -40°C a 125°C.</li>
<li>Tensão de Referência: Ele gera uma tensão de saída proporcional à temperatura, onde 0°C é representado como 0,5V. Para cada grau Celsius de aumento na temperatura ocorre um aumento de 10 mV na tensão de saída.</li>
</ul>
<p>Para fazer a leitura da temperatura, a tensão de saída do TMP36 é conectada a um conversor analógico para digital (ADC) no microcontrolador (ou outro circuito). O microcontrolador (no caso, o Arduino) lê a tensão e, por meio de cálculos simples (explicados adiante), converte essa tensão medida em mV para uma temperatura correspondente em graus Celsius.</p>
<p>Mais informações sobre esse sensor podem ser obtidas no <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf" target="_blank" rel="noopener">Datasheet do TMP36</a>.</p>
<p>Vejamos os materiais que serão necessários para construir esse circuito e testá-lo.</p>
<h3>Lista de Materiais</h3>
<p>Vamos precisar dos seguintes componentes para montar o circuito do projeto:</p>
<ul>
<li>01 Sensor de Temperatura TMP36</li>
<li>01 Arduino Uno (ou compatível)</li>
<li>01 Display LCD 16&#215;2</li>
<li>01 Resistor de 220 Ω</li>
<li>01 Potenciômetro de 10 kΩ</li>
<li>01 Matriz de Contatos</li>
<li>Fios diversos</li>
</ul>
<h3>O Circuito</h3>
<p>A figura a seguir mostra as ligações dos componentes, criada com o auxílio de um software de simulação de circuitos &#8211; <a href="https://www.tinkercad.com/" target="_blank" rel="noopener">Tinkercad</a>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-19654" title="Medir temperatura com sensor TMP36 e LCD no Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito.jpg" alt="Medir temperatura com sensor TMP36 e LCD no Arduino" width="700" height="523" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito.jpg 717w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito-420x314.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito-174x131.jpg 174w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito-300x225.jpg 300w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<h3>Diagrama Esquemático</h3>
<p>E a seguir temos o diagrama esquemático do circuito, com detalhes de como os componentes são interligados.</p>
<div id="attachment_19655" style="width: 761px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19655" class="wp-image-19655" title="Sensor TMP36 e visor LCD 16x2 no Arduino - Diagrama Esquemático" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-1024x423.jpg" alt="Sensor TMP36 e visor LCD no Arduino - Diagrama Esquemático" width="751" height="310" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-1024x423.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-420x173.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-768x317.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama.jpg 1100w" sizes="auto, (max-width: 751px) 100vw, 751px" /><p id="caption-attachment-19655" class="wp-caption-text">Sensor TMP36 e visor LCD no Arduino &#8211; Diagrama Esquemático</p></div>
<h3>Código-fonte</h3>
<p>Na sequência temos o código que foi usado para programar o microcontrolador, com uma explicação detalhada logo após.</p>
<pre>#include &lt;LiquidCrystal.h&gt;

<span style="color: #339966;">// Inicializar a biblioteca com os números dos pinos digitais</span>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);

<span style="color: #339966;">// Variáveis para leitura e interpretação das leituras do TMP36</span>
const int TEMP=0;
int val = 0;
float celsius=0.0;

void setup()
{
    <span style="color: #339966;">// Configurar o número de colunas e linhas do LCD:</span>
    lcd.begin(16, 2);

    <span style="color: #339966;">// Texto a ser mostrado no LCD (texto fixo, primeira linha):</span>
    lcd.print("Temp. °C");
}

void loop()
{
    <span style="color: #339966;">// Posicionar o cursor na coluna 0 e linha 1 (segunda linha):</span>
    lcd.setCursor(0, 1);

    <span style="color: #339966;">// Ler o valor enviado pelo sensor</span>
    val = analogRead(TEMP);

    <span style="color: #339966;">// Calcular e ajustar a temperatura em graus Celsius</span>
    celsius = map(((val - 20) * 3.04), 0, 1023, -40, 125); 

    <span style="color: #339966;">// Imprimir no LCD a temperatura</span>
    lcd.print(celsius);
}</pre>
<h3>Funcionamento do código</h3>
<h4>1. Declarações iniciais</h4>
<div>Começamos incluindo a biblioteca &#8220;LiquidCrystal&#8221;, que é necessária para controlar o display LCD.</div>
<div>Logo após criamos uma instância da classe &#8220;LiquidCrystal&#8221; chamada &#8220;lcd&#8221;, definindo os pinos digitais que estão conectados aos pinos do display . Os números (12, 11, 2, 3, 4, 5) correspondem, respectivamente, aos pinos RS, Enable, D4, D5, D6 e D7 do LCD.</div>
<div> </div>
<div>Na sequência, declaramos duas variáveis e uma constante que serão usadas pelo programa:</div>
<div> </div>
<ul>
<li><strong>TEMP</strong> é uma constante que representa o pino analógico ao qual o sensor TMP36 está conectado (no caso, o pino 0).</li>
<li><strong>val</strong> é uma variável que será usada para armazenar o valor enviado pelo sensor TMP36</li>
<li><strong>celsius</strong> é a variável que armazenará a temperatura (já convertida) em graus Celsius.</li>
</ul>
<h3>2. Função setup()</h3>
<div>Aqui configuramos o número de colunas e linhas do display LCD com o método <em><strong>lcd.begin(16, 2)</strong> </em>e escrevemos uma mensagem fixa na primeira linha do LCD com <em><strong>lcd.print(&#8220;Temp. °C&#8221;)</strong></em> </div>
<div> </div>
<h3>3. Função loop()</h3>
<div>
<p>Na função principal do programa temos:</p>
<ol>
<li>Posicionamento do cursor na coluna 0 e linha 1 (segunda linha) com <em><strong>lcd.setCursor(0, 1)</strong></em></li>
<li>Leitura do valor analógico enviado pelo sensor e armazenado na variável val com <em><strong>val = analogRead(TEMP)</strong></em></li>
<li>Cálculo da temperatura em graus Celsius com base no valor lido do sensor com a instrução <em><strong>celsius = map(((val &#8211; 20) * 3.04), 0, 1023, -40, 125)</strong></em></li>
<li>Finalmente, imprimimos a temperatura no display LCD com <em><strong>lcd.print(celsius)</strong></em></li>
</ol>
<h4>A conversão de mV para ºC</h4>
<p>A linha</p>
<pre><strong>celsius = map(((val - 20) * 3.04), 0, 1023, -40, 125);</strong></pre>
<p>permite mapear o valor lido do sensor, que é uma tensão elétrica da ordem de alguns mV, para um valor numérico que representa a temperatura medida pelo dispositivo. Nesta linha temos:</p>
<p><a href="http://www.bosontreinamentos.com.br/eletronica/arduino/funcao-map/"><strong>map()</strong></a>: A função <em>map()</em> é usada para mapear um valor de um intervalo para outro. Neste caso, ela mapeia o valor ajustado em mV para o intervalo de temperaturas em graus Celsius.</p>
<p>A sintaxe da função map() é a seguinte:</p>
<pre><span style="color: #800080;"><strong>map(valor, de_min, de_max, para_min, para_max);</strong></span></pre>
<p>onde:</p>
<ul>
<li><strong>valor</strong>: O valor que queremos mapear para a nova faixa.</li>
<li><strong>de_min</strong> e <strong>de_max</strong>: A faixa atual (mínimo e máximo) do valor de entrada. No caso, os valores 0 e 1023, que são os limites de leitura da entrada analógica do Arduino.</li>
<li><strong>para_min</strong> e <strong>para_max</strong>: A faixa desejada (mínimo e máximo) para o valor de saída, que no caso é a faixa de temperaturas suportada pelo sensor: de -40ºC a 125ºC</li>
</ul>
<p>Leia mais sobre a <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/funcao-map/">função map do Arduino aqui</a>.</p>
<p>Antes de usar a função map(), o código realiza o cálculo <span style="color: #800080;"><em><strong>(val &#8211; 20) * 3.04</strong></em> </span>para ajustar o valor lido do sensor. O sensor TMP36 gera valores que representam a temperatura em mV (milivolts) e estão relacionados a uma tensão de referência. O valor &#8220;20&#8221; é subtraído para compensar a tensão de referência do sensor e ter uma medição mais precisa. Já o valor &#8220;3.04&#8221; é um fator de conversão que leva em consideração a sensibilidade do sensor. O valor obtido é então mapeado pela função map().</p>
<p>Assim, o código calcula a temperatura em graus Celsius com base no valor analógico lido do sensor TMP36, ajustando-o primeiro e depois mapeando-o para o intervalo desejado de temperaturas. O resultado é armazenado na variável <strong><em>celsius</em></strong>, para exibição no display LCD.</p>
</div>
<h3>Resultado</h3>
<p>Assim que o circuito é ligado, o sensor inicia a detecção da temperatura ambiente e então o valor é lido pelo Arduino, que o converte e mostra a temperatura correspondente no mostrador LCD, como ilustra a imagem a seguir (retirada do simulador Tinkercad):</p>
<div id="attachment_19670" style="width: 731px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19670" class="wp-image-19670" title="Temperatura sendo exibida em um display LCD com sensor TMP36" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2.jpg" alt="Temperatura sendo exibida em um display LCD com sensor TMP36" width="721" height="329" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2.jpg 927w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2-420x192.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2-768x350.jpg 768w" sizes="auto, (max-width: 721px) 100vw, 721px" /><p id="caption-attachment-19670" class="wp-caption-text">Temperatura sendo exibida em um display LCD a partir de um sensor TMP36</p></div>
<p>Variando a temperatura no sensor o valor exibido no LCD muda de acordo.</p>
<p>É isso aí! Nos próximos artigos vamos explorar mais circuitos interessantes e úteis com microcontroladores, sensores e outros componentes eletrônicos. Até!</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/">Sensor de Temperatura TMP36 com Arduino e visor LCD 16&#215;2</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/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>Sensor MQ-8 de Gás Hidrogênio e Arduino &#8211; Funcionamento</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-mq-8-de-gas-hidrogenio-e-arduino-funcionamento/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-mq-8-de-gas-hidrogenio-e-arduino-funcionamento/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 31 Oct 2020 13:46:54 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Química]]></category>
		<category><![CDATA[Sensor]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16952</guid>

					<description><![CDATA[<p>Sensor de Gás Hidrogênio MQ-8 com Arduino Neste projeto, vamos iniciar a construção de um detector de vazamento de gás hidrogênio usando um sensor MQ-8 e um Arduino. O gás hidrogênio, H2, é o elemento número 1 na tabela periódica dos elementos, e é a substância mais leve que existe no Universo. E é altamente inflamável! Nas CNTP (condições normais de temperatura e pressão), é um gás sem cheiro, sem gosto e sem cor, de modo que não é possível detectar sua presença apenas com nossos sentidos. Encontra inúmeras aplicações industriais e tem sido pesquisado como possível fonte de energia alternativa em diversas áreas, como por exemplo em aplicações especiais na indústria automobilística, na forma de células de hidrogênio. Evidentemente, por suas características físicas e químicas, se trata de uma substância perigosa, pois pode provocar explosões e incêndios se houver vazamento do gás e faiscamento, e portanto, é importante que seja monitorada a presença do elemento em um ambiente. Vamos trabalhar aqui com um sensor MQ-8, que permite detectar a presença de gás hidrogênio. Não se trata de um sensor de nível industrial, mas ele serve perfeitamente para aprendermos como funciona esse tipo de circuito e aplicação, e a importância [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-mq-8-de-gas-hidrogenio-e-arduino-funcionamento/">Sensor MQ-8 de Gás Hidrogênio e Arduino &#8211; Funcionamento</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 de Gás Hidrogênio MQ-8 com Arduino</h2>
<p>Neste projeto, vamos iniciar a construção de um detector de vazamento de gás hidrogênio usando um sensor MQ-8 e um Arduino.</p>
<p>O gás hidrogênio, <strong>H<sub>2</sub></strong>, é o elemento número 1 na tabela periódica dos elementos, e é a substância mais leve que existe no Universo. E é altamente inflamável!</p>
<p>Nas CNTP (<em><strong>condições normais de temperatura e pressão</strong></em>), é um gás sem cheiro, sem gosto e sem cor, de modo que não é possível detectar sua presença apenas com nossos sentidos.</p>
<p>Encontra inúmeras aplicações industriais e tem sido pesquisado como possível fonte de energia alternativa em diversas áreas, como por exemplo em aplicações especiais na indústria automobilística, na forma de células de hidrogênio.</p>
<p>Evidentemente, por suas características físicas e químicas, se trata de uma substância perigosa, pois pode provocar explosões e incêndios se houver vazamento do gás e faiscamento, e portanto, é importante que seja monitorada a presença do elemento em um ambiente.</p>
<p>Vamos trabalhar aqui com um sensor MQ-8, que permite detectar a presença de gás hidrogênio. Não se trata de um sensor de nível industrial, mas ele serve perfeitamente para aprendermos como funciona esse tipo de circuito e aplicação, e a importância desse tipo de medida de segurança.</p>
<div id="attachment_16960" style="width: 423px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-16960" class="wp-image-16960 size-full" title="Sensor de gás hidrogênio MQ-8" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/sensor-gas-hidrogenio-MQ-8.jpg" alt="Sensor de gás hidrogênio MQ-8" width="413" height="340"><p id="caption-attachment-16960" class="wp-caption-text">Sensor de gás hidrogênio MQ-8</p></div>
<h3>Componentes</h3>
<p>Os componentes que empregaremos no projeto são:</p>
<ul>
<li>Módulo de Sensor de Gás Hidrogênio MQ-8</li>
<li>Arduino (Uno, Mega, etc)</li>
<li>Um Buzzer (para sinalização)</li>
<li>LED (para sinalização)</li>
<li>Matriz de Contatos (Breadboard)</li>
<li>Conectores diversos</li>
</ul>
<p>Para gerar o gás hidrogênio que será usado nos testes vamos usar:</p>
<ul>
<li>Erlenmeyer&nbsp; (preferencialmente) ou outro recipiente de vidro, como um copo grande.</li>
<li>5 g de hidróxido de sódio (NaOH), (uma colher de chá de soda cáustica)</li>
<li>200 ml de água</li>
<li>Tiras ou pedaços pequenos de alumínio (por exemplo, uma latinha de refrigerante cortada. Cuidado para não se machucar!!!)</li>
<li>Óculos de proteção</li>
<li>Luvas de látex ou de nitrilo</li>
</ul>
<p><span style="color: #ff0000;"><strong>ATENÇÃO: MUITO CUIDADO ao realizar testes com o gás hidrogênio, pois se trata de um gás altamente inflamável e explosivo. USE luvas e óculos de segurança, e teste o circuito em local bem arejado, preferencialmente em ambiente externo.</strong></span></p>
<p>Vamos estudar agora as características do sensor MQ-8.</p>
<h2>Sensor MQ-8 de Gás Hidrogênio</h2>
<p>O conjunto <strong>MQ</strong> é uma série de sensores de gases de baixo custo. Existem sensores disponíveis para detecção de vários tipos de gases, com alguns listados na tabela a seguir:</p>
<table style="border-collapse: collapse; width: 77.6948%; height: 190px;" border="1">
<thead>
<tr>
<td style="width: 15.4105%; text-align: center;"><strong>Sensor</strong></td>
<td style="width: 84.5895%; text-align: center;"><strong>Gás</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 15.4105%;">MQ-2</td>
<td style="width: 84.5895%;">Fumaça e gases inflamáveis</td>
</tr>
<tr>
<td style="width: 15.4105%;">MQ-3</td>
<td style="width: 84.5895%;">Álcool etílico (Etanol)</td>
</tr>
<tr>
<td style="width: 15.4105%;">MQ-4</td>
<td style="width: 84.5895%;">Gás Metano (CH<sub>4</sub>)</td>
</tr>
<tr>
<td style="width: 15.4105%;">MQ-7</td>
<td style="width: 84.5895%;">Monóxido de Carbono (CO)</td>
</tr>
<tr>
<td style="width: 15.4105%;">MQ-8</td>
<td style="width: 84.5895%;">Gás Hidrogênio (H<sub>2</sub>)</td>
</tr>
<tr>
<td style="width: 15.4105%;">MQ-9</td>
<td style="width: 84.5895%;">Monóxido de Carbono, Metano, GLP -Gás Liquefeito de Petróleo (Butano ou Propano)</td>
</tr>
</tbody>
</table>
<p>O sensor <strong>MQ-8</strong> que utilizaremos neste projeto é um sensor de custo bastante baixo e de fácil obtenção, podendo ser adquirido em lojas e sites especializados em eletrônicos, sites de leilões e sites de produtos da China em geral.</p>
<p>Trata-se de um sensor semicondutor para gás hidrogênio, do tipo sensor químico de metal-óxido, que utiliza como material sensível o&nbsp;<strong>SnO<sub>2</sub></strong> (dióxido de estanho), o qual possui baixa condutividade elétrica em ambiente com ar sem hidrogênio presente. Quando um sensor de metal-óxido, como SnO<sub>2</sub>, é aquecido a uma determinada temperatura no ar, oxigênio é absorvido na superfície do cristal e um potencial de superfície é formado, inibindo o fluxo de elétrons. Quando essa superfície é exposta a gases redutíveis, como moléculas de hidrogênio e outros gases (como&nbsp;metilmercaptana &#8211; CH<sub>3</sub>SH &#8211; e álcool etílico &#8211; C<sub>2</sub>H<sub>5</sub>OH), o potencial de superfície diminui e a condutividade elétrica do sensor aumenta consideravelmente, de acordo com o aumento da concentração do gás.</p>
<p>Esse sensor encontra aplicações diversas tais como alarme de vazamento de gás doméstico, alarme de gases inflamáveis industriais e detetor portátil de gás, entre outras.</p>
<p>Este tipo de sensor é classificado como um <em><strong>sensor direto</strong></em>.&nbsp;Em um sensor direto uma característica elétrica é afetada em um elemento sensível. Os classificamos em:</p>
<ul>
<li><strong>Dispositivos condutométricos</strong>: sofrem alteração de resistência ou impedância</li>
<li><strong>Dispositivos amperométricos</strong>: sofrem alteração na corrente elétrica que atravessa o sensor</li>
<li><strong>Dispositivos potenciométricos</strong>: sofrem alteração na tensão elétrica entre um par de eletrodos.</li>
</ul>
<p>Sensores químicos diretos usam diversos fenômenos de reações químicas que afetam diretamente uma característica elétrica mensurável, como resistência elétrica, tensão, corrente ou capacitância. Esse tipo de sensor necessita de algum tipo de condicionamento de sinal elétrico, mas não tem a necessidade de um transdutor (conversor de formas de energia).</p>
<p>Tente usar sempre o módulo de sensor, e não o sensor por si só, caso contrário você terá de criar o circuito de controle do sensor, que já vem embutido no módulo, facilitando assim muito o desenvolvimento do projeto (e diminuindo seu custo).</p>
<h4>Características gerais:</h4>
<ul>
<li>Faixa de detecção vai de 100 a 1000 ppm de H<sub>2</sub>.</li>
<li>Resistência de Carga: Ajustável</li>
<li>Tensão de alimentação: 5.0 V AC ou DC</li>
<li>Consumo: &lt;= 900 mW</li>
<li>Tensão de saída: de 2,5 V a 4.0 V (em 1000 ppm H<sub>2</sub>)</li>
<li>Resistência do aquecedor: 31 kΩ ±5% (temperatura ambiente)</li>
<li>Temperatura de operação: -10°C a +50°C</li>
</ul>
<h3>Pinagem do MQ-8</h3>
<p>A seguir temos a pinagem do sensor MQ-8 e suas respectivas funções.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16961 size-full" title="Pinagem do sensor de gás hidrogênio MQ-8" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/sensor-hidrogenio-mq-8-pinagem.jpg" alt="Pinagem do sensor de gás hidrogênio MQ-8" width="745" height="456" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/sensor-hidrogenio-mq-8-pinagem.jpg 745w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/sensor-hidrogenio-mq-8-pinagem-420x257.jpg 420w" sizes="auto, (max-width: 745px) 100vw, 745px" /></p>
<ul>
<li>Pino 1: VCC</li>
<li>Pino 2: AOUT (saída analógica)</li>
<li>Pino 3: DOUT (saída digital)</li>
<li>Pino 4: GND</li>
</ul>
<h3>Modo de operação do sensor MQ-8</h3>
<p>Os pinos VCC e GND fornecem alimentação ao sensor. O pino AOUT é o pino de saída analógica, cujo valor é proporcional à quantidade de gás detectada. Caso a tensão detectada neste pino ultrapasse um valor limite (<em>threshold</em>), o pino DOUT (saída digital) vai para nível 1, e é essa mudança de nível lógico que vamos detectar com o Arduino, para sinalizar que o nível de gás hidrogênio no ambiente ultrapassou o limite estabelecido ou aceitável.</p>
<p>O módulo possui também um potenciômetro para ajuste da sensibilidade do nível de detecção.</p>
<h3>Curva de Sensibilidade do MQ-8</h3>
<p>O gráfico a seguir mostra a curva de sensibilidade do sensor de gás MQ-8 com relação a diversos gases. Note que o hidrogênio é o gás primordial detectado por esse sensor, mas ele também apresenta uma certa sensibilidade a outros gases:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16959 size-full" title="Curva de sensibilidade a gases do sensor de hidrogênio MQ-8" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/curva-sensibilidade-sensor-gas-mq-8.jpg" alt="Curva de sensibilidade a gases do sensor de hidrogênio MQ-8" width="481" height="427" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/curva-sensibilidade-sensor-gas-mq-8.jpg 481w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/curva-sensibilidade-sensor-gas-mq-8-420x373.jpg 420w" sizes="auto, (max-width: 481px) 100vw, 481px" /></p>
<p>Por exemplo, esse sensor também é capaz de detectar gases como etanol e GLP (gás liquefeito de petróleo, mistura doméstica de butano e propano), embora com muito menor sensibilidade.</p>
<p>Agora que já sabemos como funciona o sensor MQ-8, vamos partir para a construção do circuito eletrônico de detecção de gás usando o Arduino. Essa será nossa tarefa na parte 02 do projeto!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-mq-8-de-gas-hidrogenio-e-arduino-funcionamento/">Sensor MQ-8 de Gás Hidrogênio e Arduino &#8211; Funcionamento</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/sensor-mq-8-de-gas-hidrogenio-e-arduino-funcionamento/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como substituir a função delay() por millis() no Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/como-substituir-a-funcao-delay-por-millis-no-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/como-substituir-a-funcao-delay-por-millis-no-arduino/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 06 Sep 2019 14:56:49 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15155</guid>

					<description><![CDATA[<p>Substituir a função delay() por millis() no Arduino Uma das funções mais conhecidas e utilizadas em programação para Arduino é a função delay(), que permite pausar o programa por um período de tempo especificado, na forma de um parâmetro com o valor em milissegundos desejados. A função delay() aceita um número inteiro como argumento, o qual representa o tempo em milissegundos que o programa deverá esperar até poder executar a próxima linha de código &#8211; ou seja, tempo de pausa. Por exemplo, para criar uma pausa de 5 segundos você pode simplesmente escrever: delay(5000); Porém, apesar de ser muito popular, nem sempre a função delay() é a mais adequada para seu sketch. Um problema sério pode surgir com o emprego dessa função: o Bloqueio de Execução. Bloqueio de Execução: Ao ser invocada, a função delay() bloqueia a execução do programa, pelo período de tempo especificado, e nenhuma outra instrução pode ser executada durante esse período. Desta forma, enquanto o programa espera o final do delay, ele fica totalmente ocioso. Desta forma, durante uma chaamda à função delay(), o programa não consegue detectar entrada de sinais, processar dados e nem alterar o status de saída de pinos. O problema é que [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-substituir-a-funcao-delay-por-millis-no-arduino/">Como substituir a função delay() por millis() 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>Substituir a função delay() por millis() no Arduino</h2>
<p>Uma das funções mais conhecidas e utilizadas em programação para Arduino é a função <strong>delay()</strong>, que permite pausar o programa por um período de tempo especificado, na forma de um parâmetro com o valor em milissegundos desejados.</p>
<p>A função delay() aceita um número inteiro como argumento, o qual representa o tempo em milissegundos que o programa deverá esperar até poder executar a próxima linha de código &#8211; ou seja, tempo de pausa.</p>
<p>Por exemplo, para criar uma pausa de 5 segundos você pode simplesmente escrever:</p>
<pre>delay(5000);</pre>
<p>Porém, apesar de ser muito popular, nem sempre a função delay() é a mais adequada para seu sketch. Um problema sério pode surgir com o emprego dessa função: o Bloqueio de Execução.</p>
<p><strong>Bloqueio de Execução</strong>: Ao ser invocada, a função delay() bloqueia a execução do programa, pelo período de tempo especificado, e nenhuma outra instrução pode ser executada durante esse período. Desta forma, enquanto o programa espera o final do delay, ele fica totalmente ocioso.</p>
<p>Desta forma, durante uma chaamda à função delay(), o programa não consegue detectar entrada de sinais, processar dados e nem alterar o status de saída de pinos.</p>
<p><strong>O problema é que muitas vezes precisamos executar rotinas específicas durante esse tempo de pausa.</strong></p>
<p>Para evitar esses problemas, muitas vezes recomendamos empregar a função <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-funcoes-de-temporizacao/" target="_blank" rel="noopener"><strong>millis()</strong></a> em lugar da função delay().</p>
<p>A função millis() retorna o número de milissegundos decorridos desde que o programa foi iniciado (ou seja, desde que o Arduino foi ligado).</p>
<p>Esta função permite verificar o relógio do sistema regularmente, de modo que sempre é possível saber o tempo decorrido &#8211; e assim calcular intervalos de tempo que podemos pausar, mas sem bloquear a execução de códigos necessários no sketch.</p>
<h3>Exemplos</h3>
<p><strong>1.</strong> Suponha que você queira pausar o programa por um certo período de tempo, como por exemplo 3 segundos. Para fazer isso com delay basta executar a instrução:</p>
<pre>delay(3000);</pre>
<p>Para realizar a mesma tarefa com millis(), você pode escrever algo como isto:</p>
<pre>unsigned long agora = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {

  Serial.println("Mensagem escrita a cada 3 segundos");
  <span style="color: #008000;">// Criar a pausa de 3 segundos</span>
  agora = millis()
  while(millis() &lt; agora + 3000) {
    <span style="color: #008000;">// Pausa de 3 segundos. Nada a fazer</span>
  }
}</pre>
<p>Como podemos ver, o código é maior e mais trabalhoso, porém realiza a pausa de 3 segundos com muita precisão.</p>
<p><strong>2.</strong> Digamos agora que você deseja executar uma instrução por um período de tempo específico, mas sem bloquear a execução de outras funções no programa, como a detecção de interrupções. Por exemplo, acender um LED por 4 segundos e depois apagá-lo, mas ainda assim continuar executando outras tarefas durante esse tempo. Para tal, experimente o código a seguir:</p>
<pre><span style="color: #008000;">/*
Adaptado do exemplo "Blink without Delay"
Código original em Domínio Público
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
</span>
const int LED = 9;
int estadoLED = LOW;

unsigned long tempoAnterior = 0; <span style="color: #008000;">// Armazena o último momento em que o LED foi atualizado</span>
const long PERIODO = 4000;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  unsigned long tempoAtual = millis();

  if (tempoAtual - tempoAnterior &gt;= PERIODO) {
    tempoAnterior = tempoAtual;

    if (estadoLED == LOW) {
      estadoLED = HIGH;
    } 
    else {
      estadoLED = LOW;
    }

    digitalWrite(LED, estadoLED);
  }

  Serial.println("Executado sem interferir no acendimento do LED");
}</pre>
<p>Esse código resolve nosso problema de bloqueio do programa, pois é possível executar outras funções enquanto o LED estiver apagado ou aceso pelos 4 segundos determinados. O programa conta o tempo para alterar o estado do LED, e permite que outras rotinas sejam executadas enquanto isso.</p>
<h3>Referências</h3>
<p>Adafruit: <a href="https://learn.adafruit.com/multi-tasking-the-arduino-part-1/ditch-the-delay" target="_blank" rel="noopener nofollow">Ditch the Delay</a></p>
<p>DZone &#8211; IoT Zone: <a href="https://dzone.com/articles/arduino-using-millis-instead-of-delay" target="_blank" rel="noopener nofollow">Arduino: Using millis() Instead of delay()</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-substituir-a-funcao-delay-por-millis-no-arduino/">Como substituir a função delay() por millis() 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-substituir-a-funcao-delay-por-millis-no-arduino/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Controle de Lâmpada com Sensor PIR e Sensor de Toque com Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/controle-de-lampada-com-sensor-pir-e-sensor-de-toque-com-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/controle-de-lampada-com-sensor-pir-e-sensor-de-toque-com-arduino/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sun, 01 Sep 2019 15:16:58 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Automação Residencial]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[Smart Home]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15160</guid>

					<description><![CDATA[<p>Controle de Lâmpada com Sensor PIR e Sensor de Toque com Arduino Neste projeto vamos simular um sistema de iluminação inteligente, controlando o acendimento de uma lâmpada comum (automação residencial) com um sensor de movimento infravermelho (PIR), o qual irá detectar o movimento de uma pessoa no ambiente, e seu apagamento de duas formas: automático, após um tempo determinado, ou imediato após o toque em um sensor capacitivo, que fará o papel de um Smart Switch. Lista de materiais Arduino (Uno, Nano, Mega, etc) Lâmpada (LED, CFL ou Incandescente) Soquete para lâmpada Sensor PIR (Passive Infrared) HC-SR501 Sensor de Toque Capacitivo TTP223B Módulo de Relé 5V KY-019 ou similar Matriz de Contatos Cabo 1,5 mm2 ou mais grosso Fios diversos para breadboard Tomada (plugue padrão) Fita isolante Alicate de corte Decapador de fios (opcional) Diagrama Esquemático A figura a seguir mostra o diagrama esquemático do circuito que será criado: Visão Matriz de Contatos A ilustração a seguir mostra a conexão entre os componentes empregados no projeto: Código-Fonte do Projeto A seguir temos o código-fonte do projeto a ser carregado no Arduino: const int TOQUE = 2; const int PIR = 8; const int LAMP = 10; int estToque; int estPIR; [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/controle-de-lampada-com-sensor-pir-e-sensor-de-toque-com-arduino/">Controle de Lâmpada com Sensor PIR e Sensor de Toque 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>Controle de Lâmpada com Sensor PIR e Sensor de Toque com Arduino</h2>
<p>Neste projeto vamos simular um sistema de iluminação inteligente, controlando o acendimento de uma lâmpada comum (automação residencial) com um <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-um-sensor-de-movimento-pir-com-arduino/" target="_blank" rel="noopener">sensor de movimento infravermelho (PIR)</a>, o qual irá detectar o movimento de uma pessoa no ambiente, e seu apagamento de duas formas: automático, após um tempo determinado, ou imediato após o toque em um <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-toque-capacitivo-com-arduino/" target="_blank" rel="noopener">sensor capacitivo</a>, que fará o papel de um Smart Switch.</p>
<h3>Lista de materiais</h3>
<ul>
<li>Arduino (Uno, Nano, Mega, etc)</li>
<li>Lâmpada (<a href="http://www.bosontreinamentos.com.br/eletronica/curso-de-eletronica/como-funciona-um-led-diodo-emissor-de-luz/" target="_blank" rel="noopener">LED</a>, CFL ou Incandescente)</li>
<li>Soquete para lâmpada</li>
<li><a href="http://www.bosontreinamentos.com.br/eletronica/como-funciona-um-sensor-de-movimento-pir-passive-infrared/" target="_blank" rel="noopener">Sensor PIR (Passive Infrared) HC-SR501</a></li>
<li><a href="http://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-toque-capacitivo-com-arduino/" target="_blank" rel="noopener">Sensor de Toque Capacitivo TTP223B</a></li>
<li>Módulo de Relé 5V KY-019 ou similar</li>
<li><a href="http://www.bosontreinamentos.com.br/eletronica/curso-de-eletronica/o-que-e-uma-matriz-de-contatos-curso-de-eletronica-basica/" target="_blank" rel="noopener">Matriz de Contatos</a></li>
<li>Cabo 1,5 mm<sup>2</sup> ou mais grosso</li>
<li>Fios diversos para breadboard</li>
<li>Tomada (plugue padrão)</li>
<li>Fita isolante</li>
<li>Alicate de corte</li>
<li>Decapador de fios (opcional)</li>
</ul>
<h3>Diagrama Esquemático</h3>
<p>A figura a seguir mostra o diagrama esquemático do circuito que será criado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15303" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/Sensor-PIR-Toque-Lampada-Esquematico-1024x436.png" alt="Diagrama Esquemático da smart lamp com arduino" width="899" height="383" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/Sensor-PIR-Toque-Lampada-Esquematico-1024x436.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/Sensor-PIR-Toque-Lampada-Esquematico-420x179.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/Sensor-PIR-Toque-Lampada-Esquematico-768x327.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/Sensor-PIR-Toque-Lampada-Esquematico-940x400.png 940w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/Sensor-PIR-Toque-Lampada-Esquematico-620x264.png 620w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/Sensor-PIR-Toque-Lampada-Esquematico.png 1371w" sizes="auto, (max-width: 899px) 100vw, 899px" /></p>
<h3>Visão Matriz de Contatos</h3>
<p>A ilustração a seguir mostra a conexão entre os componentes empregados no projeto:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15299" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/SensorPIRToqueLampada-1024x535.png" alt="Automação Residencial dom Arduino - Lâmpada com Sensor Infravermelho e Sensor de Toque" width="850" height="444" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/SensorPIRToqueLampada-1024x535.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/SensorPIRToqueLampada-420x219.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/SensorPIRToqueLampada-768x401.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/08/SensorPIRToqueLampada.png 1068w" sizes="auto, (max-width: 850px) 100vw, 850px" /></p>
<h3>Código-Fonte do Projeto</h3>
<p>A seguir temos o código-fonte do projeto a ser carregado no Arduino:</p>
<pre>const int TOQUE = 2;
const int PIR = 8;
const int LAMP = 10;
int estToque;
int estPIR;
unsigned long tempoAtual = 0;

void setup() {
  pinMode(TOQUE, INPUT);
  pinMode(PIR, INPUT);
  pinMode(LAMP, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(TOQUE),apaga,RISING);
  Serial.begin(9600);
}

void loop() {
  tempoAtual = millis();
  estPIR = digitalRead(PIR);
  if (estPIR == HIGH) {
    digitalWrite(LAMP, HIGH);
    Serial.println("Lâmpada acesa");
    while (millis() &lt; tempoAtual + 10000) {
      if (estPIR == false) {
        break;
      }
    }
    digitalWrite(LAMP, LOW);
    estPIR = false;
    Serial.println("Lâmpada apagada por tempo");
  }
}

void apaga() {
  estToque = digitalRead(TOQUE);
  if (estPIR == HIGH) {
    if (estToque == HIGH) {
      digitalWrite(LAMP, LOW);
      estPIR = false;
      Serial.println("Lâmpada apagada por toque");
    }
  }
  delay(1000);
}</pre>
<p>Neste código usamos uma <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-interrupcoes-com-arduino/" target="_blank" rel="noopener">interrupção no Arduino</a> para detectar quando o sensor de toque capacitivo é ativado, permitindo assim apagar a lâmpada em qualquer momento, por meio da chamada à função <strong>apaga()</strong>. Além disso, usamos a <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-funcoes-de-temporizacao/" target="_blank" rel="noopener">função millis() para temporizar o circuito</a>, em vez de simplesmente usarmos a função delay() (que é limitada).</p>
<p>Usamos o Monitor Serial para visualizar mensagens relativas ao estado da lâmpada &#8211; a saber, se ela foi acesa, se foi apagada pela passagem do tempo limite, ou se foi apagada por intervenção do usuário (toque no sensor capacitivo).&nbsp;</p>
<h3>Testando o circuito</h3>
<p><span style="color: #ff0000; font-size: 14pt;"><strong>ATENÇÃO: Tome muito cuidado ao manipular o circuito após ter sido conectado na tomada da rede elétrica, , pois existe o risco de choque elétrico, que pode ser fatal. Certifique-se de ter isolado muito bem todas as conexões que envolvem o relé e a lâmpada.</strong></span></p>
<p>Para testar o circuito basta alimentar o Arduino e conectar o plugue na tomada. Espere cerca de um minuto até o sensor se aclimatar com os níveis de infravermelho do ambiente, e então é só se movimentar na frente do PIR, o que deve fazer com que a lâmpada se acenda automaticamente.</p>
<p>A imagem abaixo mostra o circuito montado em uma matriz de contatos, já conectado e pronto para testes:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15312" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/arduino-pir-toque-lampada-smart-home.jpg" alt="Automação Residencial com Arduino - Controle de Lâmpadas com sensores" width="850" height="687" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/arduino-pir-toque-lampada-smart-home.jpg 850w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/arduino-pir-toque-lampada-smart-home-420x339.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/arduino-pir-toque-lampada-smart-home-768x621.jpg 768w" sizes="auto, (max-width: 850px) 100vw, 850px" /></p>
<p>Tocando no nosso smart switch &#8211; o sensor de toque capacitivo &#8211;&nbsp; a lâmpada deve se apagar imediatamente, não sendo acesa novamente por algum tempo mesmo que você se movimente na frente do sensor de novo &#8211; para que haja tempo de sair do recinto sem que a lâmpada seja acesa novamente.</p>
<p>Se o sensor de toque não for ativado, a lâmpada se apagará automaticamente após decorrido o tempo configurado no código (10 segundos aqui &#8211; mude à vontade para realizar seus testes).</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/controle-de-lampada-com-sensor-pir-e-sensor-de-toque-com-arduino/">Controle de Lâmpada com Sensor PIR e Sensor de Toque 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/controle-de-lampada-com-sensor-pir-e-sensor-de-toque-com-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sensor de Toque Capacitivo com Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-toque-capacitivo-com-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-toque-capacitivo-com-arduino/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 29 Jul 2019 14:47:53 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Automação Residencial]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Sensor]]></category>
		<category><![CDATA[Smart Home]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15145</guid>

					<description><![CDATA[<p>Sensor de Toque Capacitivo com Arduino Neste artigo vamos mostrar como usar um sensor de toque capacitivo com Arduino para disparar o acionamento de uma carga qualquer, como uma lâmpada ou um motor. Usaremos o módulo de sensor TTP223B, que é um circuito sensor de toque muito comum e de baixo custo, o qual permite detectar toques em uma superfície demarcada em sua placa. Ao tocar na região demarcada, a saída do circuito é ativada, indo ao nível alto, por 12 segundos, e voltando logo após ao nível baixo. A imagem a seguir mostra o módulo do sensor de toque capacitivo TTP223B: Sensor de Toque Capacitivo TTP223B Aplicações Permite substituir um interruptor mecânico por um interruptor digital Especificações técnicas Circuito integrado: TTP223B Tensão de Operação: 2V &#8211; 5,5VDC Tensão de Saída (nível alto): 0,8V Tensão de Saída (nível baixo): 0,3V Sensibilidade ajustável por capacitância externa (0-50 pF) Temperatura de Operação: -20ºC a +70ºC Funcionamento do Sensor Este é um dispositivo que utiliza o seu corpo como parte do circuito. Ao tocar na área sensível do módulo, a capacitância do circuito é alterada e essa alteração é detectada, fazendo com que o estado da saída do circuito seja modificado. Este sensor [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-toque-capacitivo-com-arduino/">Sensor de Toque Capacitivo 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 de Toque Capacitivo com Arduino</h2>
<p>Neste artigo vamos mostrar como usar um sensor de toque capacitivo com Arduino para disparar o acionamento de uma carga qualquer, como uma lâmpada ou um motor.</p>
<p>Usaremos o módulo de sensor <strong>TTP223B</strong>, que é um circuito sensor de toque muito comum e de baixo custo, o qual permite detectar toques em uma superfície demarcada em sua placa. Ao tocar na região demarcada, a saída do circuito é ativada, indo ao nível alto, por 12 segundos, e voltando logo após ao nível baixo.</p>
<p>A imagem a seguir mostra o módulo do sensor de toque capacitivo TTP223B:</p>
<div id="attachment_15165" style="width: 482px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-15165" class="size-full wp-image-15165" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-touch-capacitivo-ttp223B.jpg" alt="Sensor de Toque Capacitivo TTP223B" width="472" height="506" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-touch-capacitivo-ttp223B.jpg 472w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-touch-capacitivo-ttp223B-392x420.jpg 392w" sizes="auto, (max-width: 472px) 100vw, 472px" /><p id="caption-attachment-15165" class="wp-caption-text">Sensor de Toque Capacitivo TTP223B</p></div>
<h3>Aplicações</h3>
<p>Permite substituir um interruptor mecânico por um interruptor digital</p>
<h3>Especificações técnicas</h3>
<ul>
<li>Circuito integrado: TTP223B</li>
<li>Tensão de Operação: 2V &#8211; 5,5VDC</li>
<li>Tensão de Saída (nível alto): 0,8V</li>
<li>Tensão de Saída (nível baixo): 0,3V</li>
<li>Sensibilidade ajustável por capacitância externa (0-50 pF)</li>
<li>Temperatura de Operação: -20ºC a +70ºC</li>
</ul>
<h3>Funcionamento do Sensor</h3>
<p>Este é um dispositivo que utiliza o seu corpo como parte do circuito. Ao tocar na área sensível do módulo, a capacitância do circuito é alterada e essa alteração é detectada, fazendo com que o estado da saída do circuito seja modificado.</p>
<p>Este sensor capacitivo possui três pinos de conexão:</p>
<ul>
<li>SIG &#8211; Sinal de Saída</li>
<li>VCC &#8211; Alimentação +VCC</li>
<li>GND &#8211; Terra / Negativo</li>
</ul>
<p>E uma superfície marcada denominada &#8220;Sensor&#8221;, que ao ser tocada com um dedo faz com que o sensor detecte o toque e gere um sinal de nível alto, que aparece no pino SIG. Este sinal é enviado para processamento no Arduino &#8211; em nosso caso, vamos conectar o pino SIG do sensor ao pino 9 de entrada digital do microcontrolador.</p>
<h3>Lista de Materiais:</h3>
<ul>
<li>01 Arduino</li>
<li>01 Módulo de Sensor Capacitivo Touch TTP223B</li>
<li>01 LED (cor a seu gosto)</li>
<li>01 Resistor de 220 ohms</li>
<li>01 Matriz de Contatos</li>
<li>01 Cabo USB e fios de conexão variados</li>
</ul>
<h3>Diagrama Esquemático</h3>
<p>A seguir temos o diagrama esquemático do circuito a ser montado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15147" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-capacitivo-TTP223B-arduino.png" alt="Sensor Capacitivo de Toque TTP223B com Arduino" width="656" height="505" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-capacitivo-TTP223B-arduino.png 656w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-capacitivo-TTP223B-arduino-420x323.png 420w" sizes="auto, (max-width: 656px) 100vw, 656px" /></p>
<h3>Código</h3>
<p>Na sequência, temos o código-fonte do programa que será carregado no Arduino para controlar o circuito:</p>
<pre>const int SENSOR = 4;
const int LED = 11;
int est;

void setup() {
  pinMode(SENSOR, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  est = digitalRead(SENSOR)
  if (est == HIGH) {
    digitalWrite(LED, HIGH);
  }
  else {
    digitalWrite(LED,LOW);
  }
  delay(500);
}</pre>
<h3>Testando o Circuito</h3>
<p>As imagens a seguir mostram o circuito criado em ação. Ao tocar no sensor, o LED é aceso, e ao tirar o dedo o LED se apaga:</p>
<p><div id="attachment_15162" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-15162" class="size-full wp-image-15162" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-apagado.jpg" alt="Sensor de Toque Capacitivo TTP223B apagado" width="800" height="600" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-apagado.jpg 800w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-apagado-420x315.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-apagado-768x576.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-apagado-174x131.jpg 174w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-apagado-300x225.jpg 300w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-15162" class="wp-caption-text">LED apagado</p></div> <div id="attachment_15163" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-15163" class="size-full wp-image-15163" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-aceso.jpg" alt="Sensor de Toque Capacitivo TTP223B aceso" width="800" height="600" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-aceso.jpg 800w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-aceso-420x315.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-aceso-768x576.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-aceso-174x131.jpg 174w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/07/sensor-toque-capacitivo-arduino-aceso-300x225.jpg 300w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-15163" class="wp-caption-text">LED aceso ao tocar no sensor capacitivo</p></div></p>
<p>É isso aí! No próximo tutorial vamos combinar sensor capacitivo com um sensor de presença infravermelho. Até!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-toque-capacitivo-com-arduino/">Sensor de Toque Capacitivo 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/sensor-de-toque-capacitivo-com-arduino/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como usar Interrupções com Arduino</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-interrupcoes-com-arduino/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-interrupcoes-com-arduino/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 26 Jul 2019 19:34:13 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15152</guid>

					<description><![CDATA[<p>Interrupções com Arduino Uma interrupção é um sinal enviado por um dispositivo de hardware que temporariamente interrompe a tarefa que a CPU está executando no momento, para que o dispositivo em si seja atendido. Logo após, o programa retoma seu processamento do ponto onde havia parado. As interrupções são realizadas em nível de hardware, quando temos um evento externo sendo acionado, como por exemplo o pressionamento de um botão, e assim um sinal é enviado para o microcontrolador (ou microprocessador). Este processamento será executado imediatamente, interrompendo o que quer que a CPU esteja realizando no momento. Neste artigo vamos apresentar e aprender a usar as interrupções externas em programação para Arduino Rotinas de Interrupção em Arduino Um programa normal para Arduino consiste em duas rotinas principais: setup() e loop(). Quando empregamos interrupções, criamos uma (ou mais) função adicional, tecnicamente chamada de ISR &#8211; Interrupt Service Routine (Rotina de Serviço de Interrupção). Esta função é invocada toda vez que uma interrupção é gerada no circuito. Assim, o programa passaria a ter uma estrutura como esta: void setup() { } void loop() { } void isr() { } Note que a rotina de interrupção retorna void, ou seja, não retorna nada, apenas [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-interrupcoes-com-arduino/">Como usar Interrupções 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>Interrupções com Arduino</h2>
<p>Uma <strong>interrupção</strong> é um sinal enviado por um dispositivo de hardware que temporariamente interrompe a tarefa que a CPU está executando no momento, para que o dispositivo em si seja atendido. Logo após, o programa retoma seu processamento do ponto onde havia parado.</p>
<p>As interrupções são realizadas em nível de hardware, quando temos um evento externo sendo acionado, como por exemplo o pressionamento de um botão, e assim um sinal é enviado para o microcontrolador (ou microprocessador). Este processamento será executado imediatamente, interrompendo o que quer que a CPU esteja realizando no momento.</p>
<p>Neste artigo vamos apresentar e aprender a usar as interrupções externas em programação para Arduino</p>
<h3>Rotinas de Interrupção em Arduino</h3>
<p>Um programa normal para Arduino consiste em duas rotinas principais: setup() e loop().</p>
<p>Quando empregamos interrupções, criamos uma (ou mais) função adicional, tecnicamente chamada de <strong>ISR</strong> &#8211; Interrupt Service Routine (Rotina de Serviço de Interrupção). Esta função é invocada toda vez que uma interrupção é gerada no circuito.</p>
<p>Assim, o programa passaria a ter uma estrutura como esta:</p>
<pre>void setup() {
}

void loop() {
}

void isr() {
}</pre>
<p>Note que a rotina de interrupção retorna <strong><em>void</em></strong>, ou seja, não retorna nada, apenas executa uma tarefa. Seu nome deve ser escolhido de acordo com a função que irá desempenhar. É possível ter mais de uma rotina de interrupção, dependendo da placa usada.</p>
<p>Em que momento exatamente esta rotina será chamada? Isso ocorre quando determinados pinos mudam seu estado &#8211; ou seja, ocorre a interrupção. Se um pino estiver em um nível lógico baixo, por exemplo, e mudar para alto, a interrupção é disparada, e o programa chama a rotina isr().</p>
<p>Note que apenas alguns pinos especiais são capazes de disparar interrupções, e esses pinos variam dependendo da versão do Arduino utilizada. Por exemplo, nos Arduinos Uno, Nano e Mini apenas os pinos digitais 2 e 3 podem ser usados para trabalhar com interrupções.</p>
<p>A tabela a seguir mostra diversos modelos de Arduino e seus respectivos pinos de interrupção:</p>
<table style="border-collapse: collapse; width: 100%;" border="1">
<thead>
<tr>
<td style="width: 50%; text-align: center;"><strong>Placa</strong></td>
<td style="width: 50%; text-align: center;"><strong>Pinos para Interrupção</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 50%;">Uno / Nano / Mini</td>
<td style="width: 50%;">2, 3</td>
</tr>
<tr>
<td style="width: 50%;">Mega, Mega2560, MegaADK</td>
<td style="width: 50%;">2, 3, 18, 19, 20, 21</td>
</tr>
<tr>
<td style="width: 50%;">Micro, Leonardo, com chip 32u4</td>
<td style="width: 50%;">0, 1, 2, 3, 7</td>
</tr>
<tr>
<td style="width: 50%;">Zero</td>
<td style="width: 50%;">Todos, exceto o 4</td>
</tr>
<tr>
<td style="width: 50%;">MKR1000 Rev.1</td>
<td style="width: 50%;">0, 1, 4, 5, 6, 7, 8, 9, A1, A2</td>
</tr>
<tr>
<td style="width: 50%;">Due</td>
<td style="width: 50%;">Todos os pinos digitais</td>
</tr>
<tr>
<td style="width: 50%;">101</td>
<td style="width: 50%;">Todos os pinos digitais; CHANGE só funciona nos pinos 2, 5, 7, 8, 10, 11, 12, 13</td>
</tr>
</tbody>
</table>
<h3>Exemplo de Código com Interrupção</h3>
<p>O exemplo a seguir ilustra o emprego de interrupções em Arduino:</p>
<pre>const int LED = 9;
const int pinoInterrupcao = 2;
volatile int est = LOW;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(pinoInterrupcao, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(pinoInterrupcao), piscar, CHANGE);
}

void loop() {
  digitalWrite(LED, est);
}

void piscar() {
  est = !est;
}</pre>
<p>Neste código, devemos conectar um botão ao pino 2, de interrupção. Toda vez que o botão for pressionado, o estado do pino muda, o que gerará uma interrupção. Assim, o LED será aceso ou apagado, dependendo de seu estado anterior.</p>
<p>A interrupção gerada chama a rotina <strong>piscar()</strong>, que possui o código que será executado toda vez que o botão for pressionado.</p>
<p>Para configurar a interrupção, nós usamos a função interna <strong>attachInterrupt()</strong>. Vamos falar sobre ela na sequência.</p>
<h3>Função attachInterrupt()</h3>
<p>Permite usar interrupções em pinos digitais.</p>
<p><strong>Sintaxe:</strong></p>
<pre><span style="color: #800080;">attachInterrupt(pinoInterrupção, funçãoISR, modo);</span></pre>
<p><strong>Parâmetros:</strong></p>
<ul>
<li><strong>pinoInterrupção</strong> &#8211; Vetor de Interrupção. Qual pino irá gerar a interrupção (não é o número do pino!)</li>
<li><strong>funçãoISR</strong> &#8211; Função a ser chamada quando uma interrupção ocorrer</li>
<li><strong>modo</strong> &#8211; Modo de disparo da interrupção</li>
</ul>
<p>Os modos de disparo são os seguintes:</p>
<ul>
<li><strong>CHANGE</strong> &#8211; Interrupção é disparada quando o pino muda de estado</li>
<li><strong>FALLING</strong> &#8211; Interrupção é disparada quando o pino vai do estado HIGH para LOW</li>
<li><strong>HIGH</strong> &#8211; Interrupção é disparada quando o pino está no nível HIGH. Este modo somente está disponível para Arduinos baseados em chip ARM, como o Due, Zero ou MKR1000.</li>
<li><strong>LOW</strong> &#8211; Interrupção é disparada quando o pino está no nível LOW</li>
<li><strong>RISING</strong> &#8211; Interrupção é disparada quando o pino vai do estado LOW para HIGH</li>
</ul>
<p>Relembremos no exemplo mostrado anteriormente o momento em que esta função é executada:</p>
<pre>attachInterrupt(digitalPinToInterrupt(pinoInterrupcao), piscar, CHANGE);</pre>
<p>Neste exemplo passamos o pino de interrupção usando uma outra função, <strong>digitalPinToInterrupt()</strong>, que toma um número de pino passado como argumento e retorna o número da interrupção associada, se houver. No caso, o pino passado é o pino 2, que equivale à interrupção 0 do Arduino Uno. Alternativamente, poderíamos ter passado diretamente o número 0, sem usar esta função auxiliar:</p>
<pre>attachInterrupt(0, piscar, CHANGE);</pre>
<p>Note que para isso é necessário saber os números das interrupções, e não os números dos pinos das placas, que são distintos entre si.</p>
<p>A palavra piscar indica qual rotina será executada quando a interrupção ocorrer. Ela deve ser codificada fora da rotina loop(), e recomenda-se que seja uma função curta e simples, que execute somente o que é estritamente necessário durante a interrupção. Outro ponto importante é que esta função não deve retornar nenhum valor, e nem pode receber valores de entrada (parâmetros). Mas pode usar variáveis, desde que sejam globais.</p>
<p>Finalmente, usamos o modo CHANGE, que significa que sempre que houver mudança de estado no pino (H -&gt; L ou L -&gt; H), a interrupção será disparada.</p>
<p>Note que a função <strong>attachInterrupt()</strong> deve ser declarada na rotina de <strong>setup()</strong> do programa.</p>
<h3>Variável <em>volatile</em></h3>
<p>Um ponto importante a notar é que empregamos a variável de nome <strong>est</strong> na interrupção, para armazenar o estado do LED, e esta variável foi declarada como <em><strong>volatile</strong></em>:</p>
<pre>volatile int est = LOW;</pre>
<p>A palavra <em><strong>volatile</strong></em> é uma palavra-chave da linguagem C que se aplica a variáveis. Significa que o valor da variável não está totalmente sob o controle do programa em si. em nosso caso, significa que o valor do estado pode mudar, devido a uma ocorrência que o programa não pode prever, que no caso é o pressionamento do botão por um usuário.</p>
<p>Além disso, ao usarmos a palavra volatile nos prevenimos de problemas de compilação que possam ocorrer, como por exemplo o risco que existe do compilador simplesmente eliminar esta variável da memória ao compilar o programa, pois ela não é usada diretamente nas rotinas de loop() e setup(). Compiladores costumam fazer isso, para eliminar variáveis não utilizadas e, assim, economizar espaço em memória.</p>
<p>É isso aí! Existem outras formas de trabalhar com interrupções no Arduino, como por exemplo o uso de registradores e máscaras de registrador. Como são formas mais avançadas, as estudaremos em uma outra lição.</p>
<p>Até mais!</p>
<h3>Referências</h3>
<p><a href="https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/" target="_blank" rel="noopener noreferrer nofollow">https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/como-usar-interrupcoes-com-arduino/">Como usar Interrupções 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-interrupcoes-com-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programação para Arduino &#8211; Funções de Temporização</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-funcoes-de-temporizacao/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-funcoes-de-temporizacao/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 13 Jun 2019 21:09:41 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15040</guid>

					<description><![CDATA[<p>Programação para Arduino &#8211; Funções de Temporização Existem diversas funções que podem ser usadas para inserir temporização em um programa que rode na plataforma Arduino. Com essa temporização é possível pausar a execução do programa por um tempo determinado ou contar a passagem do tempo entre dois momentos específicos. As funções de temporização disponíveis são: delay() delayMicroseconds() micros() millis() Vamos estudar cada uma delas separadamente, com um pequeno programa de exemplo para testá-las. Função delay() A função delay() pausa a execução do programa por um intervalo de tempo especificado em milissegundos, cujo valor é passado como um parâmetro. Um segundo possui 1000 milissegundos. Sintaxe: delay(tempo); O parâmetro tempo é o número de milissegundos (ms) de pausa. O tipo de dado aceito é unsigned int. Essa função possui alguns contras em sua utilização. Por exemplo, durante o tempo de pausa não ocorre a leitura de valores em sensores, cálculos matemáticos e nem tampouco a manipulação de pinos &#8211; ou seja, o arduino simplesmente &#8220;congela&#8221; pelo tempo definido na função. No geral, não se recomenda o emprego da função delay() para pausas a partir de algumas dezenas de milissegundos, exceto para aplicações realmente muito simples. As interrupções não são desabilitadas durante a [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-funcoes-de-temporizacao/">Programação para Arduino &#8211; Funções de Temporização</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>Programação para Arduino &#8211; Funções de Temporização</h2>
<p>Existem diversas funções que podem ser usadas para inserir temporização em um programa que rode na plataforma Arduino. Com essa temporização é possível pausar a execução do programa por um tempo determinado ou contar a passagem do tempo entre dois momentos específicos.</p>
<p>As funções de temporização disponíveis são:</p>
<ul>
<li>delay()</li>
<li>delayMicroseconds()</li>
<li>micros()</li>
<li>millis()</li>
</ul>
<p>Vamos estudar cada uma delas separadamente, com um pequeno programa de exemplo para testá-las.</p>
<h3>Função delay()</h3>
<p>A função <strong>delay()</strong> pausa a execução do programa por um intervalo de tempo especificado em milissegundos, cujo valor é passado como um parâmetro. Um segundo possui 1000 milissegundos.</p>
<h4>Sintaxe:</h4>
<pre>delay(tempo);</pre>
<p>O parâmetro <strong>tempo</strong> é o número de milissegundos (ms) de pausa. O tipo de dado aceito é unsigned int.</p>
<p>Essa função possui alguns contras em sua utilização. Por exemplo, durante o tempo de pausa não ocorre a leitura de valores em sensores, cálculos matemáticos e nem tampouco a manipulação de pinos &#8211; ou seja, o arduino simplesmente &#8220;congela&#8221; pelo tempo definido na função.</p>
<p>No geral, não se recomenda o emprego da função delay() para pausas a partir de algumas dezenas de milissegundos, exceto para aplicações realmente muito simples.</p>
<p>As interrupções não são desabilitadas durante a pausa de delay(), assim como a comunicação serial em RX.<br />
Uma alternativa mais interessante é o uso da função millis().</p>
<h4>Exemplo</h4>
<p>Vamos fazer piscar um LED conectado ao pino 9 do Arduino, mantendo-o aceso por 2 segundos e apagado por 1 segundo:</p>
<pre>int pino = 9;

void setup() {
  pinMode(pino, OUTPUT);
}

void loop() {
  digitalWrite(pino, HIGH);
  delay(2000);
  digitalWrite(pino, LOW);
  delay(1000);
}</pre>
<h3>Função delayMicroseconds()</h3>
<p>A função <strong>delayMicroseconds()</strong> pausa a execução do programa por um intervalo de tempo especificado em microssegundos, cujo valor é passado como um parâmetro.</p>
<h4>Sintaxe:</h4>
<pre>delayMicroseconds(tempo);</pre>
<p>O parâmetro <strong>tempo</strong> é o número de microssegundos de pausa. O tipo de dado aceito é unsigned int.</p>
<p>Essa função funciona de forma bastante precisa em temporização a partir de 3μs; em períodos menores ela pode não ter precisão adequada. O maior valor utilizável é 16383 μs (atualmente).</p>
<h4>Exemplo</h4>
<p>Vamos gerar uma sequência numérica a ser exibida no monitor serial, imprimindo um número a cada cerca de 7 microssegundos:</p>
<pre>int valor = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  delayMicroseconds(7);
  valor += 1;
  Serial.println(valor);
}</pre>
<h3>Função micros()</h3>
<p>A função <strong>micros()</strong> retorna o número de microssegundos decorridos desde que a placa do Arduino começou a executar o programa atual &#8211; ou seja, o tempo em execução da aplicação.<br />
Esse número é incrementado durante cerca de 70 minutos, sendo zerado após passado esse tempo.</p>
<p>Em placas de Arduino de 16 MHz (como o Arduino Nano), a função possui resolução de 4μs &#8211; ou seja, o valor retornado é um múltiplo de 4. Já em placas Arduino de 8 MHz (como o LilyPad), a resolução da função micros() é de 8μs.</p>
<h4>Sintaxe:</h4>
<pre>tempo = micros();</pre>
<p>A variável <strong>tempo</strong> recebe o número de microssegundos (μs) decorridos desde o início do programa. O tipo de dado retornado é unsigned long.</p>
<h4>Exemplo</h4>
<p>Vamos mostrar no monitor serial o tempo decorrido desde que a aplicação foi iniciada, e fazer acender um LED conectado ao pino 9 do Arduino, quando esse tempo ultrapassar 5 segundos (equivalente a 5 milhões de microssegundos):</p>
<pre>int pino = 9;
unsigned long tempo;

void setup() {
  Serial.begin(9600);
  pinMode(pino, OUTPUT);
}

void loop() {
  Serial.print("Tempo decorrido: ");
  tempo = micros();
  Serial.println(tempo);
  if (tempo &gt; 5000000) { 
    digitalWrite(pino, HIGH);
  }
}</pre>
<h3>Função millis()</h3>
<p>A função <strong>millis()</strong> retorna o número de milissegundos decorridos desde que a placa do Arduino começou a executar o programa atual &#8211; ou seja, o tempo em execução da aplicação.<br />
Esse número é incrementado durante cerca de 50 dias, sendo zerado após passado esse tempo.</p>
<h4>Sintaxe:</h4>
<pre>tempo = millis();</pre>
<p>A variável <strong>tempo</strong> recebe o número de milissegundos (ms) decorridos desde o início do programa. O tipo de dado retornado é unsigned long.</p>
<h4>Exemplo</h4>
<p>Vamos mostrar no monitor serial o tempo decorrido desde que a aplicação foi iniciada, e fazer acender um LED conectado ao pino 9 do Arduino, quando esse tempo atingir exatos 5 segundos (equivalente a 5.ooo ms):</p>
<pre>int pino = 9;
unsigned long tempo;

void setup() {
  Serial.begin(9600);
  pinMode(pino, OUTPUT);
}

void loop() {
  Serial.print("Tempo decorrido: ");
  tempo = millis();
  Serial.println(tempo);
  if (tempo &gt; 5000) { 
    digitalWrite(pino, HIGH);
  }
}</pre>
<p>É isso aí! Nesta lição vimos como trabalhar com eventos temporais no Arduino, empregando para isso suas funções de temporização.</p>
<p>Até a próxima!</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-funcoes-de-temporizacao/">Programação para Arduino &#8211; Funções de Temporização</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/programacao-para-arduino-funcoes-de-temporizacao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programação para Arduino &#8211; Condicional if else</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-condicional-if-else/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-condicional-if-else/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 12 Jun 2019 17:39:23 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15029</guid>

					<description><![CDATA[<p>Programação para Arduino &#8211; Condicional if else Em programação, uma estrutura chamada de&#160;desvio condicional&#160;tem por finalidade tomar uma decisão de acordo com o resultado de uma determinada condição (chamada de teste lógico), e então executar um bloco de códigos específico, o qual irá depender do resultado desse teste. Nesta lição estudaremos os desvios condicionais simples, composto e encadeado em programação para Arduino, conhecidos como condicional if , condicional if else. e condicional if else if O condicional simples if permite executar um bloco de instruções caso o resultado do teste lógico retorne o valor verdadeiro (true), e não realiza nenhuma ação caso o teste lógico retorne o valor falso (false). Já o condicional composto if else permite executar um bloco de instruções caso o resultado do teste lógico retorne o valor verdadeiro (true), e um bloco de instruções diferente caso o teste lógico retorne o valor falso (false). O condicional encadeado&#160;nada mais é do que o encadeamento de estruturas de decisão compostas em um algoritmo. Essa estrutura é empregada em&#160;situações nas quais é preciso verificar condições de teste sucessivas, onde uma ação será executada caso um conjunto anterior de ações seja satisfeito. Sintaxe A sintaxe do condicional if no arduino [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-condicional-if-else/">Programação para Arduino &#8211; Condicional if else</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>Programação para Arduino &#8211; Condicional if else</h2>
<p>Em programação, uma estrutura chamada de&nbsp;<em><strong>desvio condicional</strong></em>&nbsp;tem por finalidade tomar uma decisão de acordo com o resultado de uma determinada condição (chamada de teste lógico), e então executar um bloco de códigos específico, o qual irá depender do resultado desse teste.</p>
<p>Nesta lição estudaremos os desvios condicionais simples, composto e encadeado em programação para Arduino, conhecidos como condicional <em><strong>if</strong> </em>, condicional <em><strong>if else</strong></em>. e condicional <em><strong>if else if</strong></em></p>
<p>O condicional simples if permite executar um bloco de instruções caso o resultado do teste lógico retorne o valor verdadeiro (true), e não realiza nenhuma ação caso o teste lógico retorne o valor falso (false).</p>
<p>Já o condicional composto if else permite executar um bloco de instruções caso o resultado do teste lógico retorne o valor verdadeiro (true), e um bloco de instruções diferente caso o teste lógico retorne o valor falso (false).</p>
<p>O condicional encadeado&nbsp;nada mais é do que o encadeamento de estruturas de decisão compostas em um algoritmo. Essa estrutura é empregada em&nbsp;situações nas quais é preciso verificar condições de teste sucessivas, onde uma ação será executada caso um conjunto anterior de ações seja satisfeito.</p>
<h3>Sintaxe</h3>
<p>A sintaxe do condicional if no arduino é a seguinte:</p>
<pre><span style="color: #800080;">if (teste lógico) {</span>
<span style="color: #800080;">  bloco de código executado se teste lógico retornar verdadeiro</span>
<span style="color: #800080;">}</span></pre>
<p>A sintaxe do condicional if else no arduino é a seguinte:</p>
<pre><span style="color: #800080;">if (teste lógico) {</span>
<span style="color: #800080;">  bloco de código executado se teste lógico retornar verdadeiro</span>
<span style="color: #800080;">}</span>
<span style="color: #800080;">else {</span>
<span style="color: #800080;">  bloco de código executado se teste lógico retornar falso</span>
<span style="color: #800080;">}</span></pre>
<p>Note que o bloco else deve vir <em>imediatamente</em> após a chave de fechamento do bloco if, ou ocorrerá um erro ao tentar executar o código.</p>
<p>E, finalmente, a sintaxe&nbsp;do condicional if else if no arduino é mostrada a seguir:</p>
<pre><span style="color: #800080;">if (teste lógico 01)&nbsp;</span><span style="color: #800080;">{</span>
<span style="color: #800080;">  bloco de código executado se teste lógico 01 retornar verdadeiro</span>
<span style="color: #800080;">}</span>
<span style="color: #800080;">else if&nbsp;(teste lógico 02)&nbsp;</span><span style="color: #800080;">{</span>
<span style="color: #800080;">  bloco de código executado se teste lógico 02 retornar verdadeiro</span>
<span style="color: #800080;">}</span>
<span style="color: #800080;">else&nbsp;</span><span style="color: #800080;">{</span>
<span style="color: #800080;">  bloco de código final, executado se nenhum teste retornar verdadeiro</span>
<span style="color: #800080;">}</span></pre>
<p>Note que podemos ter quantos blocos <em><strong>else if</strong> </em>forem necessários. Porém, se o algoritmo começar a se tornar muito complicado, recomenda-se empregar uma <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/estrutura-de-decisao-switch-case-no-arduino/">estrutura switch case</a>&nbsp;em seu lugar.</p>
<p>Vejamos agora alguns exemplos da aplicação dos desvios condicionais em programação para Arduino.</p>
<h3>Exemplo 01: Condicional Simples no Arduino</h3>
<p>Vejamos um exemplo de aplicação do condicional simples <em><strong>if</strong></em> no Arduino. Vamos construir um circuito que consiste em um LEDs conectados&nbsp;à uma saída digitais do microcontrolador, o qual será aceso de acordo com um valor digitado no monitor serial. Se o valor fornecido for o número 1, o LED se acenderá e permanecerá aceso por 3 segundos; caso contrário, o LED não se acenderá.</p>
<p>A seguir, temos o diagrama esquemático do circuito a ser utilizado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15033" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/06/if-condicional-arduino.jpg" alt="Condicional if Arduino" width="555" height="443" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/06/if-condicional-arduino.jpg 555w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/06/if-condicional-arduino-420x335.jpg 420w" sizes="auto, (max-width: 555px) 100vw, 555px" /></p>
<p>E a seguir, o código-fonte de nosso projeto:</p>
<pre>const int LED = 8;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    char valor = Serial.read();
    if (valor == '1') {
      digitalWrite(LED, HIGH);
      delay(3000);
      digitalWrite(LED, LOW);
    }
  }
}</pre>
<h3>Exemplo 02 &#8211; Condicional Composto no Arduino</h3>
<p>Vejamos agora um exemplo de aplicação do condicional composto&nbsp;<em><strong>if else</strong></em> no Arduino. Vamos acrescentar um LED ao circuito anterior, os quais serão acesos de acordo com um valor numérico digitado no monitor serial.&nbsp; Se o valor fornecido for igual a 1, o primeiro LED se acenderá e o outro permanecerá apagado; para qualquer outro valor digitado, o segundo LED será aceso e o primeiro será apagado.</p>
<p>A seguir, temos o diagrama esquemático do circuito a ser utilizado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15034" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/06/if-else-condicional-arduino.jpg" alt="Condicional if else Arduino" width="618" height="442" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/06/if-else-condicional-arduino.jpg 618w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/06/if-else-condicional-arduino-420x300.jpg 420w" sizes="auto, (max-width: 618px) 100vw, 618px" /></p>
<p>E a seguir, o código-fonte de nosso projeto:</p>
<pre>const int LED1 = 8;
const int LED2 = 7;

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT)
}

void loop() {
  if (Serial.available()) {
    char valor = Serial.read();
    if (valor == '1') {
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, LOW);
    }
    else {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);
    }
  }
}</pre>
<h3>Exemplo 03: Condicional Encadeado no Arduino</h3>
<p>E agora uma aplicação do condicional encadeado em Arduino. Construiremos um circuito com quatro LEDs conectados às saídas digitais do microcontrolador, os quais serão acesos de acordo com um valor numérico distinto fornecido por meio do monitor serial (de 1 a 4). Se um valor diferente for digitado, nenhum LED permanecerá aceso.</p>
<p>Abaixo temos o diagrama esquemático do circuito a ser utilizado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10851" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/arduino-switch-case-diagrama-esquemático.jpg" alt="Estrutura Switch Case no Arduino" width="910" height="712" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/arduino-switch-case-diagrama-esquemático.jpg 910w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/arduino-switch-case-diagrama-esquemático-420x329.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/arduino-switch-case-diagrama-esquemático-768x601.jpg 768w" sizes="auto, (max-width: 910px) 100vw, 910px" /></p>
<p>E a seguir, o código-fonte de nosso projeto:</p>
<pre>const int LED1 = 7;
const int LED2 = 8;
const int LED3 = 9;
const int LED4 = 10;

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    char LED = Serial.read();
    if (LED == '1') {
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
    }
    else if (LED == '2') {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
    }
    else if (LED == '3') {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, LOW);
    }
    else if (LED == '4') {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, HIGH);
    }
    else {
      Serial.print("Valor ");
      Serial.print(LED);
      Serial.println(" incorreto.");
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
    }
  }
}</pre>
<p>É isso aí! Vimos nesta lição com empregar as estruturas de decisão condicional if / else if / else em programação para Arduino. Na próxima lição estudaremos a <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/estrutura-de-decisao-switch-case-no-arduino/">estrutura de decisão Switch Case em Arduino</a>.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/programacao-para-arduino-condicional-if-else/">Programação para Arduino &#8211; Condicional if else</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/programacao-para-arduino-condicional-if-else/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
