quarta-feira, 30 de setembro de 2015

Vantagens da FRAM no Arduino Contra EEPROM

O que é FRAM?


É um acrônimo para Memória RAM "Ferro-Elétrica", porém não volátil, que pode reter os dados mesmo depois de desligada alimentação elétrica. Mas ao contrário do que o nome indica, FRAM não é afetada por campos magnéticos, pois não possui realmente ferro na composição do chip. Materiais "ferro-elétricos"mudam de polaridade em um campo elétrico, mas não são afetados por campos magnéticos.

Quais são as vantagens da FRAM sobre Flash/EEPROM?


1) Velocidade! FRAM possui tempos de escrita bem mais curtos. Levando em conta todas operções envolvidas, um ciclo de escrita da FRAM leva menos de 50ns (nanosegundos). Isso é aproximadamente 1000x mais rápido que a EEPROM. Sem falar que a EEPROM precisa de dois passos de escrita: um comando de escrita, seguido por um comando de leitura/verificação. Já a função de escrita na memória FRAM acontece no mesmo processo de leitura da memória. Ou seja, existe apenas um comando para escrita e para leitura. Então, na prática, todo trâmite demorado de escrita da EEPROM é eliminado com eficiência em um modelo baseado em um chip FRAM.

2) Baixo Consumo. A escrita em uma célula da FRAM ocorre em baixa voltagem; e muito pouca corrente é suficiente para alterar os dados. Na EEPROM precisamos de altas voltagens. FRAM utiliza tensão de 1.5V, sendo que essa baixa voltagem se traduz em eficiência energética e permite adicionar mais funcionalidades a taxas mais altas de transferência.

3) Confiabilidade. Pela razão de apenas uma pequena quantidade de energia ser necessária para alimentar a FRAM, o chip já consome de antemão toda energia necessária para funcionar, evitando perda de dados (data-tearing), que é um efeito que ocorre na EEPROM. Além disso, FRAM acumula mais de 100 Trilhões de ciclos de leitura/escrita, ou mais -- excedendo de longe os ciclos de escrita da EEPROM.


Como utilizar no Arduino?


Existe um módulo da Adafruit:

https://www.adafruit.com/products/1897

Mas basta usar diretamente o chip MB85RS256 da Fujitsu para ter 256K de memória não volátil adicionais no seu Arduino!

http://www.fujitsu.com/downloads/MICRO/fma/formpdf/fram_rs256fs.pdf

Veja também a biblioteca para FRAM no Arduino:

Versão 1:
http://hackscribble.github.io/hackscribble-ferro-library/

Versão 2:
https://github.com/adafruit/Adafruit_FRAM_SPI

Abraços
Renato Aloi

Cobertura 4G no Brasil

Bom dia!

Até uns anos atrás, apenas reparávamos no ícone do sinal da rede de celular, quando aparecia o famoso "3G" escrito no topo da tela.

Ficávamos eufóricos quando isso acontecia! E finalmente a conexão fluia! Era até possível navegar na Internet pelo 3G! Baixar email no celular!

A gente ficava olhando aquele "EDGDE" escrito no topo da tela, como se pudéssemos alterá-lo com o poder da mente!

De repente aparecia o tal 3G... Mas só em alguns pontos da cidade de SP.

Agora estou em Uberlândia e meu Android (que ainda não é o tal de Caramelow), aparece a seguinte simbologia:

E, H, H+, 3G, 4G


Eu só vi esse 4G aparecer (depois que eu troquei o chip para essa nova tecnologia) lá no centro da cidade, em alguns pontos... E ainda sim muito instável.

Aqui na periferia fica sempre ativo o E e as vezes, entra o H (maioria das vezes). Mas bem de vez em quando entra um modo H+. Vai entender!

Eu não sei como eles fatiaram essas faixas de frequencia e nem como organizaram essas portadoras, mas ainda há muito trabalho a ser feito!

O aumento de velocidade quando pula de um Edge para um 3G ou ainda para o 4G é realmente gritante (!) mas a impressão que dá é que "eles" não "liberam" o total do sinal pois a rede não aguentaria o fluxo de dados.

A maior prova disso é que a próprias operadoras estão tendo que limitar o consumo de dados dos clientes.

Na verdade os limites sempre existiram, mas só agora como as velocidades do 4G, conseguimos consumir taxas absurdas de download. E isso está causando problemas para as operadoras e fazendo com que elas tenham que investir em equipamentos caros. O que acaba encarecendo mais ainda a telefonia no Brasil.

A agência que regula telefonia só aplica multas e castigos para os "excessos" que as operadoras aprontam.

Mas quando as operadoras estão excedendo nas suas torturas, é porque o consumidor final já sofreu tanto que ficou evidente! Começa a aparecer notícias na mídia, etc.

Mas a grande verdade é que as agências reguladoras não regulam, os agentes de concessão apenas concedem, e ninguém quer fazer o trabalho de acompanhar de perto o andamento dessas implantações tecnológicas no Brasil.

Enquanto faltarem engenheiros nos cargos e sobrarem politicos nas agências em ONG's, continuaremos assim.

Abraços,
Renato Aloi

terça-feira, 29 de setembro de 2015

Clonagem de Controle de Portão com Arduino

Pessoal,

Bom dia! Eu resolvi escrever hoje sobre esse assunto, pois é de interesse de proprietários de portões eletrônicos, síndicos e administradores de condomínios em geral.

Eu sei que a molecada está doida querendo clonar tudo! Mas vamos com calma aí! Esse post inclusive não é voltado para o técnico, ao contrário, é voltado para o usuário do sistema de portão eletrônico.

Eu tenho uma biblioteca de Controle Remoto RF para Arduino, conforme segue link:

https://github.com/renatoaloi/RFremote

Mas tomei o cuidado de não publicar a parte de clonagem!

Mas e se você tivesse publicado, Renato?

Bom, quando eu publiquei a minha biblioteca no GitHub, em 2013, os fabricantes de controladora de portões eletrônicos já estavam se antecipando e usando códigos criptografados para aumentar a segurança na hora de abrir o portão da garagem.

Eu sei que é tudo uma questão de tempo até que se consiga quebrar todas essas proteções que as empresas de segurança criam, mas até lá elas criam outras e assim vamos tendo alguma segurança.

Vamos entender como funciona essa briga de gato-e-rato e também porque ela acontece!

Porque tem gente tentando quebrar segurança desses controles?

Nem todos são bandidos. Lógico que existem aqueles que desejam um programa igual daqueles filmes de aventura, que com alguns cliques o meliante abre o portão da vítima.

Mas a Internet está aí e programadores do mundo inteiro podem ser contratados com alguns cliques em sites específicos... Precisamos entender onde estão os pontos fracos para nos defender.

E ao mesmo tempo, temos estudantes, hobbistas, músicos, querendo aprender e utilizar essa tecnologia para seus fins.

Ahh, você pensa: Mas estão querendo roubar a criptografia do sistema de portão eletronico desse jeito!

Não é bem assim. As fabricantes de controladoras de portão eletrônico não possuem tecnologia de criptografia. Elas importam de empresas como Microchip, Atmel, etc. Então, muitas vezes os programadores das empresas que fabricam essas controladoras possuem o mesmo conhecimento (ou menos) de um programador experiente da indústria!

Então é um jogo de gato e rato pois as empresas de portões eletrônico tem que consultar os hackers especialistas em quebrar esses códigos para justamente saber qual a melhor opção. E tem que ser assim!

Um bom hacker que consegue uma façanha dessas deve ser contratado e não preso!

Ahhh, mas como saber se eu estou seguro com o meu portão eletrônico?

