segunda-feira, 15 de maio de 2017

Projeto do Kit Iniciante - Roleta Eletrônica com Display de 7 segmentos




video



Esse projeto é bem simples, mas bastante divertido. Utilizando um display de 7 Segmentos você vai construir uma roleta eletrônica para sorteio de 10 números.
A roleta eletrônica faz um sorteio de números entre 1 e 10 (neste caso, o '0' representa o número '10') mostrados no display. O sorteio do numero se dá ao pressionar o botão. Enquanto o botão não é pressionado, o display fica passando todos os números do sorteio.




Para esse projeto você vai precisar dos seguintes itens.

A montagem do projeto na protoboard é mostrada na figura acima. É importante lembrar que o código que mostramos aqui funciona para displays de 7 segmentos de cátodo comum. Esse display faz parte do kit iniciante NMK
Após fazer a montagem em sua protoboard, copie o código abaixo e cole no ambiente de programação do Arduino. Conecte sua placa Arduino e carrege seu código. É hora de testar!


//Matriz de acionamento do display de 7 segmentos.
//Cada linha represente quais segmentos devem ser ligados, no caso, 1 é ligado e 0 é desligado
int disp[10][8] = { { 0, 1, 1, 1, 1, 1, 1, 0 }, // = Digito 0 crescente
  { 0, 1, 0, 0, 1, 0, 0, 0 }, // = Digito 1
  { 0, 0, 1, 1, 1, 1, 0, 1 }, // = Digito 2
  { 0, 1, 1, 0, 1, 1, 0, 1 }, // = Digito 3
  { 0, 1, 0, 0, 1, 0, 1, 1 }, // = Digito 4
  { 0, 1, 1, 0, 0, 1, 1, 1 }, // = Digito 5
  { 0, 1, 1, 1, 0, 1, 1, 1 }, // = Digito 6
  { 0, 1, 0, 0, 1, 1, 0, 0 }, // = Digito 7
  { 0, 1, 1, 1, 1, 1, 1, 1 }, // = Digito 8
  { 0, 1, 1, 0, 1, 1, 1, 1 }
};   // = Digito 9

//Definição da porta que o botão ira usar
byte botao=13;

//Função para imprimir um numero no display de 7 segmentos.
//A matriz disp deve ser construida de acordo com a montagem do display
void numero_display(int m) {

  for (int j = 2; j < 10; j++) {
    digitalWrite(j, disp[m][j - 2]);
  }

}

void setup() {

  //inialização da função randomica para calculos de numeros aleatorios.
  randomSeed(analogRead(0));
  for (int i = 2; i < 11; i++)
  {
    pinMode(i, OUTPUT);
  }
  pinMode(11, INPUT);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  //Geração de numero aleatorios de 0 a 9
  long n = random(0, 10);
  numero_display(n);
    delay(50);

  //Se o botão foi pressionado...
  if (digitalRead(botao) == HIGH) {
    delay(500);
    //O processo do arduino é interrompido e o display mostra o numero sorteado.
    //O sortei volta rodar quando o botão é pressionado mais uma vez.
    while (digitalRead(botao) == LOW) {

    }
    //Delays são usados para que a informação do botão seja lida apenas uma vez. 
    delay(400);
  }


}








sexta-feira, 12 de maio de 2017

Multiplexação: o que é?



Todos os dispositivos microcontrolados possuem uma quantidade limitada de portas que não permitem que um projeto seja escalado infinitamente. A quantidade de portas utilizadas em cada  projeto tem a ver com sua natureza. Projetos que utilizam uma grande quantidade de sinais de saída (como por exemplo, os projetos que utilizam displays de LEDs ou matrizes de LEDs) necessitam de uma abordagem que permita controlar uma quantidade de dispositivos maior que o número de portas que o microcontrolador possui. Para isso existe uma técnica bastante conhecida chamada de Multiplexação.

Multiplexar é transportar vários sinais sobre um único meio. A multiplexação pode ser implementada tanto no espaço quanto no tempo. Multiplexar em um meio espacial é partilhar um meio  físico para comportar mais de uma informação ou sinal. Multiplexação no tempo é distribuir intervalos de tempos para que cada dispositivo possa utilizar o mesmo meio de transmissão do sinal. O  que se deseja obter utilizando esta  técnica  é  economia,  pois  ao utilizarmos  o  mesmo meio  de  transmissão  para  diversos  canais   economiza-se  em  linhas,  suporte,  manutenção,  instalação, etc.

