domingo, 14 de fevereiro de 2016

IoT - Sensor de Temperatura

IoT - Sensor de Temperatura

Tornar uma informação disponível a todo momento (monitoramento contínuo), é um dos conceitos proveniente da Internet das Coisas (IoT), um dos temas mais comentados do atual mercado de tecnologia. A internet das coisas torna possível fazer o monitoramento de todo o tipo de situação, através de dados captados por sensores e microchips sem a direta participação de humanos em processos rotineiros, gerando economia e aumento de produtividade quando se trata de rotinas produtivas.

Neste projeto, vamos elaborar um equipamento que deverá coletar a temperatura através do Sensor LM35 e enviar por wifi a um servidor.

Servidor Socket PHP

Primeiramente vamos criar um Servidor Socket  em PHP, para que possamos conectar nosso equipamento e enviar os valores de temperatura.
Para tal devemos ter um servidor Linux + PHP e criar o arquivo abaixo “server.php”

 <?php  
    
 $host = "0.0.0.0";  
 $port = 22000;  
 set_time_limit(0);  
    
 while(1)  
 {  
    
 $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Não foi possível criar o servidor socket.\n");  
 $result = socket_bind($socket, $host, $port) or die("Não foi possível criar o servidor socket.\n");  
 $result = socket_listen($socket, 3) or die("Não foi possível listar a porta selecionada.\n");  
    
 $spawn = socket_accept($socket) or die("Não foi possível estabelecer a conexão socket.\n");  
    
 while(1)  
 {  
  $input = socket_read($spawn, 1024);  
  $input = trim($input);  
  echo $input;  
    
  //Exemplo String Temperatura = [26.7]  
  if ( (substr($input, -1) == "]") and (substr($input, -6,1) == "[") )  
  {  
  date_default_timezone_set('America/Sao_Paulo');  
  $date = date('H:i:s d-m-Y');  
    
  $fp = fopen("temperatura.php", "w+");  
  $escreve = fwrite($fp,"<meta HTTP-EQUIV='Refresh' CONTENT='5;URL=temperatura.php'><font face=arial size=5>  Temperatura: ".substr($input, -5,4)."C - ".$date);  
  fclose($fp);  
  }  
  else  
  {  
  $output = $input;  
  if (socket_write($spawn, $output, strlen ($output)) == false) break;  
  }  
 }  
    
 socket_close($spawn);  
 socket_close($socket);  
 sleep(1);  
 }  
 ?>  

Para inicializar o Servidor Socket digite:
php -q /var/www/html/server.php

*Lembrando que a parte “/var/www/html" indica o caminho do seu servidor PHP.


Este script “server.php” sempre que receber uma nova medição do sensor, criará automaticamente um outro arquivo, chamado temperatura.php 

Abrindo a página "temperatura.php" no navegador podermos acompanhar as medições 
enviadas pelo equipamento:

A pagina possui uma atualização automática de 5 segundos.
A string enviado pelo equipamento, para ser validado pelo servidor, deverá possuir a máscara [00.0]. Ou seja, quando o equipamento medir 25.4 graus, deverá enviar [25.4]

Podemos verificar o funcionamento do servidor e abrir a página no navegador, utilizando um Terminal:



MicroControlador

O escolhido para esta aplicação foi o PIC16F877A, não por necessidade de hardware ou algo específico, e sim porque é o que tinha disponível para teste ;) e vou utilizar um velho kit que tenho (NEO201) que possui vários acessórios incluindo LM35.

Os periféricos necessários para este projeto serão USART e um canal AD, conforme esquema abaixo:

O código fonte para a aplicação segue abaixo (desenvolvido em CCS)