A dica que eu quero deixar para os moradores,  síndicos e administradores de condomínio que fazem uso de portão eletrônico, verifiquem qual tecnologia é utilizada para criptografia dos dados.

Vejamos, existem atualmente 3 tipos de segurança envolvendo acionamento de portões eletrônicos.

1) Learning Code - Sem criptografia
2) Rolling Code - Criptografia por "rolagem" de chave-privada
3) Hopping Code - Criptografia KeeLoq da Microchip de 128-bit

O primeiro é o Learning Code, que não tem criptografia e se você está usando esse tipo de sistema no seu portão eletrônico, você NÃO está seguro!

O segundo Rolling Code é bem mais seguro e é baseado em uma chave fornecida pela empresa fabricante da controladora. O usuário nem percebe que essa chave existe e sem ela o hacker mal-intencionado não consegue fazer nada! Você ESTÁ seguro! Até um futuro próximo. Pois não é impossível tentar advinhar essa chave, pois ela não é grande como nosso próximo caso.

O terceiro e último sistema de segurança é o Hopping Code, que é o mais atual e mais seguro que se manterá assim por bastante tempo no futuro. Mesmo os melhores hackers vão ter que suar muito a camisa pra conseguir burlar a chave de 128-bits e a criptografia KeeLoq da Microchip, que é uma das principais fabricantes de chip no MUNDO.

Verifique então com seu fornecedor qual é o chip que ele está usando ao lhe fornecer o equipamento.

Qual Chip deve ter meu equipamento para eu me sentir seguro?

Abra o controle remoto do seu portão eletronico e tente ler as inscrições no chip principal da placa. Compare com as informações abaixo para saber se você está seguro ou não:

Chip HT6P20X - Troque imediatamente seu sistema de portão eletrônico! Pois ele não é seguro!

Chip HCSXXXX - Se seu chip começa com HCS, pode ficar tranquilo, você está seguro, mas tenha em mente nos próximos 4 anos trocar pelo Hopping Code.

Chip MCSXXXX - Esses são da Microchip, você estará seguro pelos próximos 4 anos pelo menos.

Não existe computador no mundo atualmente que consiga quebrar uma chave de criptografia de 128-bits nos próximos 2 anos pelo menos.


Mas como tudo muda muito rápido, pode ser que a minha previsão não chegue a 4 anos. Vamos ver!

Material para leitura:

Para finalizar, se você gosta de números, veja quando tempo levaria para quebrar uma chave de 128-bits:

São 2128 = 340282366920938463463374607431768211456 possiveis chaves de  128 bits; significa que levaria milhões de anos para descobrir a chave certa.

Fonte: http://security.stackexchange.com/questions/31726/why-so-long-to-break-128-bit-encryption


Abraços,
Renato

sábado, 26 de setembro de 2015

Tutorial Matemática de Bits no Arduino


Introdução

Normalmente quando programamos no ambiente computacional do Arduino (ou em qualquer outro computador), habilidades como manipular bits individualmente se tornam úteis e até necessárias. Aqui algumas situações onde a Matemática de Bits pode auxiliar:

  • Economizar memória, armazenar 8 valores binários (true/false) em apenas 1 byte
  • Ativar/Desativar bits individualmente para controlar Registradores de Porta
  • Executar determinadas operações aritméticas, envolvendo cálculos em potência de base 2

Neste tutorial primeiro exploraremos o básico dos operadores de bit disponíveis na linguagem C++. Então aprendermos a combinar essas técnicas para efetuar certas operações bem úteis.


Sistema Binário

Para explicar melhor os operadores de bit, este tutorial apresentará a maioria dos valores inteiros usando a notação binária, também conhecida como “Base de 2” ou “Base Binária”. Neste sistema binário, todos os valores inteiros são expressos utilizando-se apenas dígitos 0 e 1. É dessa forma que todos os equipamentos eletrônicos armazenam dados internamente. Cada dígito 0 ou 1 é chamado de bit, que é um apelido para “binary digit” (dígito binário, em inglês).

No sistema decimal (base 10), que estamos acostumados, fatorando um número como 572 temos 5*102 + 7*101 + 2*100. Da mesma forma, fatorando um número binário como 11010, temos 1*24 + 1*23 + 0*22 + 1*21 + 0*20 = 16 + 8 + 2 = 26 (em decimal).

Infelizmente a maioria dos compiladores C++ não fornecem quaisquer meios para o programador expressar números binários diretamente no código. Mas felizmente o Arduino, desde a versão 0007, possui as constantes B0 até B11111111 definidas por para nos ajudar a representar números binários de 8 bits, do 0 ao 255 (em decimal).

Dica: Lembre-se que 28 = 256


Operador de Bit AND

O operador de bit chamado AND no padrão C++ é expresso por um “ampersand” &, usado entre duas expressões numéricas. O operador AND manipula cada posição de bit, atuando sobre os números envolvidos na operação, de acordo com a seguinte regra: se ambos os bits da mesma posição em ambos os lados da expressão forem 1, o resultado também é 1, caso contrário o resultado é 0. Uma outra forma de escrever isso é:

0 & 0 == 0
0 & 1 == 0
1 & 0 == 0
1 & 1 == 1
No Arduino, o tipo de variável int é um valor de 16-bits, então ao usarmos o operador & entre duas expressões int, temos 16 operações simultâneas ocorrendo, uma para cada posição de bit. Em um fragmento de código como este:

int a =  92;    // em binario: 0000000001011100
int b = 101;    // em binario: 0000000001100101
int c = a & b;  // resultado:  0000000001000100, or 68 in decimal.
Cada um dos 16 bits da variável a ou b são processados usando o operador AND, e todos os 16 resultados são gravados na variável c, gerando o valor 01000100 em binário, que é 68 em decimal.

Um dos usos mais comuns para o operador de bit AND é selecionar um (ou mais) bit(s) a partir de um valor inteiro, o que chamamos de “masking” (mascarar). Por exemplo, se você quiser acessar o último bit menos significante da variável x, e guardá-lo na variável y, você poderia usar o código a seguir:

int x = 5;       // em binario: 101
int y = x & 1;   // agora y == 1
x = 4;           // em binario: 100
y = x & 1;       // agora y == 0
Dica: Use essa técnica para saber se o número é par ou impar. Se você verificar o bit mais alto, você consegue determinar se o número é positivo ou negativo. Veja mais abaixo...

Operador de Bit OR

O operador OR em C++ é o símbolo de barra vertical |. Assim como o operador &, o operador | atua independentemente em cada bit dos dois lados da operação. Mas o que ele faz é diferente (claro). O operador OR retorna 1 quando qualquer um dos bits de entrada for 1, caso contrário, retorna 0. Em outras palavras:

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1
Abaixo podemos ver um exemplo de uso do operador OR em um trecho de código C++:

int a =  92;    // em binario: 0000000001011100
int b = 101;    // em binario: 0000000001100101
int c = a | b;  // resultado:  0000000001111101, ou 125 em decimal.
O operador de bit OR é normalmente usado para garantir que um bit esteja ligado (configurado com valor 1) em uma determinada expressão. Por exemplo, para copiar os bits da variável a para variável b, garantindo que o último bit seja 1, use o seguinte código:

b = a | 1;


Operador de Bit XOR

Temos aqui um operador não muito usual em C++ chamado operador de bit exclusivo OR, também conhecido por XOR. Este operador é expresso pelo símbolo de circunflexo ^, e é similar ao operador OR, exceto pelo fato que ele retorna 1 quando apenas um dos lados da operação tem entrada com valor 1. Se ambos os bits dos dois lados da operação forem 0 ou forem 1, ambos ao mesmo tempo, o retorno do XOR será 0, conforme segue:

0 ^ 0 == 0
0 ^ 1 == 1
1 ^ 0 == 1
1 ^ 1 == 0
Outra forma de olhar para o operador XOR é que o resultado é 1 quando ambos bits da operação são diferentes; e o resultado é 0 quando são iguais, ao mesmo tempo.

Temos aqui um código de exemplo:

int x = 12;     // em binario: 1100
int y = 10;     // em binario: 1010
int z = x ^ y;  // em binario: 0110, ou em decimal = 6
O operador ^ é normalmente usado para inverter um valor de 1 para 0 e vice-versa. Atuando em apenas um ou mais bits da equação e deixando outros em paz. Por exemplo:

y = x ^ 1;   // inverte o bit menos significativo em x
   // e guarda resultado em y.


Operador de Bit NOT

O operador NOT em C++ é escrito usando o símbolo do til ~. Ao contrario dos operadores & e |, o operador NOT é aplicado a um único operando que fica a direita. O operador NOT muda cada bit para seu oposto: 0 vira 1 e 1 vira 0. Por exemplo:

int a = 103;    // em binario:  0000000001100111
int b = ~a;     // em binario:  1111111110011000 = -104
Você deve estar surpreso de ver um número negativo como resultado da operação, como -104. Isto acontece porque o bit mais alto de um número inteiro é chamado de bit de sinal. Se o maior bit do número, em questão, for 1, significa que ele é interpretado como negativo. Esta codificação de positivo e negativo de um número é chamada de “complemento de dois”.

As vezes um inteiro com sinal pode causar problemas na programação. Veremos mais adiante.

Dica: Para retirar o sinal de um tipo de variável, declare-a antecedendo com a palavra "unsigned". Exemplos: unsigned int a; unsigned long b; unsigned char c;

Operadores de Deslocamento de Bit

Existem dois operadores de deslocamento na linguagem C++: o operador de deslocamento para a esquerda << e deslocamento para direita >>. Estes operadores deslocam os bits do operando da esquerda da equação pela quantidade de posições determinadas pelo operando da direita. Por exemplo:

int a = 5;        // em binario: 0000000000000101
int b = a << 3;   // em binario: 0000000000101000 = 40
int c = b >> 3;   // em binario: 0000000000000101 = 5
Quando você desloca um valor x por y bits (x << y), a quantidade y de bits mais a esquerda de x será perdida, deslocada para o além:

int a = 5;        // em binario: 0000000000000101
int b = a << 14;  // em binario: 0100000000000000
   // descartou primeiro 1 de 101
O importante é que não existam bits de interesse mais a esquerda quando for efetuar um deslocamento para esquerda. E a mesma coisa vale para o deslocamento a direita. Uma forma simples de encarar este operador é que o deslocamento para a esquerda é o mesmo que 2 elevado ao operando da direita. Por exemplo, para gerar potências de 2, as seguintes expressões podem ser usadas:

1 <<  0  ==    1
1 <<  1  ==    2
1 <<  2  ==    4
1 <<  3  ==    8
...
1 <<  8  ==  256
1 <<  9  ==  512
1 << 10  == 1024
...
Quando você desloca x a direita por y bits (x >> y), e o bit mais alto é 1, o comportamento depende do tipo de dados da variável x. Se x for do tipo int, é bit mais alto é o que controla o sinal, determinando se x é positivo ou negativo. Como discutido acima, nesse caso, o bit do sinal é copiado para os bits mais baixos, por razões historicamente esotéricas!

int x = -16;     // em binario: 1111111111110000
int y = x >> 3;  // em binario: 1111111111111110
Esse fenômeno é chamado de extensão de sinal. E normalmente não é o efeito que você quer. Ao invés disso, você esperararia que zeros fossem preenchendo os bits novos mais a esquerda. Acontece que as regras para deslocamento a direita são diferentes para as variáveis do tipo unsigned int, então você pode usar um “cast” para suprimir os 1's aparecendo na esquerda.

int x = -16;               // em binario: 1111111111110000
int y = unsigned(x) >> 3;  // em binario: 0001111111111110
Se você tomar cuidado em evitar tipos de dados com sinal, você então pode usar o operador de deslocamento a direita >> como uma forma de dividir pelas potências de 2. Por exemplo:

int x = 1000;
int y = x >> 3;   // divisao de 1000 por 8
    // resultado y = 125.

Operadores de Atribuição

Muitas vezes na programação queremos operar nos valores de uma variável x e guardar essa informação modificada de volta na mesma variável x. Na maioria das linguagens de programação, por exemplo, você poderia incrementar o valor por 7, usando o seguinte código:

x = x + 7;    // incrementa x em 7

Por causa desse tipo de coisa ocorrer tão frequentemente, a programação C++ oferece um atalho em forma de operadores de atribuição especiais. O código acima pode ser escrito de forma mais concisa, assim:

x += 7;    // incrementa x em 7

Acontece que os operadores de bit AND e OR, deslocamento para direita e deslocamento para a esquerda, todos eles também possuem atalhos de atribuição. Vejamos um exemplo:

int x = 1;  // em binario: 0000000000000001
x <<= 3;    // em binario: 0000000000001000
x |= 3;     // em binario: 0000000000001011
            // porque 3 = 11 em binario
x &= 1;     // em binario: 0000000000000001
x ^= 4;     // em binario: 0000000000000101
     // inverte usando mascara 100
x ^= 4;     // em binario: 0000000000000001
     // inverte usando mascara 100 de novo
Não existe atalho para o operador de bit NOT, então se você precisar inverter os bits de uma variável x, você precisará fazer assim:

x = ~x;    // inverte todos os bits de x
    // guarda de volta em x

Tradução livre do original http://playground.arduino.cc/Code/BitMath
Por Renato Aloi


quinta-feira, 24 de setembro de 2015

Arduino - Manipulação Direta de Portas

Registradores de Portas

Registradores de portas (PORT) nos permitem acesso de baixo-nível e uma manipulação mais eficiente das portas de e/s do microcontrolador, em uma placa Arduino. Vamos falar dos chips utilizados, que podem variar entre o ATMega8, 168 e 328. Estes chips em questão possuem 3 canais de Portas:
  • B (portas digitais de 8 a 13)
  • C (entradas analógicas)
  • D (portas digitais de 0 a 7)
Cada canal é controlado por 3 Registradores (sendo 1 de configuração, um de manipulação de portas digitais e um só de leitura), e cada qual pode ser definido como variável de sistema, na linguagem do Arduino.

1) Existe um registrador chamado DDR que configura o sentido da porta se ela é de saida (OUTPUT) ou de entrada (INPUT).
2) O Registrador PORT controla se a porta está no estado lógico alto (HIGH) ou baixo (LOW).
3) Existe também o Registrador PIN que efetua a leitura das portas configuradas como INPUT pela função pinMode().

O mapeamento dos chips ATmega8 e ATmega168 mostram essas portas. O chip Atmega328p que é mais novo, segue o mesmo modelo de portas do Atmega168 exatamente!

Os Registradores DDR e PORT podem ser escritos e lidos. Já o Registrador PIN só pode ser lido!

