Confesso que sinto frio na barriga cada vez que vejo as novidades sendo lançadas. Hoje dia 31 de outubro, dia das bruxas, foi lançado um pequeno monstro pela Texas Instruments. O Beaglebone possui um TI AM3358 ARM Cortex-A8 de 1GHz de velocidade e comporta dentro dele o Kernel do Linux. Isso é realmente assustador. Um microcontrolador que possui muita capacidade de armazenamento, um microcomputador na palma da mão, aberto à programação Shell além da programação tradicional em C e com entradas e saídas com padrão 3,3V.
http://beagleboard.org
segunda-feira, 31 de outubro de 2011
domingo, 30 de outubro de 2011
MSP430 - Existe Vida Além do Arduino
Sim, existe vida além do Arduino, foi o que disse um dos gurus do Arduino no Brasil, Jeronimo Avelar, ao apresentar a MPS430. Confesso que fiquei impressionado com o preço da placa vendida pela Texas Instrument: US$ 4,30. A LauchPad vem com cabo USB, uma IDE própria e dois microcontroladores: MPS430G2211 e MPS430G2231 ambos de 14 pinos. A placa é de baixa potencia e possui sua linguagem própria.
Mais informações:
Cortino - Cortex M3
O Cortino é um equivalente ao Arduino porém o microcontrolador é o Cortex M3. Cortino também pode ser conectado aos Shields do Arduino, a capacidade da Flash Program vai de 32KBytes a 512KBytes, com RAM de 6KBytes a 64Kbytes, entradas e saídas de dados por padrão 5V e velocidade de 72MHz, que é um pouco mais rápido que o Arduino.
Maiores informações:
http://www.bugblat.com/products/cor.html
Maiores informações:
http://www.bugblat.com/products/cor.html
Executando Shell Através do PHP
Mais um pouco sobre integração entre linguagens. Uma das formas de se executar um comando Shell utilizando a programação em PHP é através do comando shell_exec(). Segue o exemplo:
<?PHP
$saida = shell_exec('ls -la'); // executa um comando de listagem de diretório armazenando na variável
echo $saida; // => imprime o conteúdo da variável
?>
No caso acima provavelmente os dados serão armazenados na variavel como um vetor, nesse caso é necessário imprimir dentro de FOR.
Outro exemplo que pode ser utilizado é através do comando system(). No exemplo abaixo uma forma para executar comando de ROOT.
<?PHP
$saida = system('echo "PASSWORD" | sudo -u root -S COMANDO');
echo $saida;
?>
<?PHP
$saida = shell_exec('ls -la'); // executa um comando de listagem de diretório armazenando na variável
echo $saida; // => imprime o conteúdo da variável
?>
No caso acima provavelmente os dados serão armazenados na variavel como um vetor, nesse caso é necessário imprimir dentro de FOR.
Outro exemplo que pode ser utilizado é através do comando system(). No exemplo abaixo uma forma para executar comando de ROOT.
<?PHP
$saida = system('echo "PASSWORD" | sudo -u root -S COMANDO');
echo $saida;
?>
Hijack Main Board
O Hijack é um circuito de interface que funciona quase que da mesma maneira que uma porta USB, uma porta paralela ou uma porta serial no que se refere a troca de informações. Em aparelhos de som antigos o hijack era utilizado apenas para envio de sinal de audio. Porém, nos equipamentos mais novos, o audio vem praticamente direto do processador em formato de dados. O que o hijack faz é acessar o processador diretamente como uma porta que pode receber comandos. Na interface do Hijack é possivel conectar outras interfaces e até mesmo sensores. O Hijack é compativel com o iPhone 3G/3GS/4G, iPod Touch e iPad devices.
Mais informações
http://www.seeedstudio.com/wiki/index.php?title=Hijack#Introduction
http://www.seeedstudio.com/depot/hijack-main-board-p-917.html?cPath=174
Mais informações
http://www.seeedstudio.com/wiki/index.php?title=Hijack#Introduction
http://www.seeedstudio.com/depot/hijack-main-board-p-917.html?cPath=174
Iteaduino
Mais uma novidade no mercado é a Iteaduino. O Iteaduino é similar e compatível com o Arduino porém vem com bluetooth master e slave imbutidos, módulo HC-05 operando com 3,3V e 5V. O microcontrolador é o ATMega328P e a placa possui interface UART/IIC.
Mais detalhes e compra:
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=50_51&products_id=474
Mais detalhes e compra:
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=50_51&products_id=474
sábado, 29 de outubro de 2011
Capturando Dados em Tempo Real
Alguns sites estão fazendo bastante sucesso dentro da área de automação. Alguns microcontroladores, como o Arduino, conseguem enviar dados pela internet através de requisições http e sockets. Para trabalhar com a leitura desses dados geralmente um software é utilizado. O Processing, o SCADA e o Pachube são alguns desses softwares que fazem a captura dos dados de diversos tipos de sensores e chaves que são enviados através dos microcontroladores. A vantagem da utilização de sites prontos é a simplicidade de fazer um cadastro com login e senha e já utilizar o site para a captura dos dados enviados. Os dados podem ser visualizados de diversas maneiras que incluem até mesmo a customização de gráficos.
http://www.scadabr.com.br/
http://processing.org/
https://pachube.com/
http://www.scadabr.com.br/
http://processing.org/
https://pachube.com/
Projeto Climaduino e Monitora Cerrado
O Climaduino e o Monitora Cerrado são projeto desenvolvido através da iniciativa da comunidade de Arduino de Brasília. Tenho acompanhado os projetos de perto e inclusive já comprei e recebi os sensores e as dicas utilizadas no projeto para poder participar também. Os projetos são feitos através de uma rede de desenvolvedores de Arduino onde é colocado um sensor de Temperatura e Humidade conectados na placa e o seu sinal medido é enviado ao site com os valores nas diversas regiões medidas. Atualmente o pessoal do Monitora Cerrado participou da feira da Semana Nacional de Ciência e Tecnologia da UNB. O Climaduino e o Monitora Cerrado podem ser acessados nos sites:
http://climaduino.net.br/
http://arduinolabs.in/tag/monitora/
http://semanact.mct.gov.br/index.php/content/view/5193.html
http://climaduino.net.br/
http://arduinolabs.in/tag/monitora/
http://semanact.mct.gov.br/index.php/content/view/5193.html
Arduino Comunicação com Bluetooth
No Arduino é necessário o Shield de Bluetooth conectado na placa. O procedimento é parecido com o envio de dados através da Serial, que na verdade não deixa de ser. O que indica que o sinal está sendo enviado por bluetooth é a velocidade que é definida. Com o código abaixo é possível iniciar a transmissão de dados via Bluetooth no Arduino.
void setup()
{
Serial.begin(115200); // start serial communication for Bluetooth
}
void loop() {
if( Serial.available() ) // if data is available to read
{
val = Serial.read(); // read it and store it in 'val'
Serial.println("Data received") // Send info back
}
}
IMEI - O IP do Celular
O IMEI é a abreviação de International Mobile Equipment Identity - Identificação Internacional de Equipamento Móvel - um número único para cada telefone celular, normalmente encontrado atrás da bateria.
Outra forma de se obter o IMEI é digitar direto no aparelho o código: *#06# .
Outra forma de se obter o IMEI é digitar direto no aparelho o código: *#06# .
quinta-feira, 27 de outubro de 2011
Reportagem Sobre Arduino no IEEE
A pitoresca cidade de Ivrea, que fica no rio, azul-esverdeado, Dora Baltea, no norte da Itália, é famoso por seus reis oprimidos. Em 1002, King Arduin se tornou o governante do país, só para ser destronado pelo rei Henry II, da Alemanha, dois anos depois. Hoje, o Bar di Re Arduino, um pub em uma rua de paralelepípedo na cidade, homenageia sua memória, e é aí que um novo rei improvável nasceu.
O bar é o bebedouro de Massimo Banzi, o co-fundador do projeto italiano eletrônica que deu o nome de Arduino em homenagem ao lugar. Arduino é uma placa de microcontrolador de baixo custo que permite que até mesmo um novato fazer coisas realmente incríveis. Você pode conectar um Arduino para todos os tipos de sensores, luzes, motores e outros dispositivos e software fácil de aprender para programar a sua criação do modo como deverá se comportar. Você pode construir um display interativo ou um robô móvel e compartilhar seu projeto com o mundo, colocando-o na rede.
Lançado em 2005 como uma ferramenta modesta para os estudantes do Interaction Design Institute Ivrea (IDII), Arduino gerou uma revolução do-it-yourself internacionais em eletrônica. Você pode comprar uma placa Arduino para apenas cerca de EUA $ 30 ou construir o seu próprio a partir do zero: Todos os esquemas de hardware e código-fonte estão disponíveis gratuitamente sob licença pública. Como resultado, o Arduino tornou-se um dos mais influentes hardwares open-source de seu tempo.
A pequena placa agora se tornou a ferramenta go-to para os artistas, amadores, estudantes e qualquer pessoa com um sonho engenhocas. Mais de 250 000 placas Arduino foram vendidos em todo o mundo e que não inclui as resmas de clones. "Foi ela que tornou possível que as pessoas fazerem coisas que não teriam feito de outra forma", diz David A. Mellis, que era um estudante na IDII antes de prosseguir os trabalhos de pós-graduação no MIT Media Lab e é o desenvolvedor de software principal do Arduino.
Há Arduino baseando bafômetros, cubos de LED, sistemas de automação doméstica, displays Twitter, e até kits de análise de DNA. Há partidos e clubes Arduino Arduino. Google lançou recentemente um kit de desenvolvimento baseado em Arduino para seu smartphone Android. Como Dale Dougherty, editor e publisher da revista Make, a bíblia do DIY construtores, coloca, Arduino tornou-se "o cérebro de projetos fabricante."
Mas Arduino não é apenas um projeto open-source que visa tornar a tecnologia mais acessível. É também uma empresa start-up dirigida por Banzi e um grupo de amigos, e é diante de um desafio que até mesmo a sua prancha mágica não pode resolver: como sobreviver sucesso e crescer. "Precisamos fazer o salto que vem", Banzi me diz, "e se tornar uma empresa estabelecida."
Arduino levantou-se fora de um outro grande desafio: como ensinar os alunos a criarem eletrônica, rapidamente. Era 2002, e Banzi, um arquiteto de software barbudo e avuncular, tinha sido provocado por IDII como professor associado de promover novas formas de fazer um design interativo campo nascente, por vezes conhecido como computação física. Mas com um orçamento de encolhimento e tempo de aula limitado, suas opções de ferramentas eram poucas.
Como muitos de seus colegas, Banzi contou com a Stamp BASIC, um microcontrolador criado por empresa da Califórnia Parallax que os engenheiros estavam usando por cerca de uma década. Codificado com a linguagem de programação BASIC, o selo era como uma placa de circuito arrumado, a embalagem os fundamentos de uma fonte de alimentação, um microcontrolador, memória e entrada / saída portas para anexar hardware. Mas o BASIC Stamp tinha dois problemas: Ele não tinha poder de computação suficiente para alguns dos projetos de seus alunos tinham em mente, e também foi um pouco caro demais, além de uma placa de partes básicas poderia custar cerca de EUA $ 100. Ele também precisava de algo que poderia ser executado em computadores Macintosh, que fossem onipresentes entre os designers IDII. E se eles pudessem fazer uma placa que se adequasse às suas próprias necessidades ?
Banzi tinha um colega do MIT que tinham desenvolvido uma linguagem de programação de designer-friendly chamado Processing. Processing foi rapidamente ganhando popularidade porque permitiu mesmo programadores inexperientes a criarem complexas e maravilhosas visualizações de dados. Uma das razões para o seu sucesso foi um ambiente de desenvolvimento extremamente fácil de usar, integrado, ou IDE. Banzi se perguntou se eles poderiam criar ferramentas de software semelhante ao código de um microcontrolador em vez de gráficos em uma tela.
Um estudante no programa, Hernando Barragán, deu os primeiros passos nessa direção. Ele desenvolveu uma plataforma de prototipagem chamado de fiação, que incluía tanto user-friendly um IDE e um ready-to-use placa de circuito. Era um projeto promissor que continua até hoje, mas Banzi já estava pensando maior: Ele queria fazer uma plataforma que era ainda mais simples, mais barato e mais fácil de usar.
Banzi e seus colaboradores foram fortes crentes no software open-source. Como o propósito era criar uma plataforma rápida e facilmente acessíveis, eles sentiram que seria melhor abrir o projeto para tantas pessoas quanto fosse possível, em vez de mantê-lo fechado. Outro fator que contribuiu para essa decisão foi que depois de operar por cinco anos, IDII estava a ficar sem fundos e ia fechar suas portas. Membros do corpo docente temiam que seus projetos não sobrevivessem ou fossem desviados. "Então dissemos, 'Esqueça isso'", lembra Banzi. "'Vamos torná-lo open source'."
O modelo open-source tinha sido muito utilizado para fomentar a inovação de software, mas não hardware. Para fazer o trabalho, eles tiveram que encontrar uma solução de licenciamento apropriado que poderia se aplicar a sua placa. Depois de algumas investigações, eles perceberam que se eles simplesmente olhavam para seu projeto de forma diferente, eles poderiam usar uma licença da Creative Commons, o grupo sem fins lucrativos, cujos acordos são normalmente utilizados para obras culturais, como música e escrita. "Você poderia pensar em hardware como pedaço de cultura que você quer compartilhar com outras pessoas", diz Banzi.
Para fazer a placa, o grupo teve uma premissa, preço de estudante-amigo como sua meta: US $ 30. "Tinha que ser o equivalente a sair para jantar em uma pizzaria", diz Banzi. Eles também queriam torná-la estranha, algo que iria se destacar e ser legal olhando para geeks eruditos. Se outros conselhos foram frequentemente verde, eles fazem a deles azul, enquanto alguns fabricantes economizado na entrada e pinos de saída, eles acrescentar muito para a sua placa. Como um toque final, eles adicionaram um pequeno mapa da Itália na parte de trás da placa. "Um monte de opções de design são estranhos para um engenheiro de verdade", Banzi diz com uma risada de saber ", mas eu não sou um engenheiro real, então eu fiz isso de uma maneira boba!"
Para um dos "reais" engenheiros da equipe, Gianluca Martino, o não-convencional, a abordagem meatball cirurgia para projeto da placa de circuito foi esclarecedora. Martino descreve como um "novo modo de pensar eletrônica", diz ele, "não de uma forma de engenharia, onde você tem que contar eletrodos, mas uma abordagem do-it-yourself ."
O produto que a equipe criou consistia em peças baratas que poderiam ser facilmente encontradas se os usuários quisessem construir seus próprios modelos, como o microcontrolador ATmega328. Mas uma decisão importante era garantir que seria, essencialmente, plug-and-play: algo que alguém poderia tirar de uma caixa, ligar a um computador e usá-lo imediatamente. Placas, como o BASIC Stamp DIYer era necessário desembolsar mais meia dúzia de outros itens que eram adicionados ao custo total. Mas para eles, um usuário poderia simplesmente puxar um cabo USB da placa e conectá-lo a um computador Mac ou PC para programar o dispositivo.
"A filosofia por trás Arduino é que se você quer aprender eletrônica, você deve ser capaz de aprender como desde o primeiro dia, em vez de começar por aprender álgebra", diz outro membro da equipe, telecomunicações, engenheiro David Cuartielles.
A equipe logo colocou essa filosofia para o teste. Eles entregaram em branco 300 placas de circuito impresso para os alunos IDII com uma directiva simples: Olhe para cima as instruções de montagem online, construir o seu próprio modelo, e usá-lo para alguma coisa. Um dos primeiros projetos foi um despertador caseiro que era suspenso no teto por um cabo. Sempre que você apertar o botão snooze, o relógio subiria mais para o ar até que você só tinha de se levantar.
Logo outras pessoas ouviram falar das placas. E elas queriam uma. O primeiro cliente foi um amigo de Banzi, que ordenou uma unidade. O projeto estava começando a decolar, mas uma coisa importante estava faltando-um nome para sua invenção. Uma noite com uma bebida no pub local, que veio a eles: Arduino, assim como o bar e rei.
Palavra de Arduino rapidamente se espalhou online, sem marketing ou publicidade. Logo no início, ele atraiu a atenção de Tom Igoe, um professor de computação física no Programa de Telecomunicações Interativas pela New York University e hoje um membro da equipe principal Arduino. Igoe estava ensinando aos alunos cursos não técnicos com o BASIC Stamp, mas ficou impressionado com recursos do Arduino. "Eles tinham o pressuposto de que você não sabia eletrônica e programação, que você não quer configurar uma máquina inteira apenas para que você possa programar um chip, você pode simplesmente abrir a placa, pressionar upload, e funciona", diz ele. "Também fiquei impressionado com o objetivo de um preço de 30 dólares, o que tornou acessível. Este foi um dos fatores-chave para mim."
A este respeito, o sucesso do Arduino deve muito à existência prévia de Processing e Wiring. Esses projetos deram Arduino uma de suas forças essenciais: ambiente de programação usuário-amigável. Antes de Arduino, um microcontrolador de codificação trouxe com ele uma curva de aprendizado difícil. Com Arduino, mesmo aqueles sem experiência anterior de eletrônicos ganhou acesso a um mundo de hardware anteriormente impenetráveis. Agora, os novatos não têm que aprender muito antes que eles possam construir um protótipo que realmente funciona. É um poderoso movimento num momento em que alguns dos gadgets mais populares lá fora, funcionam como "caixas pretas" que são fechados e patenteados.
Para Banzi, este é talvez o impacto mais importante do Arduino: a democratização da engenharia. "Cinqüenta anos atrás, para escrever o software você precisava de pessoas de avental branco que sabiam tudo sobre os tubos de vácuo", diz Banzi. "Nós habilitamos um monte de gente para criar produtos eles mesmos."
Nem todos os engenheiros amam Arduino. Os mais exigentes lamentam o produto para emburrecimento e criação de produtos e inundam o mercado com produtos hobistas sem brilho. Mellis, no entanto, não vê a inovação como desvalorizar o papel do engenheiro em tudo. "Ao fornecer uma plataforma que permite que o artista ou designer tenham um pouco lá dentro, fica mais fácil para eles trabalharem com engenheiros e dizer, 'Isto é o que eu quero fazer'", diz ele. "Eu não acho que é substituir o engenheiro, é apenas facilitar a colaboração."
Para abastecer uma maior adoção do Arduino, a equipe está explorando como integrá-lo mais profundamente no sistema de ensino, de escolas primárias para as faculdades. Diversas universidades, incluindo Carnegie Mellon e Stanford, já usam Arduino. Mellis tem vindo a estudar como os estudantes e leigos tomam eletrônicos em uma série de workshops no MIT Media Lab. Mellis convida 8 a 10 pessoas para o laboratório, onde é dada uma tarefa para completar ao longo do dia. Os projetos incluíram a construção falantes iPod, rádio FM, e um mouse de computador usando alguns dos mesmos componentes que usam Arduino.
Mas espalhar o evangelho Arduino é apenas parte do desafio. A equipe também deve acompanhar a demanda para as placas. Na verdade, a plataforma Arduino não consiste mais em um tipo de placa -agora há uma família inteira de placas. Além do projeto original, chamado de Arduino Uno, os novos modelos incluem uma placa mais poderosa chamada Arduino Mega, uma placa compacta chamada Arduino Nano, uma placa à prova d'água chamado de Arduino LilyPad, e um recém-lançado, placa Net-enabled chamado de Ethernet Arduino.
Arduino também criou a sua própria indústria caseira para DIY eletrônica. Existem mais de 200 distribuidores de produtos Arduino em todo o mundo, de grandes empresas como SparkFun Electronics, em Boulder, Colorado, para operações de mom-and-pop servirem as necessidades do local. Banzi ouvi recentemente de um homem em Portugal que largou o emprego na empresa de telefonia para vender produtos Arduino de sua casa. Arduino membro da equipa Gianluca Martino, que supervisiona a produção e distribuição, diz que eles estão trabalhando para atingir os mercados emergentes, como China, Índia e América do Sul. Neste ponto, diz ele, cerca de 80 por cento da audiência Arduino é dividida entre os Estados Unidos e a Europa, com o resto espalhados pelo mundo.
Porque a equipe não pode dar ao luxo de centenas de ações de milhares de placas, eles ao invés de produzirem entre 100 a 3000 por dia em uma fábrica perto de Ivrea. A equipe criou um sistema personalizado para testar os pinos em cada placa, que para o Uno inclui 14 E / S digitais pinos, 6 pinos de entrada analógica, e outra 6 pinos para a fonte de alimentação de um desafio de garantia de qualidade grande quando você está manipulação de milhares de unidades por dia. A placa Arduino é barata o suficiente para a equipe a promessa de substituir qualquer placa que não funciona. Martino diz que a taxa de falha é inferior a 1 por cento.
A equipe de Arduino está agora ganhando o suficiente para suportar dois dos seus membros como empregados em tempo integral e está fazendo planos para trazer ainda mais energia à placa de circuito para o povo. Em setembro, na Maker Faire, uma convenção em Nova York, patrocinado pela revista Make, a equipe lançou sua primeira placa com um processador de um 32-bit ARM chip-up a partir da uma de 8 bits do passado. Isto servirá para alimentar a demanda de periféricos mais robustos. The Thing-O-Matic MakerBot, por exemplo, é um kit de impressora 3-D construídos em Arduino, mas se beneficiariam de um processador mais rápido para conseguir tarefas mais complicadas.
Arduino tem um novo impulso este ano, quando o Google lançou uma placa Arduino desenvolvedor baseado para seu sistema Android. Android do Google ADK, ou Kit de Desenvolvimento de acessórios, é uma plataforma que permite um telefone Android interagir com motores, sensores e outros dispositivos. Você pode criar um aplicativo Android que usa a câmera do telefone, sensores de movimento, tela sensível ao toque e conectividade com a Internet para controlar um display ou robô, por exemplo. Os entusiastas dizem que a capacidade que o Android acrescentou abre as possibilidades para projetos de Arduino ainda mais.
A equipe é cautelosa, no entanto, a cerca de complicar Arduino. "O desafio é encontrar uma maneira de acomodar todas as coisas diferentes que as pessoas querem fazer com a plataforma", diz Mellis ", sem torná-lo complexo demais para alguém apenas começando."
Nesse meio tempo, eles estão desfrutando de sua fama improvável. Fãs viajam de muito longe só para ter uma bebida no pub em Ivrea, onde o fenômeno tem o seu nome. "As pessoas vão ao bar e dizer: 'Estamos aqui por causa da placa Arduino,'" diz Banzi. Há apenas um problema, acrescenta com uma gargalhada: O bartenders não sei o que é a placa Arduino.
http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino
Sobre o Autor
Contribuindo editor David Kushner é o autor de Mestres da Magia Jonny Doom (2003), e os miúdos do tubarão de cartão (2005), e Levittown: duas famílias, uma Tycoon, ea luta pelos direitos civis no Subúrbio Legendary América (2009). Em julho de 2011 ele escreveu sobre a controvérsia em torno de hacker britânico Gary McKinnon em "Hacker O Autista."
quarta-feira, 26 de outubro de 2011
Arduino no Visual Studio
O Visual Studio agora possui uma novidade para quem deseja desenvolver para o Arduino.
http://visualmicro.codeplex.com/
http://visualmicro.codeplex.com/
Blogs do Arduino no Brasil
O Arduino apesar de já ser uma febre entre desenvolvedores de um modo
geral, ainda é pouco conhecido pela maioria das pessoas. Apesar de
existir um vasto material na rede são poucos os Blogs dedicados ao
assunto, então resolvi fazer uma lista dos Blogs mais utilizados pela
comunidade do Arduino no Brasil.
http://arduinolabs.in/
http://blogdoje.com.br
http://www.eletronlivre.com.br/
http://artedohardware.wordpress.com/
http://labdegaragem.com
http://blog.bsoares.com.br/
http://arduino-ce.blogspot.com/
http://www.rogercom.com/
http://arduinolabs.in/tag/monitora/
http://paulo.blog.br/blog/climaduino-projeto-monitoracerrado/
http://garoa.net.br
http://www.robocore.net/
http://robotica-escola.blogspot.com/
http://arduinolabs.in/
http://blogdoje.com.br
http://www.eletronlivre.com.br/
http://artedohardware.wordpress.com/
http://labdegaragem.com
http://blog.bsoares.com.br/
http://arduino-ce.blogspot.com/
http://www.rogercom.com/
http://arduinolabs.in/tag/monitora/
http://paulo.blog.br/blog/climaduino-projeto-monitoracerrado/
http://garoa.net.br
http://www.robocore.net/
http://robotica-escola.blogspot.com/
domingo, 23 de outubro de 2011
Ardupilot
O Ardupilot é um Shield que deve ser conectado no Arduino junto com o Shield de GPS. Com o Ardupilot é possivel colocar AirDrones em uma rota específica. O Ardupilot é um piloto automático que corrige a rota do AirDrone e outros tipos de máquinas que precisam de navegação. Abaixo segue um link com um video do Ardupilot funcionando numa aeronave e de um link para o Google Code com mais informações.
http://code.google.com/p/ardupilot/
http://code.google.com/p/ardupilot/
Competição Brasileira de Robótica
Entrando em contato com pessoas que dominam robótica em outros estados acabamos tendo um contato com um mundo ainda desconhecido. Eu sabia que existiam campeonatos de robótica no Brasil em modalidades de luta, porém não sabia que existia uma modalidade para futebol. São diversas as modalidades existentes como a RoboCup Small Soccer ou a RoboCup F-180. Segue um video e o link do evento em MG.
http://www.cbr2011.org
http://www.cbr2011.org
Emulador Linux no Navegador Usando Javascript
Um grupo de Hackers conseguiu a proeza de fazer rodar Linux num navegador através de Javascript. Isso desperta uma certa esperança de fazer rodar dentro do próprio Arduino. Vamos aguardar pra ver como essa tecnologia vai se desenvolver. E pra quem quiser dar uma navegada no Linux usando o navegador pode acessar o site abaixo e dar uma brincada. O emulador só roda no Chrome e no Firefox.
http://bellard.org/jslinux/
http://bellard.org/jslinux/
Ehternet Shield ENC-28J60
Uma opção simples e mais barata para conexões web no Arduino é a placa Shield de Ehternet ENC-28J60. A placa possui um formato menor e não possui entrada para cartões SD como os modelos mais novos. Porém o foramto Stand Alone traz um custo mais baixo.
Um dos sites de compra para a placa é o Itead Studio mas é possível encontrar em outros sites com com preços que variam bastante.
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=18&products_id=224
Um dos sites de compra para a placa é o Itead Studio mas é possível encontrar em outros sites com com preços que variam bastante.
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=18&products_id=224
Estudantes transformam Fusca em carro elétrico no Paraná
A era do conhecimento mostra que estamos dependentes do petróleo por uma mera subversão corporativa. O fato é tão fácil de ser perceber que as pessoas já começam a fazer carros completamente elétricos dentro de casa.
Fritzing - Design e Emulador para Arduino
Navegando em diversos sites percebi que a maioria dos tutoriais de Arduino utilizam uma forma de leyout padrão. E ao tentar descobrir o que era usado para todos esses designs acabei descobrindo o Fritzing. O Fritzing é não apenas usado para design como também é um emulador do Arduino.
O Fritzing pode ser baixado no site:
http://fritzing.org/download/
O Fritzing pode ser baixado no site:
http://fritzing.org/download/
Android + Arduino = Amarino
O Amarino é a interface de software que faz a comunicação com o Arduino. Essa comunicação é feita através do Bluetooth, então é necessário o Arduino estar com o shield de bluetooth rodando. Para instalar o Amarino no Android basta seguir alguns passos do site do Amarino no link abaixo.
http://www.amarino-toolkit.net/index.php/getting-started.html
http://www.amarino-toolkit.net/index.php/getting-started.html
Hexadecimal no Arduino
Para gravar dados em Hexadecimal é muito fácil. Primeiro é necessário importar a biblioteca para gravação na EEPROM. Em seguida o comando write faz a gravação enquanto o comando read faz a leitura. O comando Serial.println envia o dado para a leitura pela porta serial.
Mais informações pelo link http://arduino.cc/forum/index. php/topic,69583.0.html
- #include <EEPROM.h>
- int value;
- void setup()
- {
- Serial.begin(9600);
- EEPROM.write(0,DE);
- EEPROM.write(1,AD);
- EEPROM.write(2,BE);
- EEPROM.write(3,EF);
- EEPROM.write(4,FE);
- EEPROM.write(5,ED);
- value = EEPROM.read(0);
- Serial.println(value,HEX);
- value = EEPROM.read(1);
- Serial.println(value,HEX);
- value = EEPROM.read(2);
- Serial.println(value,HEX);
- value = EEPROM.read(3);
- Serial.println(value,HEX);
- value = EEPROM.read(4);
- Serial.println(value,HEX);
- value = EEPROM.read(5);
- Serial.println(value,HEX);
- }
- void loop()
- {
- }
Mais informações pelo link http://arduino.cc/forum/index.
Arduino Shield Ethernet
Recentemente adquiri uma Ethernet Shield para trabalhar com o Arduino. A placa é conectada diretamente sobre a placa do Arduino e ligada na internet usando um conector RJ-45 padrão. Para testar a placa utilizei os códigos que já vem prontos dentro da biblioteca da IDE do Arduino. Não há segredos! O Arduino é capaz de fazer requisições GET em C e também HttpRequest Ajax. É possível configurar um endereço MAC e um IP address para a placa e ela funcionará como um servidor web. Como as portas do Arduino podem ser setadas para entrada de sinais analógicos e digitais então é possível fazer leituras de diversos tipos de sensores e até mesmo fazer controles via web. A placa do modelo em questão ainda possui um conector para cartão SD.
Pinguino
Dentro do Open Hardware várias possibilidades surgem todos os dias. O Pinguino é um equipamento similar ao Arduino, porém o Pinguino é baseado no Microcontrolador PIC 18F250. Portanto a arquitetura e seus comandos possuem diferenças. A IDE do Pinguino roda em Linux, Windows e MAC, e pode ser programado em C e Assembly.
Mais informações no site
http://www.hackinglab.org/
http://www.hackinglab.org/pinguino/index_pinguino.html
Mais informações no site
http://www.hackinglab.org/
http://www.hackinglab.org/pinguino/index_pinguino.html
terça-feira, 18 de outubro de 2011
Rastreando Clientes pelo PHP
Certa vez tive que fazer um sistema de auditoria para controle de acessos no site. Utilizei alguns comandos de PHP que podem ser muito úteis. Os hackers costumam usar esses blocos em paginas programadas que exibem Erro 404 onde o cliente acredita que a pagina apenas não foi encontrada. Enviam o link para uma pessoa especifica que eles desejam saber o endereço e em seguida iniciam algum tipo de ataque. Esses dados são inseridos em um banco de dados, com Trigger que dispara um e-mail, ou e-mail através de comando disparado por evento JavaScript, avisando o acesso com os dados e o IP do Cliente.
echo "Servidor: " .$_SERVER['REMOTE_ADDR'] ;
echo "<BR>";
echo "X Forward: " . $_SERVER['HTTP_X_FORWARDED_FOR'];
echo "<BR>";
echo "Client IP: " . $_SERVER['HTTP_CLIENT_IP'];
echo "<BR>";
echo "Sistema Operacional: ".PHP_OS;
echo "<BR>";
echo "Seu navegador ".$_SERVER["HTTP_USER_AGENT"];
echo "<BR>";
echo date('Y-m-d H:i:s');
$server = $_SERVER['SERVER_NAME'];
$endereco = $_SERVER ['REQUEST_URI'];
echo "<BR>";
echo "http://" . $server . $endereco;
echo "Servidor: " .$_SERVER['REMOTE_ADDR'] ;
echo "<BR>";
echo "X Forward: " . $_SERVER['HTTP_X_FORWARDED_FOR'];
echo "<BR>";
echo "Client IP: " . $_SERVER['HTTP_CLIENT_IP'];
echo "<BR>";
echo "Sistema Operacional: ".PHP_OS;
echo "<BR>";
echo "Seu navegador ".$_SERVER["HTTP_USER_AGENT"];
echo "<BR>";
echo date('Y-m-d H:i:s');
$server = $_SERVER['SERVER_NAME'];
$endereco = $_SERVER ['REQUEST_URI'];
echo "<BR>";
echo "http://" . $server . $endereco;
Otimizando Posicionamento no Site Através de Robots.txt
Um dos arquivos mais importantes utilizados por motores de busca como Google Search, Yahoo Search, MSN Search é o "Robots.txt". Através dele os motores de busca sabem as páginas que podem ser indexadas. Os motores de busca capturam as palavras chaves da tag "Keywords" e ainda fazem varreduras nos hiperlinks internos do site. Para bloquear uma pasta que não deve ser indexada pelo Google, como uma pasta de sistama tipo "images" ou "admin" utiliza-se a seguinte linha de comando:
Disallow: /admin
Disallow: /images
O arquivo completo ficaria algo como:
# robots.txt gerado em
# marketingdebusca.com.br/robots-txt/
User-agent: Googlebot
Disallow:
User-agent: *
Disallow:
Disallow: /admin
Disallow: /images
O arquivo contém no cabeçalho, geralmente, o endereço do site. Para criar um arquivo Robots.txt corretamente utilize o site:
http://www.marketingdebusca.com.br/robots-txt/
Na da tag de "keywords" dentro <head> utilize as palavras chaves que o google deve utilizar para listar seu site nas buscas:
<meta name="keywords" content="tecnologia, arduino, eletrônica" />
Futuramente farei um post sobre Spiders.
Disallow: /admin
Disallow: /images
O arquivo completo ficaria algo como:
# robots.txt gerado em
# marketingdebusca.com.br/robots-txt/
User-agent: Googlebot
Disallow:
User-agent: *
Disallow:
Disallow: /admin
Disallow: /images
O arquivo contém no cabeçalho, geralmente, o endereço do site. Para criar um arquivo Robots.txt corretamente utilize o site:
http://www.marketingdebusca.com.br/robots-txt/
Na da tag de "keywords" dentro <head> utilize as palavras chaves que o google deve utilizar para listar seu site nas buscas:
<meta name="keywords" content="tecnologia, arduino, eletrônica" />
Futuramente farei um post sobre Spiders.
Mais Ajax
Durante bom tempo tive a oportunidade de trabalhar com Ajax e considero a linguagem de alto potencial. Mais códigos então:
---------------------Coloque no <Head>--------
<script language="JavaScript">
function AjaxRequest()
{
var Ajax=false;
if(window.XMLHttpRequest) //mozilla,safari
Ajax=new XMLHttpRequest();
else if(window.ActiveXObject) //IE
{
try{
Ajax=new ActiveXObject("Mxxml2.XMLHTTP");
}catch(e){
Ajax=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return(Ajax);
}
function chamajax(valor,nomeporta)
{
alert(valor+" "+nomeporta);
var refnomeporta = nomeporta;
var meuvalor = valor;
Ajax=AjaxRequest();
if(Ajax)
{
with(Ajax)
{
v_proc="atulizasistema.php?idporta="+encodeURIComponent(refnomeporta)+"&valor="+encodeURIComponent(meuvalor);
open("POST",v_proc,true);
onreadystatechange=function() {
if(readyState == 4)
{
if(status == 200)
document.getElementById("exibirAqui").innerHTML=responseText
else
alert("Erro!O Sistema não obteve resposta do servidor.");
}
}
setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=iso-8859-1");
send(null);
}
}
</script>
---------------------
O código em questão apresenta algumas coisas interessantes. Um disparo Javascript envia duas variáveis valor e nomeporta que podem ser variáveis de qualquer tipo. O Ajax chama o arquivo atulizasistema.php enviando as variaveis como parametros. Detalhe no comando encodeURIComponent() que vai codificar as variáveis para que elas não apareçam na URL durante o envio. O comando:
document.getElementById("exibirAqui").innerHTML=responseText
Vai chamar o atulizasistema.php e colocar o arquivo inteiro no lugar da tag com a id referida "exibirAqui" que deverá ficar em alguma parte do código onde o Javascript é disparado. Algo como:
<div id="exibirAqui">
Vale lembrar que o Javascript pode fazer dois caminhos para uma variável, no caso acima a variável foi colocada dentro do HTML. Para fazer o inverso, trazer a variável do HTML para o Javascript apos a chamada o comando seria:
var valorCapturado=document.getElementById('idDiv').value;
O contrário também funciona:
document.getElementById('idDiv').value=valorReceber;
Mostrarei mais sobre o potencial do Ajax em Posts futuros.
---------------------Coloque no <Head>--------
<script language="JavaScript">
function AjaxRequest()
{
var Ajax=false;
if(window.XMLHttpRequest) //mozilla,safari
Ajax=new XMLHttpRequest();
else if(window.ActiveXObject) //IE
{
try{
Ajax=new ActiveXObject("Mxxml2.XMLHTTP");
}catch(e){
Ajax=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return(Ajax);
}
function chamajax(valor,nomeporta)
{
alert(valor+" "+nomeporta);
var refnomeporta = nomeporta;
var meuvalor = valor;
Ajax=AjaxRequest();
if(Ajax)
{
with(Ajax)
{
v_proc="atulizasistema.php?idporta="+encodeURIComponent(refnomeporta)+"&valor="+encodeURIComponent(meuvalor);
open("POST",v_proc,true);
onreadystatechange=function() {
if(readyState == 4)
{
if(status == 200)
document.getElementById("exibirAqui").innerHTML=responseText
else
alert("Erro!O Sistema não obteve resposta do servidor.");
}
}
setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=iso-8859-1");
send(null);
}
}
</script>
---------------------
O código em questão apresenta algumas coisas interessantes. Um disparo Javascript envia duas variáveis valor e nomeporta que podem ser variáveis de qualquer tipo. O Ajax chama o arquivo atulizasistema.php enviando as variaveis como parametros. Detalhe no comando encodeURIComponent() que vai codificar as variáveis para que elas não apareçam na URL durante o envio. O comando:
document.getElementById("exibirAqui").innerHTML=responseText
Vai chamar o atulizasistema.php e colocar o arquivo inteiro no lugar da tag com a id referida "exibirAqui" que deverá ficar em alguma parte do código onde o Javascript é disparado. Algo como:
<div id="exibirAqui">
Vale lembrar que o Javascript pode fazer dois caminhos para uma variável, no caso acima a variável foi colocada dentro do HTML. Para fazer o inverso, trazer a variável do HTML para o Javascript apos a chamada o comando seria:
var valorCapturado=document.getElementById('idDiv').value;
O contrário também funciona:
document.getElementById('idDiv').value=valorReceber;
Mostrarei mais sobre o potencial do Ajax em Posts futuros.
domingo, 16 de outubro de 2011
Executável Oculto
Muitos vírus utilizam a técnica que vou descrever. Todo dispositivo que possui armazenamento de arquivos é capaz de fazer isso. Ao conectar a pen drive no computador um arquivo autoexecutável é chamado e a partir de um arquivo oculto um vírus é copiado e executado dentro da máquina.
Primeiro, para um arquivo que geralmente não é visível não é possível de ser selecionado para ser excluído. Para tornar o arquivo oculto, renomeie-o colocando um ponto na frente. Se o arquivo for Eject.jar então ficaria: .Eject.jar
Logo que o arquivo for renomeado ele irá desaparecer da pasta, mas na verdade ele continua lá. E, para visualizá-lo mesmo no modo, basta ativar na janela de navegação a visualização de arquivos ocultos.
Segundo para a chamada. Abra no bloco de notas um arquivo com o nome de AUTORUN.INF e dentro dele coloque as seguintes linhas:
[autorun]
shellexecute=.Eject.jar
ou apenas
[autorun]
arquivoaexecutar.exe
Pronto, basta conectar sua pen drive no computador e ele abrirá o arquivo automáticamente. Por default esse código funciona em Windows 95, 98, XP, ME e 2000 e pode ser usado mesmo em cds. Esta é a forma que o sistema entende que deve executar um arquivo logo que a pen drive for colocada. E o arquivo a ser executado pode ser um .EXE de diversos tipos.
Cuidado na hora de dar o nome ao arquivo. Ao criar um novo documento de texto o sistema poderá salvar automaticamente com o nome de AUTORUN.INF.TXT e nesse caso não irá funcionar.
CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.
Comandos de Drive de CD no Windows
O arquivo abaixo possui a finalidade do código do post anterior, porém funciona no Windows. Interessante como o programa pode crescer! Este código foi capturado na internet e alterado e com ele foi possível fazer um novo formato de executável que funciona tanto em Linux quanto Windows. E, para isto, bastou um IF solicitando o tipo de sistema operacional para escolher qual dos dois algoritmos o sistema irá executar. Este programa executa comandos do Visual Basic dentro do Java. No próximo post vou demonstrar como transformar este arquivo em um executável oculto.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class JEjectDrive {
// Array contendo as letras das unidades de CD/DVD
private List<String> driver = new ArrayList<String>();
/**
*
*/
public JEjectDrive() {
this.getDriver();
}
/**
* Método utilizado para executar os scripts em VB.
*
* @param script
* Código em VB a ser executado.
* @return Retorna toda a saída da execução.
* @throws java.io.IOException
*/
private String executeVBScript(String script) {
String output = "";
String line = null;
try {
File f = File.createTempFile("tmp", ".vbs");
f.deleteOnExit();
FileWriter fw = new FileWriter(f);
fw.write(script);
fw.close();
Process p = Runtime.getRuntime().exec(
"cscript //NoLogo " + f.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p
.getInputStream()));
while ((line = input.readLine()) != null) {
output += line;
}
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return output;
}
/**
* Método para checar as unidades existentes.
*/
private void getDriver() {
StringBuilder sb = new StringBuilder();
sb.append("Const DriveTypeCDROM = 4\n");
sb
.append("Set oFSO = Wscript.CreateObject(\"Scripting.FileSystemObject\")\n");
sb.append("Set oDrives = oFSO.Drives\n");
sb.append("For Each Drive in oDrives\n");
sb
.append("If Drive.DriveType = DriveTypeCDROM Then Wscript.Echo Drive.DriveLetter End If\n");
sb.append("Next");
String dr = executeVBScript(sb.toString());
for (int i = 0; i < dr.length(); i++) {
driver.add(dr.substring(i, i + 1));
}
}
/**
* Método para abrir/fechar a bandeja do CD/DVD com opção do usuário
* fecha-lá.
*
* @param drv
* Letra da unidade para abrir.
* @param msg
* Mensagem perguntando se quer fechar.
* @param title
* Título da Mensagem.
*/
public void eject(String drv, String msg, String title) {
if (driver.contains(drv)) {
StringBuilder sb = new StringBuilder();
sb.append("Set oWMP = CreateObject(\"WMPlayer.OCX.7\")\n");
sb.append("Set oCD = oWMP.CdromCollection.getByDriveSpecifier(\"");
sb.append(drv);
sb.append(":\\\")\n");
sb.append("oCD.Eject\n");
if (msg != null && title != null) {
sb.append("If vbOK = MsgBox(\"");
sb.append(msg);
sb.append("\", vbOKCancel, \"");
sb.append(title);
sb.append("\") Then\noCD.Eject\nEnd If");
}
String dr = executeVBScript(sb.toString());
} else {
throw new IllegalArgumentException("Unidade " + drv
+ " não encontrada");
}
}
/**
* Método para abrir/fechar a bandeja do CD/DVD.
*
* @param drv
* Letra da unidade para abrir.
*/
public void eject(String drv) {
eject(drv, null, null);
}
/**
* Método para abrir todas as bandejas de CD/DVD
*/
public void ejectAll() {
StringBuilder sb = new StringBuilder();
sb.append("Set oWMP = CreateObject(\"WMPlayer.OCX.7\")\n");
sb.append("Set oDrv = oWMP.CdromCollection\n");
sb.append("If oDrv.Count >= 1 Then\n");
sb.append("For i = 0 To oDrv.Count - 1\n");
sb.append("oDrv.Item(i).Eject\n");
sb.append("Next\nEnd If");
String dr = executeVBScript(sb.toString());
}
/**
*
* @return Retorna as letras das unidades de CD/DVD
*/
public String[] getDrivers() {
return driver.toArray(new String[driver.size()]);
}
/**
*
* @param args
*/
public static void main(String[] args) {
JEjectDrive je = new JEjectDrive();
for (String drv : je.getDrivers()) {
System.out.println("Unidade encontrada: " + drv);
je.eject(drv, "Deseja fechar a gaveta?", "CD/DVD");
}
je.ejectAll();
}
}
CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.
terça-feira, 11 de outubro de 2011
Comandos de Drive de CD em Linux
O comando seguinte serve para a abertura do drive de CD. O comando é de Shell, mas a chamada está sendo feita no Java.
Runtime.getRuntime().exec("eject /dev/cdrom");
E para fechar
Runtime.getRuntime().exec("eject -t /dev/cdrom");
Como o comando é Shell então esta execução só funciona no Linux (*nix).
Pode-se pensar num principio de um virus inofensivo que abre e fecha a gaveta 10 vezes.
import java.io.IOException;
public class Eject {
public static void main(String[] args) {
int v=10;
for (int i = 0; i < v; i++) {
try {
Runtime.getRuntime().exec("eject /dev/cdrom");
Thread.sleep(2000);
Runtime.getRuntime().exec("eject -t /dev/cdrom");
Thread.sleep(2000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
O detalhe é que o LOOP é feito apenas 10 vezes. Se estiver em um "while(true)" será necessário "matar" o processo ou reiniciar o computador se o usuário não possuir a permissão.
O detalhe de efetuar um comando em Shell pelo Java é que o computador pode achar que é o sistema operacional que está fazendo a chamada da execução.
Exporte em um arquivo .jar e você poderá efetuar a execução dele em qualquer ambiente Linux (*nix). Não esqueça de dar a permissão de execução ao arquivo.
O programa acima foi feito em parceria com o Márcio Ishida colega de trabalho que também desenvolve em Java. Desenvolver em dois facilita na hora de ter ideias e dessa forma estamos trocando códigos e melhorando conforme aparecerão nos post's seguintes.
CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.
Runtime.getRuntime().exec("eject /dev/cdrom");
E para fechar
Runtime.getRuntime().exec("eject -t /dev/cdrom");
Como o comando é Shell então esta execução só funciona no Linux (*nix).
Pode-se pensar num principio de um virus inofensivo que abre e fecha a gaveta 10 vezes.
import java.io.IOException;
public class Eject {
public static void main(String[] args) {
int v=10;
for (int i = 0; i < v; i++) {
try {
Runtime.getRuntime().exec("eject /dev/cdrom");
Thread.sleep(2000);
Runtime.getRuntime().exec("eject -t /dev/cdrom");
Thread.sleep(2000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
O detalhe é que o LOOP é feito apenas 10 vezes. Se estiver em um "while(true)" será necessário "matar" o processo ou reiniciar o computador se o usuário não possuir a permissão.
O detalhe de efetuar um comando em Shell pelo Java é que o computador pode achar que é o sistema operacional que está fazendo a chamada da execução.
Exporte em um arquivo .jar e você poderá efetuar a execução dele em qualquer ambiente Linux (*nix). Não esqueça de dar a permissão de execução ao arquivo.
O programa acima foi feito em parceria com o Márcio Ishida colega de trabalho que também desenvolve em Java. Desenvolver em dois facilita na hora de ter ideias e dessa forma estamos trocando códigos e melhorando conforme aparecerão nos post's seguintes.
CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.
Arduíno Versus PIC
Um novo mundo está surgindo com uma forma de tecnologia que se conhece
pelo termo Open Hardware. Open Hardware nada mais é que ter várias
placas de circuitos eletrônicos, com finalidades diferentes, que se
comunicam entre si. O Arduíno é a principal ferramenta que está
trazendo a luz desse novo mundo. O microcontrolador mais famoso até
hoje era o PIC. Porém, quando comparamos o PIC com a facilidade do
Arduino o PIC acaba ficando para trás. O PIC necessita de uma memória
que geralmente precisa de um soquete e um software específico. Para
desgravar a memória uma luz ultra-violeta quando for regravável. O Arduino já vem numa placa
pronta com memória FLASH e basta conectá-la no computador ou notebook
pela USB. A IDE do Arduino é muito simples de se usar e ainda vem com vários programas na memória para as operações mais utilizadas. O processador utilizado é o ATMega328 e a frequencia é de geralmente 16MHz. O Arduino se comunica através de várias portas que podem ser setadas como entradas ou saídas de sinais analógicos e digitais. Efetua transmissão utilizando protocolo RS-232 através da porta USB. E pode se comunicar com sites da web, além de capturar dados de diversos tipos de sensores e ainda fazer diversos tipos de controles que podem ser programados tanto nos sites quanto internamente.
Java Comandos de Propriedades do Sistema
Os comandos abaixo são muito úteis para exibição de diversos dados
do sistema. O primeiro exibe o tipo de Sistema Operacional. O segundo
exibe diversas propriedades de sistema.
//captura o SO do usuário
System.out.println(System.getProperties().get("os.name"));
OU
// lista todas as propriedades da maquina
System.getProperties().list(System.out);
//captura o SO do usuário
System.out.println(System.getProperties().get("os.name"));
OU
// lista todas as propriedades da maquina
System.getProperties().list(System.out);
segunda-feira, 10 de outubro de 2011
Shields Arduíno
A principal vantagem do Arduino é a prototipagem. É muito
rápido fazer um projeto com o Arduino e além disso existem os Shields.
Os Shields são placas que podem ser conectadas no Arduino. Cada Shield
possui uma finalidade diferente. Existem Shields para displays, conexão
com a internet, controle de motores, controle de relès, transmissão
bluetooth, mp3 e vários outros . No link abaixo segue uma lista dos
principais shields do Arduino disponíveis. Como o Arduino é tecnologia
Open Hardware então o circuito é livre para ser modificado e a
comunidade do Arduino desenvolve em equipe novos protótipos.
http://shieldlist.org/
http://shieldlist.org/
Arduíno - Tecnologia de Ponta
O
Arduino é um micrcontrolador feito para leigos. A prototipagem é
extremamente rápida. E além da placa vir pronta para a programação
ainda existem os Shields.
Os Shields são placas prontas com funcionalidades diferentes que podem ser conectadas na placa do Arduino. Esse sistema é conhecido como Open Hardware. As empresas disponibilizam vários tipos de hardwares que podem ser utilizados de forma livre onde mesmo os circuitos podem ser modificados.
Toda esta onda cria uma alteração forte no cenário. Essa invenção possui impacto tão grande quanto a invenção do próprio computador. E, em breve, todo cenário de tecnologia sofrerá o impacto da entrada do Arduino no mercado.
O Arduino é uma febre. Todo mundo que domina um pouco de tecnologia está interessado nesse sistema. O Arduino pode ser encontrado no site:
Os Shields são placas prontas com funcionalidades diferentes que podem ser conectadas na placa do Arduino. Esse sistema é conhecido como Open Hardware. As empresas disponibilizam vários tipos de hardwares que podem ser utilizados de forma livre onde mesmo os circuitos podem ser modificados.
Toda esta onda cria uma alteração forte no cenário. Essa invenção possui impacto tão grande quanto a invenção do próprio computador. E, em breve, todo cenário de tecnologia sofrerá o impacto da entrada do Arduino no mercado.
O Arduino é uma febre. Todo mundo que domina um pouco de tecnologia está interessado nesse sistema. O Arduino pode ser encontrado no site:
http://www.arduino.cc/
Socket no Arduino
Uma das tarefas mais interessantes do Arduino é a capacidade dele se
conectar na Internet através do shield de Ethernet. O Arduino consegue
abrir até 4 sockets a comunidade que está desbravando o Arduino
compartilha do conhecimento de forma ampla. No Github, que é um
servidor de compartilhamento de código, o pessoal postou um exemplo de
socket através do Arduino que pode ser reutilizado de maneira livre no
link abaixo:
https://github.com/razerbeans/WebSocket-Arduino
https://github.com/razerbeans/WebSocket-Arduino
Java Comparable, Comparator e CompareTo
Existem várias formas de comparação em Java, porém quando comparamos
String com String ou inteiros com inteiros devemos fazer de forma
diferente. O método abaixo cria um objeto Conta com um numero e o nome
de uma pessoa. Abaixo o método de comparação utilizando Comparable,
Comparator e CompareTo.
Classe Conta.java:
public class Conta implements Comparable{
private String nome;
private int numero;
private long cpf;
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public long getCpf() {
return cpf;
}
public void setCpf(long cpf) {
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Conta() {
// TODO Auto-generated constructor stub
}
public Conta(String nome, int numero, long cpf) {
this.nome = nome;
this.numero = numero;
this.cpf = cpf;
}
@Override
public boolean equals(Object object){
if (object==null) {
return false;
}
if (!(object instanceof Conta)) {
return false;
}
Conta pessoa =(Conta) object;
return pessoa.getNumero() == this.numero;
}
public int compareTo(Object o){
if (this.getNumero() < ((Conta) o).getNumero()) {
return -1;
}
if (this.getNumero() > ((Conta) o).getNumero()) {
return 1;
}
return 0;
}
public String toString(){
return this.getNome() + " - " + this.getCpf() + " - " + this.getNumero() + "";
}
}
Classe ComparaPorNome.java
import java.util.Comparator;
public class ComparaPorNome implements Comparator{
@Override
public int compare(Conta o1, Conta o2) {
return o1.getNome().compareTo(o2.getNome());
}
}
Classe ComparaPorCpf.java
import java.util.Comparator;
public class ComparaPorCpf implements Comparator {
@Override
public int compare(Conta o1, Conta o2) {
// TODO Auto-generated method stub
if (o1.getCpf() < o2.getCpf()) {
return -1;
}
if (o1.getCpf() > o2.getCpf()) {
return 1;
}
return 0;
}
}
Classe Conta.java:
public class Conta implements Comparable{
private String nome;
private int numero;
private long cpf;
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public long getCpf() {
return cpf;
}
public void setCpf(long cpf) {
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Conta() {
// TODO Auto-generated constructor stub
}
public Conta(String nome, int numero, long cpf) {
this.nome = nome;
this.numero = numero;
this.cpf = cpf;
}
@Override
public boolean equals(Object object){
if (object==null) {
return false;
}
if (!(object instanceof Conta)) {
return false;
}
Conta pessoa =(Conta) object;
return pessoa.getNumero() == this.numero;
}
public int compareTo(Object o){
if (this.getNumero() < ((Conta) o).getNumero()) {
return -1;
}
if (this.getNumero() > ((Conta) o).getNumero()) {
return 1;
}
return 0;
}
public String toString(){
return this.getNome() + " - " + this.getCpf() + " - " + this.getNumero() + "";
}
}
Classe ComparaPorNome.java
import java.util.Comparator;
public class ComparaPorNome implements Comparator{
@Override
public int compare(Conta o1, Conta o2) {
return o1.getNome().compareTo(o2.getNome());
}
}
Classe ComparaPorCpf.java
import java.util.Comparator;
public class ComparaPorCpf implements Comparator {
@Override
public int compare(Conta o1, Conta o2) {
// TODO Auto-generated method stub
if (o1.getCpf() < o2.getCpf()) {
return -1;
}
if (o1.getCpf() > o2.getCpf()) {
return 1;
}
return 0;
}
}
Classe ColecaoArray .java que é classe principal que invoca a
ordenação. Alguns comentarios estão presentes devido aos testes do
cálculo de tempo de ordenação.
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Arrays;
public class ColecaoArray {
public static void main(String[] args) {
Conta objs[] = new Conta[15];
//Conta aux[] = new Conta[1];
NumberFormat formater = new DecimalFormat("#00");
String nome;
int numero;
long cpf;
// ArrayList conta = new ArrayList;
// estudantes.get(0).getNota();
long t = System.currentTimeMillis();
long startTime = System.nanoTime();
long estimatedTime = 0;
//long init;
//long end = 0;
//long diff;
ColecaoArray imp = new ColecaoArray();
//init = System.currentTimeMillis();
/* Coloque aqui seu codigo que demora */
////t = System.currentTimeMillis() - t;
estimatedTime = System.nanoTime() - startTime;
//end = System.currentTimeMillis();
for (int i = 0; i < objs.length; i++) {
numero = (int) (Math.random() * 21);
nome = "Nome" + String.valueOf(formater.format(i + 1));
cpf = (long) (11111111111L + (Math.random() * 88888888889L));
objs[i] = new Conta(nome, numero, cpf);
}
imp.imprimir(objs);
Arrays.sort(objs);
imp.imprimir(objs);
System.out.println();
ComparaPorCpf cpCpf = new ComparaPorCpf();
Arrays.sort(objs, cpCpf);
imp.imprimir(objs);
ComparaPorNome cpPorNome = new ComparaPorNome();
Arrays.sort(objs, cpPorNome);
imp.imprimir(objs);
//System.out.println(t + " milisegundos");
System.out.println(estimatedTime/1000 +" milisegundos");
//diff = end - init;
//System.out.println("Demorou " + (diff / 1000) + " segundos");
// ... the code being measured ...
// Conta[0].ComparaPorCpf(Conta[1]);
}
public void imprimir(Conta objs[]) {
for (int i = 0; i < objs.length; i++) {
System.out.print(objs[i].getNome() + "-" + objs[i].getCpf() + "----"
+ objs[i].getNumero());
System.out.println();
}
System.out.println();
}
}
Programa Java para Validação de Caracteres
Campos em formulário que não devem aceitar caracteres especiais são
muito comuns. Abaixo um código para tratar caracteres especiais. O
programa possui uma String com caracteres que devem ser bloqueados.
Modifique como precisar.
public class ValCarac {
public static void main(String[] args) {
// digite a string a ser testada na variavel login
String login="marc/elo";
boolean testeLogin =false;
testeLogin = ValCarac.validateCaracters(login);
if(testeLogin){
System.out.println("passou");
}else{
System.out.println("falhou - nao sao permitidos caracteres especiais");
}
}
public static boolean validateCaracters(String login){
boolean valid=true;
String nopodi="ƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ/|.!?@#$%¨&*(){}][^~'";
nopodi += '"';
for(int j=0; j<login.length(); j++) {
System.out.print("esse pode ?:"+login.charAt(j));
System.out.println();
for(int i=0; i<nopodi.length(); i++) {
if(login.charAt(j) == nopodi.charAt(i)){
System.out.print("Não pode:"+nopodi.charAt(i));
System.out.println();
valid=false;
if(!valid){
break;
}
}
}
}
return valid;
}
}
public class ValCarac {
public static void main(String[] args) {
// digite a string a ser testada na variavel login
String login="marc/elo";
boolean testeLogin =false;
testeLogin = ValCarac.validateCaracters(login);
if(testeLogin){
System.out.println("passou");
}else{
System.out.println("falhou - nao sao permitidos caracteres especiais");
}
}
public static boolean validateCaracters(String login){
boolean valid=true;
String nopodi="ƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ/|.!?@#$%¨&*(){}][^~'";
nopodi += '"';
for(int j=0; j<login.length(); j++) {
System.out.print("esse pode ?:"+login.charAt(j));
System.out.println();
for(int i=0; i<nopodi.length(); i++) {
if(login.charAt(j) == nopodi.charAt(i)){
System.out.print("Não pode:"+nopodi.charAt(i));
System.out.println();
valid=false;
if(!valid){
break;
}
}
}
}
return valid;
}
}
Programa Java para Captura de Teclas
O programa abaixo serve de exemplo para capturar teclas que são
pressionadas. Copie e cole no Eclipse IDE e é só rodar. Modifique como
for necessário.
import java.awt.*;
import java.awt.event.*;
public class KeyPress extends Frame{
Label label;
TextField txtField;
public static void main(String[] args) {
KeyPress k = new KeyPress();
}
public KeyPress(){
super("Key Press Event Frame");
Panel panel = new Panel();
label = new Label();
txtField = new TextField(20);
txtField.addKeyListener(new MyKeyListener());
add(label, BorderLayout.NORTH);
panel.add(txtField, BorderLayout.CENTER);
add(panel, BorderLayout.CENTER);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
setSize(400,400);
setVisible(true);
}
public class MyKeyListener extends KeyAdapter{
public void keyPressed(KeyEvent ke){
char i = ke.getKeyChar();
String str = Character.toString(i);
label.setText(str);
}
}
}
import java.awt.*;
import java.awt.event.*;
public class KeyPress extends Frame{
Label label;
TextField txtField;
public static void main(String[] args) {
KeyPress k = new KeyPress();
}
public KeyPress(){
super("Key Press Event Frame");
Panel panel = new Panel();
label = new Label();
txtField = new TextField(20);
txtField.addKeyListener(new MyKeyListener());
add(label, BorderLayout.NORTH);
panel.add(txtField, BorderLayout.CENTER);
add(panel, BorderLayout.CENTER);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
setSize(400,400);
setVisible(true);
}
public class MyKeyListener extends KeyAdapter{
public void keyPressed(KeyEvent ke){
char i = ke.getKeyChar();
String str = Character.toString(i);
label.setText(str);
}
}
}
Tutorial Shell - Parte 5
Nessa quinta parte do tutorial será mostrado como
trabalhar com textos dentro do Shell. Para o Shell, todo o conteúdo do
computador é visto como um arquivo texto. E na verdade é, pois até
mesmo a memória é armazenada numa forma de texto (numérico) que é o
Hexadecimal.
Inicialmente precisamos de um texto, então é
necessário criar um em modo lista. Dentro do diretório padrão do
sistema /etc/group estão armazenados os grupos de usuários do sistema.
Para exibir na tela: cat /etc/groups
Para exibir na tela com linhas numeradas: cat –n /etc/groups
Para criar um arquivo de texto com a listagem exibida: cat –n /etc/groups > grupos.txt
Com o arquivo criado veremos se possui conteúdo da lista: cat grupos.txt
Vamos usar o pipe “|” para jogar a saída do comando em um novo comando apenas para testar o pipe: cat grupos.txt | more
Através do comando cut faremos um corte vertical
no arquivo para testes. Cortando o arquivo nos dois pontos e exibindo a
primeira parte: cat grupos.txt | cut –d: -f1
Mostrando a segunda parte agora: cat grupos.txt | cut –d: -f2
Mostrando a terceira parte agora: cat grupos.txt | cut –d: -f3
Mostrando a primeira e a segunda parte agora: cat grupos.txt | cut –d: -f1,2
Mostrando a primeira e a terceira parte agora: cat grupos.txt | cut –d: -f1,3
Mostrando apenas uma coluna, no caso a sexta: cat grupos.txt | cut –d: -c6
Mostrando da coluna 8 até 50: cat grupos.txt | cut –d: -c8-50
Vamos criar um novo arquivo com o ultimo comando: cat grupos.txt | cut –d: -c8-50 > semnumeracao.txt
Usando o mesmo artifício vamos ordenar o novo arquivo por ordem alfabética: cat semnumeracao.txt | sort
Vamos ordenar pela última coluna. Como a última
coluna é numérica então o sort deve vir acompanhado do –n, no caso: cat
semnumeracao.txt | sort -t”:” –k4 -n
O –t devera indicar onde o corte será feito, no caso nos dois pontos. O –k indica qual coluna de corte deverá ser ordenada.
Falta apenas Head e Tail. Para selecionar apenas
as 10 primeiras linhas do cabeçalho da mesma lista ordenada pela
terceira coluna: cat semnumeracao.txt | sort -t”:” –k4 –n | head -10
Para selecionar as 10 ultimas linhas da lista do ultimo arquivo criado: cat semnumeracao.txt | tail -10
Para selecionar o arquivo sem as 10 primeiras
linhas e sem as ultimas 10 linhas a sugestão é contar as linhas e fazer
uma intersecção entre Head e Tail. Supondo que são 50 linhas de lista
(usar o cat com –n para saber) então o comando seria: cat
semnumeracao.txt | head -40 | tail -30
O mesmo pode ser jogado num novo arquivo indicando o rodapé: cat semnumeracao.txt | tail -10 > rodape.txt
Busca por palavras usando grep para buscar linhas com a palavra “mail”: cat semnumeracao.txt | grep mail
Assinar:
Postagens (Atom)