A linha que contém:
printf("AT+SKCT=0,0,192.168.0.41,22000\n");   
É responsável pela conexão ao servidor 192.168.0.41 porta 22000, devemos alterar de acordo com as configurações do seu servidor.

 #include <16F877A.h>  
 #device adc=10  
   
 #FUSES NOWDT          //No Watch Dog Timer  
 #FUSES HS            //High speed Osc   
 #FUSES PUT           //Power Up Timer  
 #FUSES NOPROTECT        //Code not protected from reading  
 #FUSES NODEBUG         //No Debug mode for ICD  
 #FUSES NOBROWNOUT        //No brownout reset  
 #FUSES NOLVP          //No low voltage   
 #FUSES NOCPD          //No EE protection  
 #FUSES NOWRT          //Program memory not write protected  
   
 #use delay(clock=20000000)  
 #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors)  
    
 void main()  
 {  
  float valor,valor1;  
  int contador;  
    
  port_b_pullups(TRUE);  
  setup_psp(PSP_DISABLED);  
  setup_spi(SPI_SS_DISABLED);  
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);  
  setup_timer_1(T1_DISABLED);  
  setup_timer_2(T2_DISABLED,0,1);  
  setup_comparator(NC_NC_NC_NC);  
  setup_vref(FALSE);  
     
  set_tris_a(0x01);   
  setup_adc(adc_clock_div_32);   
  setup_adc_ports(AN0);   
  set_adc_channel(0);  
     
  set_tris_d(0xfe);  
  output_d(0);  
    
  printf("Equipamento OK, aguardando conexão.\n");  
  //Aguarda WIFI estabilizar (20s)  
  delay_ms(20000);  
    
  printf("AT+WJOIN\n");   
  //Aguarda WIFI se conectar ao AP (5s)  
  delay_ms(5000);   
   
  printf("AT+SKCT=0,0,192.168.0.41,22000\n");   
  //Aguarda WIFI se conectar ao servidor socket (5s)  
  delay_ms(5000);   
    
    
  while(1)  
  {  
   //Recebe leitura AD do sensor e envia para porta serial ~1 segundo por   
   //amostragem (devido ao tempo do pisca 500ms ON, 500ms OFF)  
   //Pisca PORTD,0 para indicar funcionamento do equipamento  
     
   output_low(pin_d0);  
   delay_ms(500);  
   output_high(pin_d0);  
     
   valor=0;  
   valor1=0;  
   contador=0;  
     
   //Efetua 10 leituras AD para evitar oscilações, e temporiza 10x40ms (400ms)   
   while (contador<10)  
   {  
   valor = read_adc ();  
   delay_ms(40);     
   valor1 = valor1 + valor;  
   contador=contador+1;  
   }  
   valor = valor1/10;  
     
   //printf(" %2.1f->" ,valor);   
   valor1=5 * valor * 100/1024;    
     
   printf("AT+SKSND=1,6\n");  
   delay_ms(100);  
   printf("[%2.1f]" ,valor1);     
  }  
 }  

Módulo WIFI

E por fim, vamos configurar nosso módulo WIFI !!!
O Módulo WIFI que utilizei neste projeto é o modelo TLG10UA03 (Manual)








Este módulo pode ser facilmente configurado com uso de um software (download) proprietário ou pelo terminal através de comandos AT.




* Para conectar ao módulo deve-se utilizar um conversor TTL/SERIAL.

Selecione a Porta de conexão (COM1 no meu caso), depois clique em SET e selecione a velocidade 9600. Clique em Search e o módulo deverá ser encontrado.

Configure na aba da direita o SSID (AP) que irá utilizar para conectar o módulo na internet, senha de segurança e IP caso deseje utilizar modo estático.

A configuração de IP e Porta SOCKET do servidor não é necessário configurar, uma vez que o próprio microcontrolador informa em seu código o servidor que está se conectando.

Estes módulos possuem também interface web para configuração.
Podem ser adquiridos no AliExpress, eBay, ... pelo preço de 40 a 60 reais (paguei bem mais barato, mas o Dolar...)
Lembrando que podemos utilizar qualquer módulo wifi, mais uma vez utilizei este por possuir peças para teste.



Bom, é isso pessoal. Espero que o material ajude no aprendizado! Abraços. Tom.


Vídeo do Projeto em execução



quarta-feira, 8 de abril de 2015

Onion Omega - Linux - Python, PHP e Javascript...

Micro PC Onion Omega roda Linux e promete ser concorrente do Raspberry Pi


Parece que a onda de micro placas com capacidade de PCs está apenas começando. A Onion Omega, um projeto que está levantando fundos no Kickstarter, tem chamado a atenção não só pelo seu tamanho, mas pelas possibilidades que o dispositivo oferece para desenvolvedores.
A Onion Omega foi pensada para facilitar a criação de protótipos que envolvam projetos de hardware ligados à web, como aplicações de Internet das Coisas (IoT, na sigla em inglês) e robôs.
O grande atrativo da placa em relação aos seus concorrentes, como a Raspeberri PI e a Galileo, da Intel, é a versatilidade. Além de ser compatível com algumas das linguagens de programação mais comuns, como Python, PHP e Javascript, ela tem a capacidade de rodar o sistema operacional Linux.
Pouco mais de um mês para encerrar arrecadação, Onion Omega já bateu a meta no Kickstarter
A Onion Omega foi pensada para facilitar a criação de protótipos que envolvam projetos de hardware ligados à web, como aplicações de Internet das Coisas (IoT, na sigla em inglês) e robôs.
O grande atrativo da placa em relação aos seus concorrentes, como a Raspeberri PI e a Galileo, da Intel, é a versatilidade. Além de ser compatível com algumas das linguagens de programação mais comuns, como Python, PHP e Javascript, ela tem a capacidade de rodar o sistema operacional Linux.
Onion Omega mede apenas um quarto do tamanho de uma Raspeberry PiMedidondo apenas um quarto do tamanho de uma Raspeberry Pi