PORTD mapeado para as portas digitais 0 até 7 do Arduino
DDRD - Registrador de Sentido do Port D - leitura/escrita
PORTD - Registrador de Estado do Port D - leitura/escrita
PIND - Registrador das Entradas do Port D - leitura apenas
PORTB mapeado para as portas digitais 8 até 13 do Arduino. Os dois bits mais altos (6 e 7) são dos pinos do cristal e não são usados.
DDRB - Registrador de Sentido do Port B - leitura/escrita
PORTB - Registrador de Estado do Port B - leitura/escrita
PINB - Registrador das Entradas do Port B - leitura apenas
PORTC mapeado para as portas analógicas 0 até 5 do Arduino. Pinos 6 e 7 são acessíveis apenas no Arduino Mini
DDRC - Registrador de Sentido do Port C - leitura/escrita
PORTC - Registrador de Estado do Port C - leitura/escrita
PINC - Registrador das Entradas do Port C - leitura apenas
Cada bit desses 3 Registradores correspondem a uma única porta; exemplo: os bits mais baixos dos Registradores DDRB, PORTB e PINB são referentes ao pino PB0 (porta digital 8). Para conhecer o mapeamento completo de portas do Arduino e dos bits dos Registradores, acesse o diagrama correspondente ao seu chip: ATmega8, ATmega168. (Nota: Alguns bits de algumas portas podem ser usados para outras funcionalidades além de e/s (entrada/saida); seja cuidadoso para não alterar os bits correspondentes a essas portas)

Atenção! Nota do Renato Aloi! Não altere os bits da porta serial! Você pode desligar ela e vai ser difícil ligar ela de novo! Veja mais abaixo, continue lendo...

Exemplos

Se pegarmos os pinos do mapeamento acima, os Registradores referentes ao PortD controlam as portas digitais 0 até 7.

Você deve notar, entretanto, que as portas 0 e 1 já são usadas pela comunicação serial, para carregar programas e para depuração. Portanto, alterar os bits dessas portas deve ser evitado para não desligar a serial! Esteja avisado que estes procedimentos podem interferir no funcionamento da Serial e que você pode acabar não conseguindo mais carregar programas no Arduino!

DDRD é o registrador que configura a direção para o PortD (portas digitais 0-7 do Arduino). Os bits nesse Registrador controlam se as portas do PORTD estão configuradas como entradas ou saídas, por exemplo:

DDRD = B11111110;  // configura portas 1 ate 7 como saidas,
                   //e a porta 0 como entrada
 
DDRD = DDRD | B11111100;  // esta eh uma forma mais segura 
                   // de configurar os pinos 2 ate 7 como saida
                   // sem mudar as configuracoes dos 
                   // pinos 0 e 1 que sao da serial 


Vide operadores de bit nas páginas de referência The Bitmath Tutorial do Playground (traduzido para português por Renato Aloi).

PORTD é o Registrador dos estados das saídas. Por exemplo:

PORTD = B10101000; // registra valor HIGH 
                   // nas portas digitais 7,5,3

Você deverá ver 5V saindo nessas portas, mas só se você configurou o Registrador DDRD como saída, ou através da função pinMode().


PIND é o Registrador das entradas. E ele faz a leitura de todas as portas digitais de uma só vez!

Porque usar Manipulação Direta de Portas?

Retirado do The Bitmath Tutorial:

De forma geral, fazer esse tipo de acesso direto a portas não é uma boa ideia. Porque não? Aqui vão algumas razões:
  • O código fica muito mais difícil de ler e de manter. Além de ser muito mais difícil para outras pessoas poderem entender ou reaproveitar seu código. Leva apenas alguns microsegundos para que o processador execute o código, mas você pode levar horas para encontrar algum defeito e consertá-lo!
  • O código é menos "portável". Se você usar as funções digitalRead() e digitalWrite(), é muito mais fácil de escrever códigos que vão funcionar em todas as versões das placas Arduino. Já controlar diretamente os Registradores é diferente para cada tipo de microcontrolador.
  • Não é difícil causar avarias por acidente enquanto programando e testando acesso direto às portas digitais. Executar a linha DDRD = B11111110; trocando o 0 final por 1, sem querer, ou por distração mudará a configuração do pino RX da serial para saída em vez de entrada e seu Arduino ficará "surdo" da serial.
Então você deve estar pensando: Legal! Nunca vou usar esse negócio então! Mas não é bem assim, existem muitas vantagens em se usar essa técnica de acesso direto às portas, tais como:
  • Você pode querer mudar o estado (entre ligado e desligado) de uma porta muito rapidamente, em frações de microsegundo. Se você der uma olhada no código lib/targets/arduino/wiring.c, verá que as funções digitalRead() e digitalWrite() são compostas de uma dúzia de linhas, que ao serem compiladas formam algumas instruções de máquina. Cada instrução de máquina precisa de um ciclo de clock rodando a 16Mhz, que pode adicionar erros de tempo em circuitos críticos, como processamento de sinal, etc. Manipulação direta das portas pode fazer o mesmo serviço em muito menos ciclos de clock.
  • Algumas vezes você precisa acionar várias portas digitais ao mesmo tempo, e não pode esperar acionar uma primeiro pra depois acionar a outra. Chamando a função digitalWrite(10,HIGH); seguida por digitalWrite(11,HIGH); fará com que a porta 10 primeiro fique em estado HIGH, para apenas vários microsegundos depois a porta 11 também ficar com estado HIGH. Se houver algum circuito externo que espere que ambas as portas fiquem ativas ao mesmo tempo, ele não funcionará. Mas usando acesso direto as portas, você pode configurar as portas para ficarem ativas ao mesmo tempo, com a mesma instrução PORTB |= B1100;
  • Ou se você está sem memória FLASH, você pode usar essas tecnicas para fazer seu código ficar menor. Pois muito menos instruções serão geradas para alterar o estado das portas usando manipulação direta do que pelas funções. As vezes esses truques são a diferença que fazem seu programa caber na memória flash ou não!

Veja Também

The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.
Tradução livre do original https://www.arduino.cc/en/Reference/PortManipulation
Por Renato Aloi

segunda-feira, 21 de setembro de 2015

Arduino -- Por onde começar?

Bom dia!

Muita gente nova chegando no mundo Arduino! Bem vindos!

Mas por onde começar? Eu sei que parece difícil a princípio, mas não é não!

Leva um tempo, é verdade! Se você já tem um projeto e não tem tempo para aprender você mesmo Arduino, sugiro que procure um profissional da área. Você pode começar pelo fórum, no tópico de classificados de empregos e oportunidades do Curso Arduino:

http://seriallink.com.br/forum/viewforum.php?f=93

Eu também desenvolvo projetos em Arduino, mas não estou dando conta de atender o Brasil todo.

Por isso estou lançando insistentemente campanhas convocando os programadores em Arduino, pois estamos precisando! Os clientes estão carentes de soluções simples e baratas!

E o Arduino traz tudo isso de bom para o desenvolvedor e para o cliente também!

O desenvolvedor ganha experiência, dinheiro e investe pouco. O cliente resolve seu problema gastando pouco. Todo mundo sai ganhando e fica feliz!

Você está começando?

Começe pelo Arduino UNO!

Eu sei que muita gente ainda tem dúvidas sobre o Arduino ser original ou falsificado ou ainda qual versão comprar?

A grande verdade é que não importa muito se você vai comprar um Arduino Original ou um Clone Chines. Você estará enriquecendo um Italiano ou um Chinês. Você escolhe.

Uma opção muito boa enquanto eu não lanço de novo o Arduino Tupiniquim, é o Arduino Blackboard da Robocore:

https://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=530

Que é uma placa com design brasileiro e você tem garantia de estar comprando um produto brasileiro e não um pirata de outro país.

Enfim, de uma forma ou de outra compre um Arduino UNO Compatível! Seja pelo Mercado Livre ou pela Robocore, compre o seu!

Ahh, Renato, posso comprar um Arduino MEGA?