A multiplexação por divisão de tempo foi desenvolvida na década de 1950. Ela permite que múltiplos sinais viagem através do mesmo canal de transmissão, mas aloca diferentes intervalos de tempo para cada um. A multiplexação por divisão de tempo exige que todos os dispositivos envolvidos estejam sincronizados e os intervalos de tempo destinados a eles sejam utilizados de forma eficiente. Uma grande desvantagem da multiplexação é o uso de uma fonte constante de corrente elétrica. Técnicas de multiplexação são usadas em telefonia, processamento de vídeo, transmissão digital e transmissão analógica. Aplicações de multiplexação também são evidentes em dispositivos eletrônicos, veículos e aviões.  Um exemplo comum disso é a forma como as empresas fornecem internet e TV. Ambos os sinais trafegam pelo mesmo fio e ao chegar na nossa residência esses sinais sao separados


quarta-feira, 10 de maio de 2017

Como ler sinais analógicos no Arduino













No desenvolvimento de projetos e aplicações com Arduino e outros microcontroladores é importante sabermos diferenciar a natureza das grandezas utilizadas. Alguns dos sinais lidos pelo Arduino, por exemplo, são assim chamados analógicos, dada a sua forma de variar no tempo. São as grandezas que possuem uma relação direta com a forma como a natureza se comporta. A variação desses sinais ocorre em uma escala contínua, como por exemplo valores de velocidade, temperatura, umidade, entre outros. De modo diferente, os sinais digitais variam em uma escala discreta, diretamente relacionada à precisão de leitura do microcontrolador.





É clássico citar o fato de que o mundo real não é digital. Considerando a variação da temperatura como exemplo, ela muda dentro de um intervalo de valores e geralmente não faz mudanças abruptas ao longo do tempo. Muitas vezes medimos parâmetros ambientais como temperatura, intensidade de luz, usando sensores analógicos. Estes sinais resultantes são armazenados como dados digitais sequenciais.

http://natalmakers.mercadoshops.com.br/potenciometro-10k-139841111xJM



Uma experiência interessante para podermos perceber essa variação é utilizando um Potenciômetro de 10k, que é capaz de modificar o valor de resistência em seu pino central de acordo com a posição da chave giratória. Conectando-o ao Arduino da forma indicada na figura, carregue o programa abaixo para o Arduino. Verifique no monitor serial a variação de tensão causada pela variação de resistência do potenciômetro. Para visualizar graficamente os resultados da experiência, utilize o Serial Plotter, clicando no menu correspondente na IDE no Arduino.







// Pino do potenciometro (pino do meio) ligado na porta A0 do arduino.
int analogPin = A0;    

// Variável para armazenar o valor lido
 int val = 0;          

void setup()
{

//Inicia o monitor Serial.
 Serial.begin(9600);         
}

void loop()
{

// Leitura do pino analogico
 val = analogRead(analogPin);   
 Serial.println(val);

}



terça-feira, 9 de maio de 2017

Utilizando o conversor de Nível Lógico





 
Com a popularização de plataformas de prototipação Arduino, vários dispositivos eletrônicos são lançados todos os dias com diferentes maneiras de se comunicar com o Arduino. O Arduino e outras placas de prototipagem microcontroladas são dispositivos que geralmente trabalham em um nível lógico de 5V, e a maioria dos sensores modernos, monitores, cartões flash e módulos trabalham com apenas 3.3V. Para facilitar esse processo de comunicação entre dispositivos de níveis lógicos diferentes, utilizamos o conversor de nível lógico, que consiste em uma pequena placa que possui um divisor de tensão para abaixar o nível lógico de 5v para 3.3V, e um circuito baseado em MOSFET para fazer a elevação do nível lógico de 3.3V para 5V.


Conversor de Nivel Lógico Bidirecional

O conversor de nível lógico bidirecional é um pequeno dispositivo que nivela sinais com diferentes níveis de tensão com segurança. Ele é capaz de compatibilizar os sinais simultaneamente. Este conversor de nível também funciona com dispositivos de 2.8V e 1.8V. Cada conversor de nível tem a capacidade de converter 4 pinos no lado de tensão mais elevada para 4 pinos no lado de tensão reduzida com duas entradas e duas saídas para cada lado. A pequena placa possui um uso bastante simplificado, bastando para isso ser alimentada a partir de duas fontes de tensão (alta e baixa tensão) conforme as tensões que o sistema está usando. Tensão elevada (5V por exemplo) para o pino "HV", tensão reduzida (3.3V por exemplo) para "LV", e terra do sistema para o pino "GND".

Entre os usos do Conversor de nível lógico estão a interconexão de pinos de comunicação I2C, SPI e leitura de sensores a partir dos pinos do microcontrolador.