Para isso, a Onion Omega possui um processador Atheros AR9331 de 400Mhz, 64MB de memória RAM DDR2 e 16MB de memória Flash. A primeira vista, o hardware pode não impressionar, mas olhando pelo tamanho – a placa mede apenas 28.2 mm x 52mm – é possível imaginar o leque de possibilidades de aplicações.
Ela possui ainda Wi-Fi integrado, 18 pinos GPIO, é compatível com USB e possui baixo consumo energético, de apenas 0.6W.
Acessórios
Os fabricantes resolveram não soldar qualquer conector na Onion Omega. Isso permitiu que a placa mantivesse o tamanho reduzido e evitou que conectores ocupassem espaço, mesmo se eles não estivessem sendo utilizados.
Placas de expansão permite que Onion Omega aumente funções Placas de expansão permitem que a Onion Omega aumente suas funções


A solução encontrada para adicionar mais recursos foi desenvolver peças avulsas que pudessem ser encaixadas e retiradas com facilidade. Entre as placas de expansão estão um dock que adiciona uma entrada USB, um conector para energia e outras entradas que permitem adicionar um conector RJ-45 e uma tela OLED.
O interessante é que a Onion Omega permite o uso de mais de uma placa de expansão simultânea. Além disso podem ser adquiridos docks extras, como uma placa Arduino e um controlador mecânico.
Saiba mais em:  
Fonte: TechTudo

quinta-feira, 9 de junho de 2011

Teclado PS2-PIC

Numa certa ocasião, precisei conectar um teclado de computador em um projeto, e utilizei o exemplo que vou postar abaixo para resolver o problema.
Trata-se de um exemplo de como conectar um teclado PS2 ao microcontrolador PIC 16F84, o código é escrito em Assembly (ASM).

O projeto é original, podendo ser alterado para atender as necessidades do seu projeto.

Algumas informações sobre o projeto:

Licença:

¬ "Por Peter Luethi, 2000/12/25, Dietikon, Suíça
http://www.electronic-engineering.ch
Ultima atualização: 2004/04/17

O Código e arquivos que o acompanham poderão ser modificados e distribuídos livremente, desde que o cabeçalho com o meu nome, assim como os avisos permanecerem intactos. O direito de propriedade permanecem comigo. Você não pode vender este software, sem a minha aprovação."


Especificações:

¬ Processador: Microchip PIC 16F84;
¬ Frequência de operação: XT 4,00 MHz;
¬ Produção: 1 MIPS;
¬ RS232 Velocidade: 9600 (depende do módulo incluído);
¬ Saída serial: 9600 baud, 8 bits, sem paridade, 1 stop bit;
¬ Teclado rotina Características: Capacidade de bi-direcional;
¬ Metodologia de aquisição: Baseada em interrupções, rotinas de aquisição de padrões do teclado, com a decodificação para ASCII, (atividades incluindo display LCD e RS232);
¬ Tamanho Código do Programa: 967 palavras de instrução;
¬ Hardware Requerido: AT Teclado, MAX 232, HD44780 (LCD 2x16, 2x20 e 2x40);
¬ Software necessário: terminal RS232.


Limitações:

¬ Não há suporte para caracteres ALT GR.
¬ Sem suporte para teclas de Seta, Home, Del, PageUp, PageDown, Inserir, Fim, por não apresentarem mapa de caracteres ASCII. (Podendo utiliza-los se definido um caractere de conversão, alterando a rotina de código 0xE0).



Abaixo segue link para download. Contém a biblioteca para controle do teclado, arquivos PDF com esquema do circuito e mapa de caracteres ASCII.
O arquivo principal esta denominado "kbd_2xx.asm".

° PS2-PIC.zip

Espero que o exemplo ajude, assim como me ajudou.
Abraços.

terça-feira, 31 de maio de 2011

Controlando um Display LCD 16x2 com PIC 16F84A

Segue um exemplo de como controlar um LCD 16x2 modo 4Bits utilizando microcontrolador PIC16F84A (Pode ser alterado para outro microcontrolador PIC com poucas alterações).

Utilizando uma biblioteca de controle, facilmente configuramos e enviamos caracteres ao LCD, essa biblioteca prepara o PORTB para efetuar essa função.

Características da biblioteca:


Estrutura de configuração do PORTB:

[PINOS PORTB]-----------[PINOS LCD]
[  8    RB2 ]-----------[  4   RS ]
[  9    RB3 ]-----------[  6   E  ]
[  10   RB4 ]-----------[ 11   D4 ]
[  11   RB5 ]-----------[ 12   D5 ]
[  12   RB6 ]-----------[ 13   D6 ]
[  13   RB7 ]-----------[ 14   D7 ]
Comandos disponíveis:

Lcd_Config - Configura e inicializa o display
Lcd_Cmd - Envia um comando ao display
Lcd_Chr - Envia um caracter ao display

Montagem do circuito:







Segue um exemplo de aplicação, e a biblioteca do LCD:

° main.asm
° lcd.inc
° lcd4bit.DSN (Proteus ISIS)
° main.hex

Qualquer dúvida, fico a disposição! Abraços!


sexta-feira, 27 de maio de 2011

O que são Codecs?

*** Fonte: Baixaki ***

Ao abrir determinado vídeo ou música no computador, é muito comum o player utilizado se mostrar incapaz de reproduzir o arquivo. Por mais que o usuário verifique a integridade do arquivo, o problema persiste, causando uma série de dores de cabeça. Nesses casos, normalmente o problema é a falta de instalação de algum codec.

Codecs nada mais são do que alguns arquivos responsáveis por fazer a codificação e decodificação de determinados arquivos de mídia. Eles permitem a compactação de arquivos, fazendo com que vídeos e músicas não ocupem tanto espaço do disco rígido, ao mesmo tempo em que mantêm qualidade visual e sonora.

Explicando de maneira resumida, codecs são códigos próprios de cada formato utilizados para diminuir um arquivo, permitindo economia de espaço. Para que o computador seja capaz de ler a informação contida nesses arquivos, é necessário que possua os codecs correspondentes instalados. É como se fosse um intérprete, capaz de entender e se comunicar nas mais diferentes linguagens.

Pacotes de codecs

Atualmente existem diversos formatos de codecs diferentes, cada um deles sendo mais bem sucedido que o outro no que diz respeito a compactar informações sonoras ou visuais. Devido a essa grande diversidade, é quase impossível saber o código utilizado em todos os arquivos que desejamos reproduzir no computador.

Por isso se torna útil possuir um pacote de codecs instalado no computador. Estes programas possibilitam decodificar automaticamente os mais diversos formatos diferentes, dando mais comodidade ao usuário que não quer ter dor de cabeça na hora de assistir a um vídeo ou escutar uma música.

XP Codec Pack
É um dos pacotes de codecs mais completos disponíveis atualmente, permitindo que você abra os formatos mais comuns de músicas e vídeos sem dificuldades. Junto aos diversos códigos, o programa ainda traz o Media Player Classic, um player de vídeo bastante completo e leve, que dispensa a utilização de outros aplicativos para acessar arquivos de mídia.



Até a próxima, abraços.

sábado, 14 de maio de 2011

Ganhe DINHEIRO com Click ?!

Ganhar Dinheiro com clique, dindin, grana, bufunfa...

Bom realmente ainda não sei o final disso, se a grana vem ou não vem. Enfim resolvi fazer alguns testes, comecei pelo site Beruby.

Efetuei meu cadastro, iniciei alguns cliques, foram creditados alguns valores (baixos, centavos, mas esta lá). Comecei a aumentar minha rede, mais valores vêem sendo creditados em meu saldo.

Ao atingir $10 é possível solicitar uma ordem de pagamento... atualmente tenho pouco mais de $2.. não faz mto tempo que comecei, e também não tenho feito cliques todos os dias...
O "segredo" aparentemente é aumentar sua rede de amigos. Quando seus amigos ganham pelos cliques, vc também ganha algo proporcional aos cliques deles, e aos seus.. e assim por diante.

Deixo minha tela abaixo para que possam observar o estado atual do meu cadastro:



Segue o link para cadastro, caso tenham interesse em experimentar.
http://br.beruby.com/promocode/ur3Xu3


Abraços e até mais.

quinta-feira, 17 de fevereiro de 2011

Simulador LCD Caracter e Gráfico

Visando o melhor entendimento de como funciona os comandos de um display de LCD, durante as pesquisas, localizei um simulador que permite o envio bit a bit dos comandos e descreve na forma de legenda o significado do comando a ser enviado.











Quando programamos um microcontrolador, utilizamos com muita frequencia as bibliotecas disponíveis na IDE utilizada (CCS, MikroC...) enviamos o comando, o projeto funciona e tudo está perfeito.

Porém quando precisamos otimizar o código, por motivos específicos (memória, desempenho), podemos utilizar linguagens de baixo nível (assembler) e o bom entendimento do funcionamento de todo hardware utilizado é indispensável.

Como achei muito interessante e válido para aprendizagem, vou deixar disponível para o uso o tal simulador. Adicionei em um servidor particular pois o simulador é construído com tecnologia JavaScript, e por receio que "saia do ar" a pagina original.

Eis o simulador para LCD Caracter;
LCD Gráfico.

Deixo também os simuladores disponíveis para download e uso offline:
LCD Caracter
LCD Gráfico


É isso.. ;)
Abraços.