Pode também! Mas o Arduino MEGA tem algumas características que vão dificultar a vida do iniciante. Melhor começar com o UNO mesmo.

Não tenha pressa! Em menos de um ano você terá comprado mais de um Arduino, então não precisa de pressa em começar com o MEGA. Primeiro compra um UNO e depois você vai se sentir seguro pra comprar um MEGA em menos de 6 meses, eu garanto!

Mas depois de comprar a placa? Fazer o que?

Primeiro você deve seguir esse link para aprender a instalar toda parafernália:

http://renatoaloi.blogspot.com.br/2011/10/instalando-arduino-guia-completo.html

Depois siga esse outro post do blog para se orientar em seus estudos:

http://renatoaloi.blogspot.com.br/2015/09/programador-arduino-brasil-precisa-de.html

Fora todo esse material, ainda tenho alguns posts bem interessantes neste mesmo blog para aumentar seus conhecimentos.


Um material explicando as portas digitais do Arduino. 


Material de referência explicando sobre as funções básicas do Arduino.


Material que explica como separar trechos de códigos e encapsular em funções que possam ser reutilizadas em outras partes do mesmo código.


Material que explica como utilizar, os escopos, tipos e detalhes sobre as variáveis de memória do Arduino.


Esse material fala das constantes, que são macros utilizadas durante a programação, sempre com o mesmo valor, como se fossem parametros configuráveis. Explica a maior parte das palavras-chaves que usamos, como HIGH, LOW etc.

Material completo sobre criação e manipulação de textos no Arduino. Entenda como funcionam os arrays de chars e conheça o objeto String.


Material sobre loops e desvios condicionais da programação do Arduino.


Exemplo completo de como ler os dados analogicos com o Arduino e imprimir na Serial.


Material sobre as portas PWM do Arduino, que possibilitam saída analógica, regulada por largura de pulsos.


Material sobre as portas analógicas do Arduino.
 
Material sobre arrays dentro de arrays, como declarar e como usar essa poderosa ferramenta!


Material completo sobre criação de bibliotecas no Arduino que ajudam a compartilhar o mesmo código entre programas diferentes do Arduino.

Já dá pra montar um livro de programação com esse material né? Vou juntar com um outro material não publicado e tentar achar uma editora pra publicar...


Fora todo esse material de referência, ainda tem minha saga com o ENC28J60 e também alguns posts importantes sobre os módulos RF433mhz.

Esse aqui parar finalizar esse post, fala todos os detalhes do Arduino e a Internet através dos Shields de Ethernet para Arduino:

http://renatoaloi.blogspot.com.br/2013/12/arduino-e-internet-ou-seria-ethernet.html

Boa leitura!

Abraços,
Renato

domingo, 20 de setembro de 2015

Windows 10 vs. Ubuntu 14



Bom dia!

Os usuários do Windows estão em polvorosa!

Basta acessar qualquer rede social para ver telas dos usuários satisfeitos porque conseguiram atualizar seus sistemas!

E também começaram a surgir todo tipo de tutorial. Hoje um me chamou atenção. Explicava como instalar um Projetor no Windows 10... Achei estranho. Precisa de manual pra instalar um mísero projetor no Windows 10?

Falando nisso o que aconteceu com o Windows 9? Pulou do 8 para o 10? Microsoft desaprendeu a contar?

Tenho muita pena de quem depende de Windows pra trabalhar. Eu já tive que usar Windows todo dia e posso dizer que é um inferno e a gente nem sabe.

Basta começar a usar um MACOSX ou um Linux para perceber quanto o Windows é ruim e ainda está em fase de amadurecimento.

Vejamos, o MACOSX, como o próprio nome diz, já está na sua versão 10 desde 2006 eu acho... Atualmente está indo pra versão 11..

O Ubuntu já está na versão 14.04 ou superior. Nem sei qual versão está agora, pois a equipe do Ubuntu não faz marketing com suas atualizações como faz a Microsoft.

Na verdade a Microsoft é uma empresa marketeira e não de sistemas operacionais.

Quem lembra do Bill Gates passando vergonha em 98 com seu Windows que travou ao vivo ao instalar um mísero Scanner!

Bom, se você ainda precisa usar Windows todo dia, grave o Ubuntu em um pen-drive, assim vc pode usar um sistema operacional maduro, sem precisar formatar o computador.


O Linux é só gravar no PenDrive e sair usando!

Pra quem pensa em me perguntar se o Arduino funciona no Windows 10, a resposta é bem simples: Não sei e não pretendo testar tão cedo...

Boa sorte!


Abraços,
Renato

sábado, 19 de setembro de 2015

Interface de Audio para Arduino (VoxRecog Parte 1)

Pessoal,

Bom dia! Estou fazendo 15 coisas ao mesmo tempo, pra variar! :)

Mas uma delas é bem legal pois tem a ver com o post sobre reconhecimento de Voz no Arduino que fiz esses dias aqui no Blog, segue link:

http://renatoaloi.blogspot.com.br/2015/09/reconhecimento-de-voz-no-arduino.html

Bom o que fiz foi desenhar um circuito bem básico para que o aluno possa melhorar depois, mas que a princípio tenha um circuito-base para ligar um microfone de eletreto no Arduino.

Referência sobre Microfones por Unicamp:

http://adessowiki.fee.unicamp.br/media/Attachments/courseEA079_1S2010/MainPage/microfones.pdf

Foto do microfone de eletreto:





Foto do Circuito Utilizado:





Vídeo de funcionamento pode ser visto na Fanpage do Curso Arduino, nesse link:

https://www.facebook.com/cursoarduino1

Abraços,
Renato



sexta-feira, 18 de setembro de 2015

Futuro da Tecnologia - Quem lembra do bidê?

Bom dia!

Os mais novos provavelmente nunca ouviram falar do bidê! Quem é mais antigo conhece e deve estar dando risada agora.

O bidê é um exemplo ótimo da tecnologia que cai em desuso!

https://pt.wikipedia.org/wiki/Bid%C3%AA

Ele simplesmente é uma bacia para lavar as regiões dos "países baixos"!

Quem precisa de uma bacia instalada com um chuveiro hoje em dia para lavar a "parte de trás"? Talvez os idosos e hospitais, mas no dia-a-dia, o bidê caiu em desuso!

Porque uma tecnologia sai do foco de interesse das pessoas?

Afinal de contas alguém teve que pensar, projetar, desenhar (no papel, pois não tinha CAD na época), fabricar, montar linha de produção e tudo mais; para comercializar bidês!

Pensem nisso! Muitas empresas investiram dinheiro fabricando bidês!

Agora se ampliarmos esse conceito, um Motorola StarTAC pode ser considerado um bidê, não?

https://pt.wikipedia.org/wiki/Motorola_StarTAC

Afinal de contas quem usa um Motorola StarTAC, que foi um sucesso nos anos 2000, quando da chegada dos aparelhos celulares no Brasil?

Não tem mais uso. Acho que a rede dele nem funciona mais, não deve ser compatível com as novas redes modernas 4G... Então esse tipo de bidê acaba sendo jogado no fundo de uma gaveta e esquecido.

-------

Muito tempo depois.... em 2015? (diria um filme holiudiano)

Um garoto que acaba de receber seu StarterKit Microcontrolador Plus+, em visita na casa dos avós, sai abrindo todos os compartimentos a procura de todos os bidês que podem ser desmontados e ligados no seu novíssimo kit de desenvolvimento que acabou de chegar pelo correio intergalático!

Abraços,
Renato Aloi


quinta-feira, 17 de setembro de 2015

ENC28J60 - Nova Contribuição da Comunidade Arduino

Pessoal,

