<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Rot-13</title>
	<atom:link href="http://ivnaan.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivnaan.wordpress.com</link>
	<description>____________</description>
	<lastBuildDate>Wed, 07 Dec 2011 16:48:40 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ivnaan.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Rot-13</title>
		<link>http://ivnaan.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ivnaan.wordpress.com/osd.xml" title="Rot-13" />
	<atom:link rel='hub' href='http://ivnaan.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Blender 2.60 e Cycles</title>
		<link>http://ivnaan.wordpress.com/2011/11/30/blender-2-60-e-cycles/</link>
		<comments>http://ivnaan.wordpress.com/2011/11/30/blender-2-60-e-cycles/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 21:13:55 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Cycles]]></category>
		<category><![CDATA[GPU]]></category>
		<category><![CDATA[Ray Tracer]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=612</guid>
		<description><![CDATA[Há alguns meses eu ouvi falar do Cycles que é um novo renderizador para o Blender 2.6x (versão &#8220;estável&#8221; do programa depois da grande mudança de interface) e, depois de descobrir que não precisa de uma GPU com CUDA, resolvi testar o seu poder. O Blender ficou muito mais prático com essa interface, mas é <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=612&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Há alguns meses eu ouvi falar do Cycles que é um novo renderizador para o Blender 2.6x (versão &#8220;estável&#8221; do programa depois da grande mudança de interface) e, depois de descobrir que não precisa de uma GPU com CUDA, resolvi testar o seu poder.</p>
<p>O Blender ficou muito mais prático com essa interface, mas é preciso se acostumar com os novos comandos e a posição dos botões e menus. No site Blender Guru tem uma <a href="http://www.blenderguru.com/wp-content/uploads/Exclusive/Blender_Cheat_Sheet.pdf" title="Blender cheat sheet" target="_blank">cola dos comandos</a> que é bastante completa.</p>
<p>Sobre o Cycles, ele é um Ray tracer de verdade e produz imagens muito mais reais que o renderizador interno (Internal), além de trazer a possibilidade de editar a cena e produzir imagens ao mesmo tempo.</p>
<p>O modo de funcionamento do Cycles é bem diferente do Internal pois ele não divide a imagens em quadrados e renderiza cada um numa thread. Ele gera a imagem inteira de uma vez e vai aprimorando o resultado a cada iteração, o que é um pouco estranho já que a renderização só acaba após o número de passos que for definido.</p>
<p>Em alguns testes que fiz, de 10 a 50 passos, já é razoável para ver o que está acontecendo na imagem (bom para editar em tempo real), mas para uma boa qualidade de imagem são precisos de 1000 a 4000 passos, algo que pode demorar horas, mesmo para uma cena razoavelmente simples (no meu Core i5).</p>
<p>Pode parecer que o Cycles é uma faca de dois gumes, já que permite visualizar o resultado praticamente em tempo real, mas demora pra produzir uma imagem final com pouca granularidade. Na verdade, o Cycles traz ainda mais um diferencial: a possibilidade de renderizar a imagem via GPU com CUDA/OpenCL, o que pode ter um ganho alto de desempenho, além de deixar a CPU livre para outras tarefas. Pena que minha placa de vídeo é bem ruim (a Intel não aprende mesmo&#8230;) e não serve para o propósito.</p>
<p>Abaixo um vídeo do Cycles em ação:<br />
<span style="text-align:center; display: block;"><a href="http://ivnaan.wordpress.com/2011/11/30/blender-2-60-e-cycles/"><img src="http://img.youtube.com/vi/8bDaRXvXG0E/2.jpg" alt="" /></a></span></p>
<p>De cara dá pra perceber que a qualidade de imagem é muito maior que se fosse renderizado com o Internal, principalmente quando se pensa em iluminação. Antigamente, você precisaria colocar umas 3 lâmpadas, no mínimo, e fazer centenas de ajustes para conseguir um efeito legal. Agora você pode adicionar apenas um objeto com o material &#8220;Emission&#8221; e você tem uma fonte de luz que reflete nas superfícies e produz um efeito muito bom.</p>
<p>Outra coisa que sempre foi praticamente impossível de fazer direito no Blender é vidro ou qualquer coisa transparente. No Cycles, ao escolher o material Glass, você tem de cara um vidro de alta qualidade sem precisar fazer qualquer ajuste. Para outros materiais, basta ajustar o índice de refração (IOR) para o valor real do mesmo.</p>
<p>Em cinco minutos coloquei 3 planos, um cubo e um chimpanzé (Suzanne + subsurf) numa cena iluminada por outros dois planos e modifiquei os materiais. Depois de meia hora renderizando em torno de 1000 passos, fiquei com uma imagem que demoraria horas para ajustar a iluminação e ter um efeito parecido.</p>
<p><a href="http://ivnaan.files.wordpress.com/2011/11/untitled.png"><img src="http://ivnaan.files.wordpress.com/2011/11/untitled.png?w=510&#038;h=286" alt="" title="untitled" width="510" height="286" class="aligncenter size-full wp-image-613" /></a></p>
<p>Não é nenhuma obra de arte, mas mostra como é fácil ter efeitos interessantes sem perder muito tempo.</p>
<p>A única diferença entre o uso do Blender Internal e o Cycles é a janela de edição de materiais que, por enquanto, é um pouco pobre em usabilidade e obriga o uso de Composite Nodes para coisas não básicas. De qualquer forma, não deixa de ser algo bom pois o uso do Node editor não é complicado e acaba sendo prático.</p>
<p><a href="http://ivnaan.files.wordpress.com/2011/11/nodeed.png"><img src="http://ivnaan.files.wordpress.com/2011/11/nodeed.png?w=510&#038;h=276" alt="" title="nodeed" width="510" height="276" class="aligncenter size-full wp-image-618" /></a></p>
<p>Uma coisa que senti falta é a pré-visualização do material, mas com a renderização em tempo quase real, acaba não sendo tão ruim.</p>
<p>Como o Cycles ainda não está oficialmente incorporado ao Blender, é preciso pegar um build que tenha sido feito recentemente no SVN do projeto para poder usar. No site <a href="http://graphicall.org/" title="Graphic All" target="_blank">GraphicAll.org</a> tem vários e só precisa escolher o sistema operacional e arquitetura.</p>
<p>De acordo com o roadmap do Blender, o Cycles deve chegar no Blender 2.61 em dezembro.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/612/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=612&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/11/30/blender-2-60-e-cycles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/11/untitled.png" medium="image">
			<media:title type="html">untitled</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/11/nodeed.png" medium="image">
			<media:title type="html">nodeed</media:title>
		</media:content>
	</item>
		<item>
		<title>Recuperando dados de partições Ext3 e Ext4</title>
		<link>http://ivnaan.wordpress.com/2011/11/21/recuperando-dados-de-particoes-ext3-e-ext4/</link>
		<comments>http://ivnaan.wordpress.com/2011/11/21/recuperando-dados-de-particoes-ext3-e-ext4/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 22:08:40 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[ext3]]></category>
		<category><![CDATA[ext4]]></category>
		<category><![CDATA[extundelete]]></category>
		<category><![CDATA[recuperar]]></category>
		<category><![CDATA[sistema de arquivos]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=601</guid>
		<description><![CDATA[Nessa semana tive que recuperar um arquivo deletado acidentalmente num servidor rodando CentOS com sistema de arquivos Ext4. A fração de segundo depois que você aperta Enter e percebe seu erro, mas é tarde demais, você acabou de excluir um arquivo ou diretório valioso e não existia nenhum backup. Ou talvez você tinha um backup, <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=601&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nessa semana tive que recuperar um arquivo deletado acidentalmente num servidor rodando CentOS com sistema de arquivos Ext4.</p>
<blockquote><p>A fração de segundo depois que você aperta Enter e percebe seu erro, mas é tarde demais, você acabou de excluir um arquivo ou diretório valioso e não existia nenhum backup. Ou talvez você tinha um backup, mas é de um mês atrás&#8230;<br />
E em estado de choque que você vê num flash o último mês passar diante de seus olhos e percebe a dor que vai dar para fazer tudo de novo&#8230;<br />
<a href="http://carlo17.home.xs4all.nl/howto/undelete_ext3.html" title="Undelete Ext3" target="_blank">Carlo Wood</a></p></blockquote>
<p>Recuperar dados de partições Ext3 e 4 é bastante complicado, como explicado com muitos detalhes <a href="http://carlo17.home.xs4all.nl/howto/undelete_ext3.html" title="Undelete Ext3" target="_blank">neste link</a>.</p>
<p>A primeira coisa a fazer é desmontar a partição afetada ou, se não for possível, desligar o computador e usar um LiveCD de alguma distribuição Linux (usei Ubuntu num pendrive) ou colocar o HD dentro de outra máquina.</p>
<p>Para resolver o problema, eu testei sem sucesso duas ferramentas (foremost e scalpel) que fazem análise sequencial dos blocos do HD procurando por padrões conhecidos, algo que demorou uma eternidade para verificar toda a partição de 1TB que eu tinha e &#8220;recuperou&#8221; centenas de arquivos corrompidos com nomes do tipo &#8220;100201234.jpg&#8221; e nada do que eu queria.</p>
<p>Talvez o fato da minha partição ser <a href="http://en.wikipedia.org/wiki/Logical_Volume_Manager_%28Linux%29" title="Logical Volume Manager" target="_blank">LVM</a> e a real partição Ext4 estivesse dentro do volume lógico os programas não funcionaram, mas de qualquer forma existe uma solução melhor.</p>
<p>Uma ferramenta chamada <a href="http://extundelete.sourceforge.net/" title="Extundelete" target="_blank">Extundelete</a> foi quem salvou meu dia. Ela acessa o journal do sistema de arquivos e consegue achar novamente os arquivos com os nomes originais e, no meu caso, até manteve a estrutura de diretórios de onde estava o arquivo.</p>
<p>Pra usar, instale o &#8220;Extundelete&#8221; pelo gerenciador de pacotes da distribuição usada (para Ubuntu):<br />
<code># apt-get install extundelete</code></p>
<p>ou pegue o código fonte do site e compile com<br />
<code># ./configure<br />
# make<br />
# make install</code></p>
<p>Para executar, é preciso passar a partição a ser usada para que o programa monte em modo <em>read only</em> (se for LVM, como no meu caso, vai ser necessário seguir <a href="http://quonn.wordpress.com/2010/12/01/how-to-mount-lvm-partition-on-ubuntu/" title="Montar LVM" target="_blank">mais alguns passos</a>).<br />
<code># extundelete /dev/nome_da_particao --restore-all</code></p>
<p>Em menos de um minuto, o comando acima restaurou centenas de arquivos, incluindo o que eu queria.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/601/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=601&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/11/21/recuperando-dados-de-particoes-ext3-e-ext4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>
	</item>
		<item>
		<title>Escolhendo o canal do Wi-Fi</title>
		<link>http://ivnaan.wordpress.com/2011/10/11/escolhendo-o-canal-do-wi-fi/</link>
		<comments>http://ivnaan.wordpress.com/2011/10/11/escolhendo-o-canal-do-wi-fi/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 21:30:06 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=589</guid>
		<description><![CDATA[Algo muito comum é instalar um roteador Wi-Fi num ambiente pequeno e, ainda assim, ter problemas com a velocidade da conexão. Pode acontecer de existirem vários outros roteadores de vizinhos usando o mesmo canal e possivelmente com um sinal mais forte (aquele povo que compra antenas enormes na Uruguaiana ou Santa Ifigênia) estarem fazendo a <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=589&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Algo muito comum é instalar um roteador Wi-Fi num ambiente pequeno e, ainda assim, ter problemas com a velocidade da conexão.</p>
<p>Pode acontecer de existirem vários outros roteadores de vizinhos usando o mesmo canal e possivelmente com um sinal mais forte (aquele povo que compra antenas enormes na Uruguaiana ou Santa Ifigênia) estarem fazendo a sua placa wireless perder muitos pacotes.</p>
<p>Todo roteador Wi-Fi vem com uma página de configuração que permite escolher o canal da faixa de 2.4GHz em que vai operar.<br />
Caso não se lembre como acessar ou se não foi você quem instalou, provavelmente olhando qual o gateway da sua máquina você acha o IP do roteador (algo como 192.168.0.1).</p>
<p>Na hora de escolher o canal ideal para sua conexão, é preciso saber que parte da banda os roteadores mais próximos estão localizados e, para isso, existe um excelente aplicativo gratuito chamado <a href="http://www.metageek.net/support/downloads/" target="_blank">InSSIDer</a> que fornece informações bem detalhadas.</p>
<p><a href="http://ivnaan.files.wordpress.com/2011/10/wifi.png"><img src="http://ivnaan.files.wordpress.com/2011/10/wifi.png?w=510&#038;h=343" alt="" title="wifi" width="510" height="343" class="aligncenter size-full wp-image-590" /></a></p>
<p>Em uma das abas do programa, ele mostra os canais das redes ao alcance, assim como suas intensidades. Ele também mostra a intensidade ao longo do tempo além de outras informações como fabricante, velocidade da rede, largura do canal etc.</p>
<p>Assim, é fácil escolher o canal do seu Wi-Fi apenas verificando qual está menos utilizado (geralmente as extremidades).</p>
<p>Outra coisa é, se você tem um Wi-Fi 802.11n de 300mpbs (bastante comum nos roteadores de 2011) ele pode ocupar o dobro da banda no espectro por utilizar 2 canais, o que melhora a qualidade geral da sua internet, mas causa mais interferência na dos outros <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Esse é um programa que vale a pena ter instalado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/589/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=589&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/10/11/escolhendo-o-canal-do-wi-fi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/10/wifi.png" medium="image">
			<media:title type="html">wifi</media:title>
		</media:content>
	</item>
		<item>
		<title>Python 3 &#8211; exec e outras mudanças</title>
		<link>http://ivnaan.wordpress.com/2011/10/06/python-3-exec-e-outras-mudancas/</link>
		<comments>http://ivnaan.wordpress.com/2011/10/06/python-3-exec-e-outras-mudancas/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 18:59:31 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[exec]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Python 3]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=572</guid>
		<description><![CDATA[Já tem um tempo que tento usar somente Python 3 para meus projetos em Python, mas, como muita gente ainda está presa em versões antigas (como o pessoal do CentOS que há um mês mudou do Python 2.4 para o ainda defasado 2.6), sou obrigado a trabalhar com os dois ambientes. Portar pequenos programas de <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=572&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Já tem um tempo que tento usar somente Python 3 para meus projetos em Python, mas, como muita gente ainda está presa em versões antigas (como o pessoal do CentOS que há um mês mudou do Python 2.4 para o ainda defasado 2.6), sou obrigado a trabalhar com os dois ambientes.</p>
<p>Portar pequenos programas de uma versão para outra pode ser bastante simples (como no <a href="http://txt2tags.org/" target="_blank">Txt2Tags</a> que precisei de umas 2 ou 3hs para fazer funcionar) quando já se conhece os possíveis problemas e suas soluções, mas nem tudo está bem documentado.</p>
<p>Claro que tudo isso seria muito mais difícil se não houvesse script chamado <code><a href="http://docs.python.org/library/2to3.html" target="_blank">2to3.py</a></code> que vem junto com as versões mais novas do interpretador para automatizar o processo. O problema que existem coisas que ele é incapaz de traduzir ou que precisam de mudanças mais bruscas no código para que funcionem.</p>
<p><del datetime="2011-12-07T16:45:19+00:00">Por algum motivo, o site &#8220;<a href="http://diveintopython3.org" target="_blank">Dive into Python 3</a>&#8221; que tinha uma versão online do <a href="http://www.amazon.com/Dive-Into-Python-Books-Professionals/dp/1430224150" target="_blank">livro homônimo</a> foi removido do ar e perdi a melhor referência para o tópico que existia</del>, ** Encontrei um novo mirror do <a href="http://www.getpython3.com/diveintopython3/" title="Dive into Python 3">Dive into Python 3</a> **</p>
<p>Também existem <a href="http://wiki.python.org/moin/PortingPythonToPy3k">outros</a> <a href="http://docs.python.org/dev/howto/pyporting.html">bons</a> <a href="http://techspot.zzzeek.org/2011/01/24/zzzeek-s-guide-to-python-3-porting/" target="_blank">textos</a> por ai.</p>
<p>Algumas das <a href="http://docs.python.org/release/3.0.1/whatsnew/3.0.html">mudanças</a> mais importantes na nova versão são os iteradores usados em lugares que antes retornavam listas, o uso de unicode por padrão (que na minha opinião já vale por todo o trabalho de portar código) e a troca de algumas palavras-chaves (statements) por funções e vice-versa.</p>
<p>Sobre essa última mudança, as palavras-chave tem o poder de mudar o local em que se encontram enquanto outros nomes podem significar qualquer coisa que o programador queira e só podem ser verificados em tempo de execução, não podendo transformar o ambiente.</p>
<p>Por exemplo, o comando <code>yield</code> faz com que o a função que o contenha seja transformada num <a href="http://wiki.python.org/moin/Generators">gerador</a> mesmo que ele nunca seja executado ou tenha bytecode para isso!</p>
<p><pre class="brush: python;">
def gerador():
    if 0:
        yield
</pre></p>
<p>Neste código acima, o interpretador vai ver que o <code>if</code> nunca será executado e não vai gerar bytecode para nada dentro dele (no caso o yield), mas a função não vai retornar o implícito None quando for chamada. Ela vai retornar um gerador vazio que pode ser usado num <code>loop for</code>.</p>
<p>Usando o módulo <code>dis</code> para desmontar bytecode vemos que a função só retorna None, mas ela vai ter um flag para mostrar sua utilidade:</p>
<p><pre class="brush: python;">
&gt;&gt;&gt; dis.dis(gerador)
  2           0 LOAD_CONST               0 (None)
              3 RETURN_VALUE
</pre></p>
<p>Ainda sobre isso, <code>True</code>, <code>False</code> e <code>None</code> agora são palavras reservadas e que não podem ser modificadas, fazendo com que, se o exemplo acima fosse feito com <code>False</code> ao invés de <code>0</code>, ele geraria bytecode no Python 2, mas não no Python 3!</p>
<p>No sentido contrário, as palavras-chave <code>print</code> e <code>exec</code> do Python 2 agora são funções e não podem mais alterar seu ambiente.</p>
<p>No caso do <code>print</code>, não tem problema algum e a sintaxe ficou bem melhor, mas o <code>exec</code> (que normalmente seu uso não é uma boa prática de programação) pode ter um comportamento bem diferente nas duas versões do interpretador.</p>
<p>Essa informação não vai ser encontrada na documentação do Python (apenas <a href="http://docs.python.org/dev/library/functions.html#exec" target="_blank">alguns avisos</a> que não explicam bem a situação) e geralmente a pessoa vai procurar saber disso quando bater de cara com esse problema e nada funcionar.</p>
<p>Olhe o código abaixo (Não tome como exemplo de boa programação):</p>
<p><pre class="brush: python;">
a = 1
def f():
    exec(&quot;a = 2&quot;)
    print(a)

f()
print(a)
</pre></p>
<p>No Python 2, a função vai imprimir &#8220;2&#8243; e o outro print vai imprimir &#8220;1&#8243;, como esperado. No Python 3, o número &#8220;1&#8243; vai ser impresso nos dois casos.</p>
<p>O que aconteceu?</p>
<p>O meu amigo <code>dis</code> mostra como a variável &#8220;<code>a</code>&#8221; é chamada no bytecode para impressão dentro da função:</p>
<p>Python 2:<br />
<pre class="brush: python;">
3            8 LOAD_NAME                0 (a)
</pre></p>
<p>Python 3:<br />
<pre class="brush: python;">
3           13 LOAD_GLOBAL              2 (a)
</pre><br />
Como o Python 3 não consegue ver nenhum <code>a</code> dentro da função, ele assume que é uma palavra definida globalmente e vai embora. No Python 2, é percebida a existência da palavra <code>exec</code> e transforma a busca por um nome sendo primeiro no namespace local e, se não encontrar, no namespace global.</p>
<p>O que, por um lado traz o resultado &#8220;desejado&#8221;, também faz todos os acessos a funções e variáveis serem mais lento.</p>
<p>Soluções:<br />
 1 &#8211; Não usar <code>exec</code>.</p>
<p>Praticamente sempre é possível fazer uma solução sem <code>exec</code> que seja simples, mas se for necessário, é preciso tomar cuidado com essa mudança ou passar um segundo parâmetro para a função dizendo em que namespace você quer se o resultado seja avaliado e usar a informação nele.</p>
<p>Normalmente, ninguém usa <code>exec</code> para situações como a que eu mostrei, mas para gerar conteúdo (funções, classes, subclasses, etc) em tempo de execução e muitas vezes existem ferramentas melhores, como as <a href="http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python/6581949#6581949" title="Excelente texto sobre metaclasses" target="_blank">metaclasses</a> e os <a href="http://stackoverflow.com/questions/739654/understanding-python-decorators/1594484#1594484" title="Melhor texto sobre decoradores que se pode encotrar" target="_blank">decoradores</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/572/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=572&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/10/06/python-3-exec-e-outras-mudancas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>
	</item>
		<item>
		<title>ZZ no Python</title>
		<link>http://ivnaan.wordpress.com/2011/05/09/zz-no-python/</link>
		<comments>http://ivnaan.wordpress.com/2011/05/09/zz-no-python/#comments</comments>
		<pubDate>Mon, 09 May 2011 21:19:37 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[zz]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=561</guid>
		<description><![CDATA[Pra quem não conhece, existe um conjunto de mini-programas para shell muito legal chamado Funções ZZ, criado pelo Aurélio Jargas (@oreio). [Atualizado!] &#8211; Veja as novas funcionalidades no fim Não sei se alguém já fez, mas criei um wrapper para essas funções em python, para os que já tem o ícone do Python no desktop <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=561&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pra quem não conhece, existe um conjunto de mini-programas para shell muito legal chamado <a href="http://funcoeszz.net/" target="_blank">Funções ZZ</a>, criado pelo Aurélio Jargas (@<a href="http://twitter.com/#!/oreio" target="_blank">oreio</a>).</p>
<p><strong>[Atualizado!]</strong> &#8211; Veja as novas funcionalidades no fim</p>
<p>Não sei se alguém já fez, mas criei um wrapper para essas funções em python, para os que já tem o ícone do Python no desktop e não querem abrir um terminal <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Disponível em <a href="http://dl.dropbox.com/u/6016495/zz.py" target="_blank">http://dl.dropbox.com/u/6016495/zz.py</a>. Funciona tanto em Python 2 como em Python 3.</p>
<p>Exemplos:<br />
<pre class="brush: python;">
&gt;&gt;&gt; import zz
&gt;&gt;&gt; int(zz.calcula('19+23'))
42
&gt;&gt;&gt; zz.senha()
'k23Civ'
&gt;&gt;&gt; zz.ramones()
'Come back baby, come back'
&gt;&gt;&gt; zz.dolar
09/05/2011 compra   venda   hora
Comercial   1,618   1,620   17:01   +0,18
Paralelo    1,700   1,820   20/2/2011   0,00
Turismo     1,560   1,730   16:16   +0,58

&gt;&gt;&gt; print(zz.loteria('megasena'))
megasena:
   08 - 11 - 14 - 30 - 36 - 38 
   Concurso 1281 (07/05/2011)
   Acumulado em R$ 2.000.000,00 para 11/05/2011

&gt;&gt;&gt; zz.cpf('11111111111')
'CPF válido'
&gt;&gt;&gt; zz.converte('cf', 32)
'32 C = 89.60 F'

</pre></p>
<p><strong>[Novo!]</strong><br />
Agora também funciona com Pipes, podendo encadear funções ZZ e usar STDIN!<br />
Mais exemplos:<br />
<pre class="brush: python;">
&gt;&gt;&gt; '1+2+3+4' | zz.calcula
'10'
&gt;&gt;&gt; print('a\nb\nc\nd\na\nb\nc' | zz.uniq)
a
b
c
d
&gt;&gt;&gt; 'oi, beleza?, oi, e ai, oi io, oi' | zz.contapalavra('oi', pipe=True)
'4'

</pre></p>
<p>Note que, se quiser ter uma chamada de função junto com o pipe, tem que adicionar o argumento &#8220;pipe=True&#8221;, senão ele calcula primeiro a resposta e tenta fazer a operação &#8216;or&#8217; entre as strings. Podia ser esse segundo o comportamento padrão, mas teria que usar sempre um pipe pra pegar o valor final, que não é minha intenção.</p>
<p>A ideia de usar o operador &#8216;or&#8217; pra fazer ligação entre chamadas de funções eu peguei desse site: <a href="http://dev-tricks.net/pipe-infix-syntax-for-python" target="_blank">http://dev-tricks.net/pipe-infix-syntax-for-python</a></p>
<p>Se quiser usar, pode colocar diretamente na pasta de módulos do Python, como por exemplo (no Linux):<br />
/usr/local/lib/python<em>X.Y</em>/dist-packages</p>
<p>Bônus:<br />
E, pra quem quiser, apresento o modo mais estranho de calcular 2+2+2+2:<br />
<pre class="brush: python;">
&gt;&gt;&gt; int((zz.calcula('2+2')[:-1]+'+2' | zz.calcula(pipe=True))[:-1] + '+2' | zz.calcula)
8
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/561/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=561&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/05/09/zz-no-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>
	</item>
		<item>
		<title>Python e Qt</title>
		<link>http://ivnaan.wordpress.com/2011/03/26/python-e-qt/</link>
		<comments>http://ivnaan.wordpress.com/2011/03/26/python-e-qt/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 06:11:38 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[PyQt]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Serial]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=545</guid>
		<description><![CDATA[Esse post não se chama Python + Arduino (Parte 3) porque agora estou usando outro microcontrolador, um Cortex M3. Aliás, a ideia aqui é mostrar o uso de PyQt, um binding para usar Qt com Python. Após baixar e instalar, você pode começar a programar interfaces no método convencional ou usar o QtDesigner (ferramenta do <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=545&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esse post não se chama Python + Arduino (Parte 3) porque agora estou usando outro microcontrolador, um Cortex M3.<br />
Aliás, a ideia aqui é mostrar o uso de PyQt, um binding para usar Qt com Python.</p>
<p>Após <a href="http://www.riverbankcomputing.co.uk/software/pyqt/download">baixar</a> e instalar, você pode começar a programar interfaces no método convencional ou usar o QtDesigner (ferramenta do Qt) para fazer isso.</p>
<p>Por exemplo, você pode fazer assim:</p>
<p>Abra o QtDesigner e crie um novo projeto. Pode ser Widget ou MainWindow, faz pouca diferença no arquivo gerado.<br />
<a href="http://ivnaan.files.wordpress.com/2011/03/vazio.png"><img src="http://ivnaan.files.wordpress.com/2011/03/vazio.png?w=510&#038;h=382" alt="" title="vazio" width="510" height="382" class="aligncenter size-full wp-image-554" /></a></p>
<p>Coloque seus botões, labels, caixas, etc:</p>
<p><a href="http://ivnaan.files.wordpress.com/2011/03/btn1.png"><img src="http://ivnaan.files.wordpress.com/2011/03/btn1.png?w=510" alt="" title="btn1"   class="aligncenter size-full wp-image-551" /></a></p>
<p>Junte os sinais que não precisam de código. Aqui eu coloquei a caixa e o slider para um atualizar o valor do outro e o checkbox para desativar ou ativar o frame contendo a caixa e o slider.</p>
<p><a href="http://ivnaan.files.wordpress.com/2011/03/sinais.png"><img src="http://ivnaan.files.wordpress.com/2011/03/sinais.png?w=510" alt="" title="sinais"   class="aligncenter size-full wp-image-553" /></a></p>
<p>Agora, você vai salvar um arquivo no formato .ui, que é um XML que vai ser usado para gerar o nosso programa.</p>
<p>Dentro da pasta de instalação do PyQt, que fica dentro do diretório do Python, existe uma ferramenta chamada pyuic4, que faz a conversão. No Linux, você pode rodar o programa diretamente, mas no Windows é uma boa criar um arquivo .bat contendo o comando que vai ser usado para converter o arquivo XML em código Python.</p>
<blockquote><p>@&#8221;C:\Python32\python&#8221; &#8220;C:\Python32\Lib\site-packages\PyQt4\uic\pyuic.py&#8221; controle.ui &gt; form.py</p></blockquote>
<p>Verifique a pasta de instalação e escolha o nome do arquivo que você salvou e salve isso num arquivo com extensão .bat.<br />
Agora é só dar dois cliques que deve surgir um arquivo chamado form.py, que contem uma classe para modificar uma janela que você tenha criado.</p>
<p>Agora você tem que criar um outro arquivo Python para ser seu programa a ser executado e criar alguns objetos. Existem bons tutoriais de PyQt4 pela internet, então não vou ficar detalhando muito.</p>
<p>Basicamente, você tem que criar um QApplication, uma janela (QWidget ou QMainWindow) e passar essa janela para a função do arquivo form.py que vai criar os botões, etc.</p>
<p>Após isso, você tem que conectar os sinais e os slots dos seus objetos para criar as funcionalidades desejadas. Neste caso, a cada evento no slider ou na caixa, um sinal serial está sendo enviado para o microcontrolador.</p>
<p>Cada slot é um novo método que você deve criar ou então usar de um artifício que são as funções lambda do Python.<br />
Imagem do programa sendo executado:<br />
<a href="http://ivnaan.files.wordpress.com/2011/03/exec.png"><img src="http://ivnaan.files.wordpress.com/2011/03/exec.png?w=510&#038;h=384" alt="" title="exec" width="510" height="384" class="aligncenter size-full wp-image-552" /></a></p>
<p>Abaixo um exemplo de código:<br />
Qualquer dúvida, faça um comentário!</p>
<p><pre class="brush: python;">

from PyQt4 import QtGui, QtCore
import sys, serial 
import scan, form

class Main():
    def __init__(self):
        self.app = QtGui.QApplication(sys.argv)
        self.janela = QtGui.QMainWindow()
        self.ui = form.Ui_Form()  #Referências para elementos da janela
        self.ui.setupUi(self.janela)
        self.cria_slots()
        self.encontra_portas()
        self.janela.show()

    def cria_slots(self):
        self.ui.bt_conectar.clicked.connect(self.slot_conexao)
        self.ui.box_valor.valueChanged.connect(self.envia_info)
        self.ui.ck_ativar.clicked.connect(self.set_on_off)

    def encontra_portas(self):
        for porta in scan.scan():
            self.ui.box_porta.addItem(porta[0])

    #Criar outros métodos aqui

if __name__ == '__main__':
    prog = Main()
    prog.app.exec_()

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/545/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=545&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/03/26/python-e-qt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/03/vazio.png" medium="image">
			<media:title type="html">vazio</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/03/btn1.png" medium="image">
			<media:title type="html">btn1</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/03/sinais.png" medium="image">
			<media:title type="html">sinais</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/03/exec.png" medium="image">
			<media:title type="html">exec</media:title>
		</media:content>
	</item>
		<item>
		<title>Python + Arduino (Parte 2)</title>
		<link>http://ivnaan.wordpress.com/2011/03/13/python-arduino-parte-2/</link>
		<comments>http://ivnaan.wordpress.com/2011/03/13/python-arduino-parte-2/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 03:23:09 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Serial]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=525</guid>
		<description><![CDATA[Além de plotar gráficos, com o Python é possível criar interfaces para modificar parâmetros do microcontrolador, enviando dados pela porta serial. Como já visto na Parte 1 deste assunto, é preciso instalar o PySerial além do Python. Desta vez eu fiz em uns 30 minutos um programa para enviar ao Arduino um número de 0 <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=525&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Além de plotar gráficos, com o Python é possível criar interfaces para modificar parâmetros do microcontrolador, enviando dados pela porta serial.</p>
<p>Como já visto na <a target="_blank" href="http://ivnaan.wordpress.com/2011/02/27/python-arduino/">Parte 1</a> deste assunto, é preciso instalar o PySerial além do Python.</p>
<p>Desta vez eu fiz em uns 30 minutos <a target="_blank" href="http://pastebin.com/YRypcRFP">um programa</a> para enviar ao Arduino um número de 0 a 255 (8-bit) que serve para mudar o valor da resistência de um potenciômetro digital que deveria estar ligado à um amplificador de som.</p>
<p><a href="http://ivnaan.files.wordpress.com/2011/03/controle_volume.png"><img src="http://ivnaan.files.wordpress.com/2011/03/controle_volume.png?w=510" alt="" title="controle_volume"   class="aligncenter size-full wp-image-526" /></a></p>
<p>Estou sem o amplificador no momento, então, para visualizar as mudanças coloquei um led para acender com PWM dentro do programa do arduino.</p>
<p><pre class="brush: cpp;">
/*
 * Exemplo de leitura serial com o Arduino
 * Colocar isso dentro de um loop do programa
 */

char palavra[10];
unsigned char valor;

if (Serial.available()) {
    delay(100);
    unsigned char n = 0;
    while (Serial.available() &gt; 0) {
        palavra[n++] = (Serial.read());
        //Cuidado com escrita fora do array
    }
    palavra[n] = '&#092;&#048;';

    valor = atoi(palavra);

    /*Usar o 'valor' para fazer alguma coisa, 
      como acender um Led com PWM*/
}
</pre></p>
<p>Outro dia coloco vídeo do sistema funcionando.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/525/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=525&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/03/13/python-arduino-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/03/controle_volume.png" medium="image">
			<media:title type="html">controle_volume</media:title>
		</media:content>
	</item>
		<item>
		<title>Python + Arduino</title>
		<link>http://ivnaan.wordpress.com/2011/02/27/python-arduino/</link>
		<comments>http://ivnaan.wordpress.com/2011/02/27/python-arduino/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 00:30:04 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sensores]]></category>
		<category><![CDATA[Serial]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=505</guid>
		<description><![CDATA[Não, ainda não dá para programar em Python para o ATmega, mas dá para acessar a porta serial pelo Python. Recentemente descobri a existência do PySerial, um módulo para fazer acesso às portas seriais pelo Python, que tem me ajudado bastante a processar dados adquiridos pelo meu microcontrolador. A melhor parte é que você pode <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=505&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Não, ainda não dá para programar em Python para o ATmega, mas dá para acessar a porta serial pelo Python.</p>
<p>Recentemente descobri a existência do <a href="http://pyserial.sourceforge.net/">PySerial</a>, um módulo para fazer acesso às portas seriais pelo Python, que tem me ajudado bastante a processar dados adquiridos pelo meu microcontrolador.</p>
<p>A melhor parte é que você pode coletar dados e, com ferramentas como Numpy e Matplotlib fazer diversas transformações e plotar gráficos bem interessantes.</p>
<p>Por exemplo, tenho um display de LCD cuja intensidade de luz é controlada por PWM provido pelo Arduino. A intensidade é escolhida de acordo com um valor lido num divisor resistivo com um resistor de 4.7K e um foto-resistor (LDR) que varia de 0 a 20K.</p>
<p>Eu escrevi um pouco sobre LDR <a href="http://ivnaan.wordpress.com/2009/10/05/luminosidade/">aqui</a>.</p>
<p>Para fazer o PWM, a tensão é lida numa porta analógica e passa por uma função escolhida empiricamente para a intensidade de luz ficar adequada ao ambiente. Sabe aquela coisa de que você tá querendo dormir e tem sempre um led de computador, televisão, aparelho de DVD ou outros aceso? Neste caso, o display fica com um mínimo de luminosidade quando está escuro.</p>
<p>Abaixo um gráfico gerado pelo sensor, usando Python.</p>
<p>Tensão lida(Azul), PWM (Verde) X Horário do dia:<br />
<a href="http://ivnaan.files.wordpress.com/2011/02/ldr_pwm_completo.png"><img src="http://ivnaan.files.wordpress.com/2011/02/ldr_pwm_completo.png?w=510&#038;h=365" alt="" title="ldr_pwm_completo" width="510" height="365" class="aligncenter size-full wp-image-508" /></a></p>
<p>Coloquei no pastebin um <a href="http://pastebin.com/CxzVC3b7">pequeno script</a> em Python para coletar dados e salvar num arquivo.</p>
<p>Modo de uso:<br />
1) Primeiro modifique a porta serial para a que você usa. No Linux é &#8220;<strong>/dev/ttyUSB</strong>&#8220;, no Windows é &#8220;<strong>COM</strong>&#8220;. Escolha também a taxa de transmissão adequada. O meu Arduino fica variando de /dev/ttyUSB0 para /dev/ttyUSB1, por isso tem uma função que busca a porta aberta.</p>
<p>2) Chame o script passando o número de amostras (o microcontrolador deve mandar quebras de linhas entre as amostras) e o nome do arquivo a ser gerado. Exemplo:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python meu_script 1234 nome_do_arquivo.txt</p>
<p>Para interromper a amostragem, aperte <strong>Ctrl+C</strong> e os dados serão salvos no arquivo antes de terminar o programa.</p>
<p>Para número indeterminado de amostras, coloque 0. Vai ficar pegando dados até você apertar Ctrl+C.</p>
<p>Programa foi escrito para Python 3, mas a única modificação necessária para Python 2 é retirar a chamada de str() na função de amostragem, pois a aquisição de dados é feito em strings de bytes e não unicode.</p>
<p>Os dados são salvos no arquivo assim:<br />
['123', '546', '789', ... ]</p>
<p>Para obtê-los novamente no Python, faça:<br />
<strong>&gt;&gt;&gt; minha_lista = eval( open(&#8216;nome_do_arquivo.txt&#8217;).read() )</strong></p>
<p>Se estiver usando valores inteiros, converta a lista:<br />
<strong>&gt;&gt;&gt; minha_lista = [int(i) for i in minha_lista]</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/505/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=505&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/02/27/python-arduino/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/02/ldr_pwm_completo.png" medium="image">
			<media:title type="html">ldr_pwm_completo</media:title>
		</media:content>
	</item>
		<item>
		<title>Caracteres personalizados</title>
		<link>http://ivnaan.wordpress.com/2011/02/18/caracteres-personalizados/</link>
		<comments>http://ivnaan.wordpress.com/2011/02/18/caracteres-personalizados/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 22:57:27 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[LCD]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=478</guid>
		<description><![CDATA[Estava vendo um post do Hack a day que mostrava um relógio num display de texto com os caracteres personalizados. Cada letra do display de texto, ao menos esses com controlador HD44780 ou similar, é uma pequena matriz de 8 linhas por 5 colunas, sendo que você apenas escolhe o carácter e o controlador preenche <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=478&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estava vendo um post do <a target="_blank" href="http://hackaday.com/2011/02/15/ir-controlled-musical-alarm-clock/">Hack a day</a> que mostrava um relógio num display de texto com os caracteres personalizados.</p>
<p>Cada letra do display de texto, ao menos esses com controlador HD44780 ou similar, é uma pequena matriz de 8 linhas por 5 colunas, sendo que você apenas escolhe o carácter e o controlador preenche a matriz.</p>
<p>Para estilizar os caracteres, você precisa gravar novos na memória volátil do controlador do LCD, sendo que ela tem espaço apenas para 8 (0 a 7 da tabela ASCII, não podem ser impressos). Os outros não podem ser modificados.</p>
<p>A ideia aqui é juntar 3 colunas para formar um número grande. Para isso, é preciso criar os caracteres que vão ser usados para desenhar as partes do número, sendo que precisam ser bem genéricos para que caibam nos 8 espaços da memória.</p>
<p><img src="http://ivnaan.files.wordpress.com/2011/02/alguns1.jpg?w=510" alt="" title="alguns"   class="aligncenter size-full wp-image-483" /></p>
<p>No caso eu usei 5 caracteres. Os três acima e as versões invertidas dos dois últimos. E criei os números como abaixo:</p>
<p><img src="http://ivnaan.files.wordpress.com/2011/02/c123.png?w=510&#038;h=172" alt="" title="c123" width="510" height="172" class="aligncenter size-full wp-image-482" /></p>
<p>Para criar cada um dos 5 caracteres estilizados, é preciso enviar ao LCD o formato de cada uma das 8 linhas com números de 0 a 31, onde cada bit acende um ponto da linha. Você pode usar notação binária (por exemplo 0b10101) ou colocar o número decimal correspondente, se achar mais fácil.</p>
<p>Com as bibliotecas do Arduino, pode ser feito algo como:<br />
<pre class="brush: cpp;">
LiquidCrystal lcd(2, 3, 4, 8, 9, 10, 11);
byte meus_chars[][8] = {{31,31,31,31,31,31,31,31}, 
                        {31,31,0,0,0,0,0,0},   
                        {0,0,0,0,0,0,31,31},
                        {31,31,0,0,0,0,0,31},
                        {31,0,0,0,0,0,31,31}};

for (byte i=0; i&lt;5; i++){
    lcd.createChar(i, meus_chars[i]);
}

//Exemplo de exibição do número 0
lcd.clear();
lcd &lt;&lt; '&#092;&#048;' &lt;&lt; '\1' &lt;&lt; '&#092;&#048;';
lcd.setCursor(0,1);
lcd &lt;&lt; '&#092;&#048;' &lt;&lt; '\2' &lt;&lt; '&#092;&#048;';

</pre></p>
<p>Falando nisso, baixe a biblioteca <a href="http://arduiniana.org/libraries/streaming/">Streaming</a> que faz overload do &lt;&lt; para imprimir coisas no LCD ou na Serial.</p>
<p>Abaixo um vídeo dos números no display:<br />
Meu display 16&#215;2 ainda não chegou. Enquanto isso, continuo com esse 8&#215;2.</p>
<span style="text-align:center; display: block;"><a href="http://ivnaan.wordpress.com/2011/02/18/caracteres-personalizados/"><img src="http://img.youtube.com/vi/8-gTVfRZ0KM/2.jpg" alt="" /></a></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/478/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/478/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/478/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/478/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/478/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/478/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/478/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=478&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/02/18/caracteres-personalizados/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/02/alguns1.jpg" medium="image">
			<media:title type="html">alguns</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/02/c123.png" medium="image">
			<media:title type="html">c123</media:title>
		</media:content>
	</item>
		<item>
		<title>Projeto com display LCD</title>
		<link>http://ivnaan.wordpress.com/2011/02/07/projeto-com-display-lcd/</link>
		<comments>http://ivnaan.wordpress.com/2011/02/07/projeto-com-display-lcd/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 00:07:38 +0000</pubDate>
		<dc:creator>João Bernardo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[LCD]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[sensores]]></category>
		<category><![CDATA[Sistemas Embarcados]]></category>

		<guid isPermaLink="false">http://ivnaan.wordpress.com/?p=471</guid>
		<description><![CDATA[Com o advento do Arduino, fazer sistemas caseiros de controle ficou bem mais fácil, pois a IDE desse microcontrolador traz diversas bibliotecas que precisam de pouca configuração para acessar outros hardwares. No final de semana eu fiz um pequeno projeto onde a hora e temperatura eram apresentadas num display LCD de texto com espaço para <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=471&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Com o advento do Arduino, fazer sistemas caseiros de controle ficou bem mais fácil, pois a IDE desse microcontrolador traz diversas bibliotecas que precisam de pouca configuração para acessar outros hardwares.</p>
<p>No final de semana eu fiz um pequeno projeto onde a hora e temperatura eram apresentadas num display LCD de texto com espaço para 8 caracteres em cada uma das suas duas linhas.</p>
<p><a href="http://ivnaan.files.wordpress.com/2011/02/sdc10894.jpg"><img src="http://ivnaan.files.wordpress.com/2011/02/sdc10894.jpg?w=300&#038;h=225" alt="" title="" width="300" height="225" class="aligncenter size-medium wp-image-472" /></a></p>
<p>Para medir a temperatura eu usei um termômetro digital da Dallas Semiconductor, o <a href="http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf">DS18B20</a>, que tem precisão de 0.0625 grau e já vem calibrado de fábrica.</p>
<p>Esse termômetro é um hardware bastante interessante, pois usa um protocolo chamado 1-Wire que permite diversos aparelhos conectados num fio e pode ser alimentado de forma parasita (pelo próprio fio de comunicação). Inclusive eu testei com dois termômetros conectados no mesmo fio e ambos apresentavam sempre a mesma temperatura (com uma diferença de no máximo 0.1 grau).</p>
<p>Basicamente, eles funcionam com um endereçamento de 64 bits, fazendo com que não exista confusão na comunicação. Essa forma de utilização é conhecida como <a href="http://www.arunet.co.uk/tkboyd/e1didx.htm">microlan</a>.</p>
<p>Para ajustar o horário, a solução mais simples foi mandar um comando serial para o microcontrolador, já que ele está conectado à USB e não tinha botões para colocar.</p>
<p>Abaixo deixo um vídeo onde eu seguro o termômetro e a temperatura (que já estava alta pelo calor do verão) aumenta um pouco mais.</p>
<span style="text-align:center; display: block;"><a href="http://ivnaan.wordpress.com/2011/02/07/projeto-com-display-lcd/"><img src="http://img.youtube.com/vi/9jLoSESVvLE/2.jpg" alt="" /></a></span>
<p>Esse relógio-termômetro é parte de um projeto bem maior que estou fazendo para uma matéria da faculdade. Em breve mais coisas vão aparecer aqui.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivnaan.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivnaan.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivnaan.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivnaan.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivnaan.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivnaan.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivnaan.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivnaan.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivnaan.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivnaan.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivnaan.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivnaan.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivnaan.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivnaan.wordpress.com/471/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivnaan.wordpress.com&amp;blog=9376208&amp;post=471&amp;subd=ivnaan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivnaan.wordpress.com/2011/02/07/projeto-com-display-lcd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67d318db2b7a27b316619de48227ed10?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Vianna</media:title>
		</media:content>

		<media:content url="http://ivnaan.files.wordpress.com/2011/02/sdc10894.jpg?w=300" medium="image" />
	</item>
	</channel>
</rss>
