Projeto: Harpa Laser

O Matheus Graciano está trabalhando numa harpa laser. O funcionamento é muito simples, um laser é apontado diretamente para um LDR (resistor dependente de luz) e fica-se monitorando o sinal vindo do LDR na porta analógica. Quando o laser é interrompido, o valor lido na porta analógica muda e então sabemos que nota deve ser tocada. Abaixo segue o vídeo da primeira versão da harpa, em breve faremos uma versão melhorada.


Nesta primeira versão da harpa usamos: 


  • 7 Lasers vermelho;
  • 7 LDRs;
  • 8 Resistores de 100 Ohms;
  • 1 Botão push;
  • Fios, muitos fios;
  • Algumas peças da Atto.
  • Esta harpa é composta por 7 "cordas" que devem ser ligadas a 7 portas analógicas. Portanto, tivemos que usar o arduino Mega que tem 16 portas analógicas. Na figura abaixo eu mostro o esquema de como ligar o LDR, o botão e o Buzzer. 


Neste projeto, as portas utilizadas são diferentes da imagem acima. Portanto, se for fazer a sua harpa, verifique quais portas você utilizou. No vídeo acima, não utilizamos um buzzer e sim os auto-falantes do micro. Se quiser fazer o mesmo, basta trocar o buzzer do diagrama acima por um plug fêmea de fone de ouvido. 

Abaixo segue o código Arduino que foi utilizado:


//////////////////////////////////////////// 
// Harpa Laser 
// Por Matheus Graciano 
//////////////////////////////////////////// 

// Vetores com notas musicais 
// A primeira posição é a nota normal 
// A segunda é a nota sustenida 
float notaA[] = {440.000, 466.164}; 
float notaB[] = {493.883, 523.251}; 
float notaC[] = {523.251, 554.365}; 
float notaD[] = {587.329, 622.254}; 
float notaE[] = {659.255, 698.456}; 
float notaF[] = {698.456, 739.989}; 
float notaG[] = {783.991, 830.609}; 

// Algumas variáveis 
float notaAnterior = 0, notaNova = 0; 
int dt = 0, t0, acidente = 0; 

void setup(){ 
pinMode(21, INPUT); //Porta onde está ligado o botao sustenido 
pinMode(7, OUTPUT); //Porta do Buzzer 

void loop(){ 

//Verifica se o botao está apertado 
acidente = digitalRead(21); 

// Varre as portas analógicas de 0 a 7 e verifica a nova nota 
if(analogRead(0)< 120) { 
notaAnterior = notaC[acidente]/4; 
if(analogRead(1)< 120) { 
notaAnterior = notaD[acidente]/4; 
if(analogRead(2)< 70) { 
notaAnterior = notaE[acidente]/4; 
if(analogRead(3)< 70) { 
notaAnterior = notaF[acidente]/4; 
if(analogRead(4)< 70) { 
notaAnterior = notaG[acidente]/4; 
if(analogRead(5)< 120) { 
notaAnterior = notaA[acidente]/2; 
if(analogRead(7)< 120) { 
notaAnterior = notaB[acidente]/2; 

//Se a nota mudar, ele para e envia a nova nota 
if(notaAnterior != notaNova){ 
noTone(7); notaNova = notaAnterior; t0 = millis(); } 
// A nota final dura 1 segundo 
if(dt>1000) 
noTone(7); 
else{ 
tone(7, notaNova, 1000); 
dt = millis()-t0; 


Postagem Original e devidos créditos: aqui

0 comentários:

O conteúdo deste blog/site pode e deve ser divulgado, conforme lei a 9.610/98 meus direitos estão assegurados, portanto eu permito a copia e reprodução gratuita, seja total ou parcial, não acarretando qualquer onûs financeiro aos interessados, porém, vedo o uso para fins lucrativos, toda reprodução para o público deve citar a fonte extraída, no caso o Técnico Linux - O Espaço do Software Livre e seja citada junto com um link para a postagem original, onde a referência deve estar numa fonte de tamanho igual ou maior a do texto, obviamente que os links citados não estão sujeitos ao mesmo termo. O conteúdo textual original desta página está disponível sob a licença GNU FDL 1.2.

Todas as marcas citadas pertencem aos seus respectivos proprietários. Os direitos autorais de todas as ilustrações pertencem aos respectivos autores, e elas são reproduzidas na intenção de atender ao disposto no art. 46 da Lei 9.610 - se ainda assim alguma delas infringe direito seu, entre em contato para que possamos removê-la imediatamente ou ainda lhe dar os devidos créditos.

Copyright © 2016 O Espaço do Software Livre