Boas novas sobre o ENC28J60! Parece que finalmente vou ter tempo para finalizar as novas implementações (e finais!) da biblioteca EtherEncLib.h, para Arduino.

Essas últimas implementações são as que vão garantir a entrada da biblioteca para o rol das "oficiais".

Afinal de contas não dá pra chamar de oficial uma biblioteca de Ethernet que não tenha DHCP!

Bom essa é uma das implementações finais que estão faltando...

Mas a outra que nem é tão importante para oficializar a biblioteca, mas vai garantir um lugar ao Sol, por oferecer um recurso que a concorrente biblioteca do W5100 não oferece de forma transparente: WOL (Wake-up On Lan).

Veja como é complicado implementar WOL no W5100:
http://playground.arduino.cc/Main/ArduinoWaker

A biblioteca EtherEncLib.h deve apresentar essas duas características em breve!

E a novidade mesmo é que tivemos mais uma contribuição da comunidade Arduino que nos enviou um código novo para implementar uma Errata que... deixa pra lá... Depois eu explico porque eu mesmo preciso entender direito. Mas o código ficou bonito! Vou testar!

https://github.com/renatoaloi/EtherEncLib/issues/10

Valeu Comunidade Arduino!

Abraços,
Renato Aloi

domingo, 13 de setembro de 2015

Patreon Fazendo Papelon - Pra cima do Arduino!

Bom dia!

O mundo tá virado! Que fique registrado aqui minha previsão de que a Internet das Coisas (IoT) será um fisco tão grande no Brasil, quanto a Black Friday!

Nem preciso explicar porque né?

Dias atrás fiquei sabendo por um grupo do G+ (que finalmente começou a carregar no 3G), de um tal de Patreon, uma plataforma educacional nova...

Até então era só o que eu sabia... Tolinho...

A Samsung já passou na frente de todas as empresas brasileiras e já fechou com a USP sua plataforma educacional chamada Android Samsung.

Ok, vou fechar as portas e vou abrir uma tecelagem. Foi o que sobrou pra os empresários brasileiros...

Se a USP que é uma universidade pública está virando as costas literalmente para a indústria brasileira, quem sou eu pra acreditar em derivativos do Arduino?

A USP já deciciu que a plataforma chamará Android Samsung, que diga-se de passagem NUNCA fez nada pela comunidade Arduino; chega agora e ainda renega o nome da maior comunidade de microcontroladores do Mundo?

Já chega atropelando chegando cheia de termos que não tem nada a ver com a plataforma que estamos tentando amadurecer na comunidade Arduino!

Como a USP pode ser traidora a esse ponto!?

Já fui traído pela Campus-Party (estou pouco me lixando se quiserem me processar, entrem na fila!), quando fez um orçamento gigantesco comigo, me fez comprometer compras enormes com meus fornecedores e depois foi na Sta. Ifigênia e comprou tudo na MultComercial, "porque já estava ali e era mais fácil"!!!

Pode? Depois de todo investimento que fizemos não só em material, mas em auxilio educacional e suporte ao Alexandre da Oficina de Chão, a organização da Campus-Party vai lá e compra na Sta Ifigenia porque era mais fácil!?

Nunca mais participei dessa palhaçada!

Agora a USP! Não!

Chega! Agora vou colocar a boca no trombone e os próximos da fila são SPC e DETRAN!

Fiquei puto!

Link dessa putaria da USP:
http://googlediscovery.com/2015/08/31/estudantes-de-sao-paulo-comecam-a-estudar-internet-das-coisas-com-android-em-kit-da-samsung/

Estou decepcionadíssimo com a classe educadora e acadêmica desse país!

Uma vergonha! Bando de ratos corruptos!

Abraços,
Renato


sábado, 12 de setembro de 2015

Programador Arduino - Brasil Precisa de Você!

Convocação geral do Curso Arduino a todos Arduineiros de Plantão!

Nos próximos anos vamos precisar de muitos programadores treinados na linguagem do Arduino.

Não perca tempo! A hora é agora!

Sim! Você mesmo! Nunca pensou que poderia se lançar no mercado vendendo programas para Arduino?

Vai sim!

Você acha sua região muito distante e que não tem mercado para isso?

Tem sim! Quanto mais distante a região, melhor o mercado!

Não precisa experiência prévia em eletrônica! É realmente sair fazendo!

Ahhh, mas eu nunca vou construir um módulo comercial...

Pode até ser que não, mas com certeza você já tem partes que são utilizadas em módulos comerciais, largamente utilizados, em cima da sua mesa!

Pegue como exemplo os módulos GPS's: que são os mesmo vendidos no Mercado Livre, aqueles usados pelas grandes empresas nas colheitaderas.

De onde você acha que veio o módulo RFID que você liga no seu Arduino para impedir sua irmã de entrar no seu quarto? Da indústria!

O mesmo módulo que você tem em cima da sua mesa de RFID que você liga no seu Arduino é o mesmo utilizado em 90% das empresas do Mundo (!) para dar acesso aos seus funcionários, todo santo dia!

Eu não estou falando de um módulo "parecido"... Mais "robusto", você pensa...

Não! É um módulo tão besta quanto esse que você encomenda no Aliexpress!

Não sabe por onde começar? Não tem problema, é tudo gratuito e online, você aprende no seu tempo!

http://www.youtube.com/cursoarduino

Neste canal, siga as "listas de reprodução" para orientar seu estudo!

https://www.youtube.com/user/cursoarduino/playlists

Comece pelo Básico!

https://www.youtube.com/watch?v=inYEsklZXNE&list=PLCAF80AF0CB5DF8D2

Siga para o Advanced!

https://www.youtube.com/watch?v=wXvlk5I4kSc&list=PLZBvA3l7rI6G7UyWQ4c1Pfq_-FDJwjb65

Exercite seus estudos no Módulo Express do Curso Arduino!

https://www.youtube.com/playlist?list=PLZBvA3l7rI6G9RaYHy0Y1EpcL-klbur7i

E defina sua carreira estudando o Curso Arduino Pró!

https://www.youtube.com/playlist?list=PLZBvA3l7rI6Eb2YMvCvvEWMnsVQKXpprR

Ou o Curso Arduino Automation:

https://www.youtube.com/playlist?list=PLZBvA3l7rI6Fwbi5JSjnD-ONgS0JeQ5Rt

Mas se você é como eu que gosta de fabricar suas próprias placas...

Sim! Tem muito mercado para você também!

Comece pelo Curso Arduino Confecção de PCB's!

https://www.youtube.com/playlist?list=PLZBvA3l7rI6F-vby7e3GkKGJfZwBw-L1D

Existe também um atalho para o quem está estudando Motores DC, Motores de Passo e Ponte H, nesse link aqui:

https://www.youtube.com/playlist?list=PLZBvA3l7rI6HW7nk7KNcbIBH43d8pLrOD

Amém! Você está formado!

Escreva um email para renato. aloi@gmail.com solicitando prova teste para certificado (que ainda não existe, mas você já vai treinando, eu vou criar em breve).

E agora????

Bom, é o seguinte, você vai fazer uma "engenharia reversa" no Arduino!

Isso mesmo você vai tirar o chip ATMega328 com bootloader Arduino UNO, daquela plaquinha bonitinha e azulinha e jogá-la fora!

Você só precisa de um Conversor USB/Serial e um ATMega328 com bootloader Arduino UNO.

Além disso você precisa de um cristal de 16Mhz, um resistor de 10K e um Capacitor de 100nF.

Assim foi criado o Arduino!

Sim! O SEU Arduino!

Você começará a criar derivativos da plataforma Arduino, sem infringir nenhum direito autoral!

Por isso você precisa jogar fora sua placa do Arduino e manter o chip ATMega!

A placa possui direitos autorais sobre o logo etc...

Mas o Código é Aberto! Basta retirar o chip da placa e criar suas próprias placas integradas com o chip do "Arduino" (o ATMega com bootloader Arduino UNO) e dar o nome e o logo que quiser!

Por onde começar a "engenharia reversa"?

Basta montar um Protuino UNO, que foi um produto educacional que criei em 2010 justamente para esse fim. Para que o aluno pudesse experimentar as dificuldades de se construir um Arduino "do zero" em cima de uma Protoboard.

Assim nasceu Protuino!

http://seriallink.com.br/lab/Arduino/Protuino_SerialLink.html

e

http://seriallink.com.br/lab/Arduino/Protuino_UNO_SerialLink.html

Com a mudança da plataforma Arduino Original para os chips ATMega8u2, eu voltei para o FTDi, e sigo até hoje, por isso lancei o Protuino FTDi:

http://seriallink.com.br/web/index.php?r=produtos%2Fkitprotuinoftdi

E também vale dar uma estudada nos links do Laboratório da Serial Link

http://seriallink.com.br/lab

Não é possível formar completamente sem uma graduação em todos os manuais de todas as placas das plataformas Arduino da Serial Link; e confira mais de 200 páginas de material que deve ser completamente compreendido, para total entendimento do conceito derivativo da plataforma Arduino!

http://seriallink.com.br/web/index.php?r=produtos%2Fplacas


Participe do Fórum do Curso Arduino para tirar dúvidas e me envie o email com o link para eu participar. Não consigo atender dúvidas pelo email, apenas no fórum.

http://seriallink.com.br/forum/

Utilize o Arduino Inventor para criar Automações pela Internet usando apenas um Arduino e um Ethernet Shied:

http://seriallink.com.br/web/index.php?r=arduino%2Fsaibamais

E finalmente se você tiver interesse em algum dos tópicos abaixo, estamos por aqui!

Instaladores da Plataforma Automation
http://seriallink.com.br/forum/viewtopic.php?f=93&t=3220

Solução de Gabaritos Utilizando Rede Neural Perceptron
http://seriallink.com.br/forum/viewtopic.php?f=68&t=3450&p=8847


Valeu pessoal! Acompanhem lançamentos de placas e novas plataformas Serial Link pela Fanpage http://facebook.com/cursoarduino1

Ah! E se você ainda quiser as aulas em melhor qualidade, tenho elas em DVD: http://seriallink.com.br/web/index.php?r=produtos%2Fdvds

Abraços,
Renato Aloi



sexta-feira, 4 de setembro de 2015

Europa: chega de afogamentos!

Participe da Petição da Avaaz. Eu participei!

https://secure.avaaz.org/po/no_more_drownings_loc/?wEbdYhb

Para todos os chefes de Estado e governos da União Europeia, e para o presidente da Comissão Europeia:

Nós, cidadãos globais, pedimos que V. Exas tomem a frente dos esforços para construir uma política global de apoio aos refugiados digna do século XXI. Esta política tem que focar em salvar vidas e proteger refugiados de guerras e da fome. Pedimos que V. Exas aumentem consideravelmente o número de refugiados que serão reassentados e realocados em toda a Europa, com o objetivo de reunir as famílias e de modo que a responsabilidade seja compartilhada com toda a União Europeia. Pedimos ainda que dêem apoio financeiro e técnico aos países na linha de frente da crise como a Grécia e garantam que nenhuma ação policial atrapalhará os esforços de resgate das pessoas que procuram refúgio.

Estou Indo Embora... Do Planeta Terra!


Estou Indo Embora... Do Planeta Terra!

Recentemente vi a imagem do menino migrante, tentando chegar na Europa, morto, afogado, deitado de bruços na praia.

Eu choro só de escrever essas linhas. Todo mundo que tem filho viu ali seu próprio filho! Acho que até os alienígenas estão incomodados com isso!

Se sofrermos uma invasão alienígena nos próximos dias não vão se dizer espantados!

Eu mesmo iria dizer para os alienígenas: Podem exterminar toda a raça humana, pois ela merece!

Eliminem também todos os animais e plantas e água da face do planeta para que não exista possibilidade dessa praga que chamamos de ser humano volte a habitar o planeta!

Precisamos extinguir, erradicar de uma vez por todas a raça humana do Universo!

O Ser Humano não merece viver nesse planeta ou em qualquer lugar da Galáxia!

Mas como eu sou humano também só rezo para que nenhuma vingança venha dos Céus em forma de apocalipse, pois estamos merecendo.

Crucificamos Jesus. Deus falou, ok, eles não sabem o que estão fazendo...

Agora o que dizer para Deus sobre aquele menino morto na praia!? Vamos dar a mesma desculpa que não sabíamos o que estávamos fazendo???

Que Deus e os Alienígenas nos perdoem, não desbravem sua ira ainda! Eu sei que ainda existe bondade no coração humano.

A gente só não sabe usar!

Abraços,
Renato Aloi

quarta-feira, 2 de setembro de 2015

Noticias Sobre A Internet Ponto-A-Ponto


Pessoal,

Para fechar o dia, uma notícia interessante sobre HTTP distribuído como protocolo para Internet Ponto-A-Ponto

https://www.mnot.net/blog/2015/08/18/distributed_http?imm_mid=0d7194&cmp=em-web-na-na-newsltr_20150819

Discordo do artigo no ponto que ele diz que receberemos a informação de um "desconhecido"...

Acho que conheceremos de alguma forma a pessoa que receberemos a informação...

O Whatsapp está aí pra provar que a Internet Ponto-A-Ponto funciona e as informações são divulgadas entre as pessoas que conhecemos; e não ao contrário.


Reconhecimento de Voz no Arduino

Pessoal,

Boa tarde! Vamos falar um pouco de audio/voz no Arduino? E também do reconhecimento de comandos vocais?

Quem estuda esse assunto sabe que a plataforma existente para fazer tal tarefa é o EasyVR Shield, conforme segue link:

http://www.veear.eu/products/

Parece que está na versão 3 e é largamente utilizado por quem quer implementar Reconhecimento de Voz no Arduino.

Eu mesmo quando decidi os tópicos do Curso Arduino Automation optei por essa plataforma para a aula 12, conforme segue a grade de aulas da época:

http://renatoaloi.blogspot.com.br/2013/02/grade-de-aulas-curso-arduino-automation_13.html

Repare que muita coisa ainda não foi resolvida até agora! A plataforma Wireless ainda estou fechando o projeto do Raduino e o EasyVR já está na sua segunda versão...

Muito bem, se eu tivesse produzido material logo na época, eu já teria que ter atualizado para a nova versão. Duas vezes, porque acabei de descobrir que está na versão 3!

Então o fato é que TODAS as plataformas estão amadurecendo. 

Eu estou terminando de resolver o Raduino e vou investir tempo de estudo no Reconhecimento de Voz, passando na frente dos outros assuntos.

O que é Reconhecimento de Voz (VR)?
VR é o acrônimo em inglês para Voice Recognition. Significa o computador capaz de receber comandos por voz humana.


No caso da Automação, VR serve para receber comandos de voz e ativar atuadores, acendendo luzes, abrindo portas, e qualquer outro aparelho compatível com a Internet das Coisas (IoT).

Existem outras tecnologias que podem ser anexadas ao Arduino para acrescentar a característica de VR:
  1. Usar um MACOSX para o VR e enviar comandos via serial para o Arduino.
  2. Usar o Siri do iPhone e conversar via bluetooth com o Arduino.

Mas porque não temos VR diretamente no Arduino?
Eu nunca vi pessoalmente um Shield EasyVR, mas percebi uma pasta cobrindo o chip... Que deve ser um FPGA ou ARM, para resolver a parte de Reconhecimento de Voz.

Eu precisaria estudar a fundo o funcionamento para determinar isso.

Mas o EasyVR NUNCA me interessou, sabe porque?

Desde quando eu publiquei a grade de aulas do Curso Arduino Automation, eu já desdenhava o EasyVR.

Vou explicar porque.

Eu tenho uma teoria maluca que é possível resolver isso apenas usando um Arduino UNO e um circuito simples com um microfone, desses de eletreto.

O ATMega328 possui um circuito interno de ADC de 10bits.

Tudo bem! Eu sei que os audiófilos vão reclamar: Só 10 bits!?

Ok, mas pense bem, só precisamos capturar a VOZ! É só voz humana! E 10 bits é mais que suficiente até para detectar a amplitude necessária para reconhecer alguns comandos de voz.

Existe outro problema que é reconhecer o dono da voz, mas isso não sei se o EasyVR faz...

Enfim, considerando que temos audio entrando em uma porta analógica do Arduino, exemplo A0, devidamente polarizado em 2,5V, oscilando para cima e para baixo conforme o som do microfone.

Exemplo de circuito:

Créditos do circuito:
http://electronics.stackexchange.com/questions/36795/using-a-microphone-with-an-arduino

Testando 1, 2, 3...

Bom, já temos audio no Arduino, então que tal usar algumas técnicas de "sampling" para formar pacotes de áudio.

Esses pacotes podem ser gravados na EEPROM ou em um SDCard. Não lembro do link agora, mas já vi uma longa discussão em um site gringo e é perfeitamente possível.

Agora Vem a Parte Legal, Quer Dizer, Neural!

Muito bem, essa parte é bacana! Se temos o audio já em pacotes na memória, podemos ler esses pacotes e utilizar uma Rede Neural Artificial (RNA) para "aprender" a "entender" os comandos de voz.

Como estamos falando de uma única dimensão, é bem mais fácil que implementar um LeCunn89! Basta um Perceptron simples, uma camada oculta e pronto! Temos nosso reconhecedor de voz!

Você ainda não acredita ser possível? Veja meu projeto de Rede Neural Perceptron para leitura de gabaritos:

http://seriallink.com.br/forum/viewtopic.php?f=68&t=3450&p=8847

Pronto! É só juntar todas as peças!

Divirtam-se!

Comentários?

Abraços,
Renato

Fabricação de Arduino no Brasil

Pessoal,

Bom dia! Lancei um desafio no Facebook e espero que os fabricantes de produtos Arduino no Brasil se manifestem!

Mesmo quem não é fabricante, mas que está criando suas placas em casa...

Postem fotos das placas que vocês estão fabricando no Brasil!

Não vale nada importado, nem fabricado na China hein!

Veja a postagem aqui:
https://www.facebook.com/cursoarduino1

Vejo muitos desenvolvedores trabalhando com suas próprias placas e fabricações e achei interessante juntar material sobre o assunto.

Participem!
Abraços,
Renato

terça-feira, 1 de setembro de 2015

Tecnologia da Informação Está Acabando Com Capitalismo?

Bom dia!

Estou com um lote de placas no forno, publicando códigos no fórum, me atualizando das notícias no mundo e agora sobrou um tempo para escrever.

Minha análise do mundo e do Brasil entrou em crise.

As pessoas estão discutindo Democracia, Comunismo, Capitalismo, Socialismo e se esquecendo das coisas do dia-a-dia!


Se tirarmos o controle total do Governo, quem oferecerá/regulará planos de Saúde? Plano de Previdência?

Muitos falam sobre ensinar a pescar em vez de dar o peixe... Mas estes mesmos que falam isso esquecem dos enfermos, daqueles que não podem pescar. Dos que tem medo de água. Daqueles que tem medo do peixe! O ser humano é complicado!

Não dá pra simplificar um sistema de gestão de pessoas sem considerar as diferenças! Não existe uma regra que sirva pra todos... Não existe uma solução mágica.

O novo mundo que a Internet das Coisas trouxe é irreversível e faz parte de "uma coisa" que não entendemos e vamos ter que nos adaptar!

Peguem como exemplo o Uber, que vem causando tanta polêmica no Brasil... Melhor ainda! Vamos ver um novo que vai chegar em breve aqui.

Existe um outro serviço que começou a circular na Internet das Coisas que oferece serviços gerais, no modelo do Uber, você tem a ferramenta, você vai lá, conserta e recebe por isso.

Assim como o "Uber" está para o serviço de transporte de pessoas, o "TaskRabbit" está para os serviços gerais.

https://www.taskrabbit.com/

O Governo não dá conta de atender a demanda da população, portanto a população resolve as coisas por conta própria.

O Uber é uma manifestação disso. Através da Internet, pessoas e empresas comuns hoje em dia podem movimentar massas em prol de um serviço/ação.

Durante anos os taxistas sofreram para comprar suas licenças e operar seus veículos pelas ruas da cidade.

Mas ninguém se perguntou quem deu autorização para o Governo controlar isso? Porque o Governo ganha dinheiro com licenças para controlar um serviço que a população não pediu que fosse controlado? Provavelmente para atender interesse de algum sindicato...

E as estradas com seus pedágios? Quem foi lá e falou: Governo, constrói aí as estradas e quando vc não der conta a gente privatiza tudo e coloca pedágios?

Isso não existe, a gente sabe, mas também sabemos que essas coisas acontecem por interesses comerciais de grupos sindicais, que estão ali, no dia-a-dia, infernizando a vida dos funcionários públicos.

No final das contas, as minorias são atendidas e as maiorias não!

Quando surge um aplicativo como o Uber, com apelo explícito comercial os sindicatos gritam, como se o que eles próprios estivessem fazendo algo do fundo de seus corações...

Todo mundo sabe que não existe almoço grátis! Mesmo o bandejão popular não é de graça! Custa R$ 1,00 a refeição!

Não existe esse negócio do Governo dar de "bom coração". Isso é uma ilusão que os políticos vendem para esconder que eles mesmos são capitalistas vorazes!

Peguem como exemplo o Bolsa-Familia. Por ser do Governo (seja lá de qual for) é visto com "bons-olhos", mas se fosse uma empresa privada coordenando entrega de cestas básicas seria visto com "maus olhos".

Tudo é uma questão de ponto-de-vista. O capitalismo não é bom ou ruim, mas as pessoas que o praticam que são!

Não acredito no fim do capitalismo, mas na mudança da consciência das pessoas.

Regular os custos pelo mínimo e vender com lucros muito baixos também não funciona.

Controlar/taxar importação de produtos em um mundo globalizado e "Internético" do Século XXI também não funciona.

O Capitalismo vai ter sim que se adaptar! Muitos que antes "mamavam" nas fontes da desinformação; e estão desesperados com a chegada da Internet das Coisas.

O fato da Internet ter trazido conhecimento livre e despretensioso é um fato que o Capitalismo ainda não absorveu.

O Capitalista voraz não entende que ele primeiro precisa contribuir com a comunidade que o está sustentando.

E ao mesmo tempo o Consumidor voraz está se dando conta que o dinheiro eletrônico está muito caro e muito taxado pelo Governo, sem que ele tivesse pedido por isso...

A Tecnologia da Informação mudou sim o mundo. Se foi para pior ou melhor, vai depender de você e de mim! De todos nós!

Abraços,
Renato