Ave Maria, cheia de graça, o Senhor é convosco, bendita sois vós entre as mulheres e bendito é o fruto do vosso ventre, Jesus. Santa Maria, Mãe de Deus, rogai por nós pecadores, agora e na hora da nossa morte. Amém.
sábado, 26 de dezembro de 2015
terça-feira, 22 de dezembro de 2015
segunda-feira, 21 de dezembro de 2015
domingo, 20 de dezembro de 2015
terça-feira, 8 de dezembro de 2015
segunda-feira, 7 de dezembro de 2015
Apresentação do PIE2
Dia da apresentação do Projeto Intersiciplinar de Engenharia II
Lucas T R Freitas
Trombone eletrônico |
Sanfona Ultrassônica |
Lucas T R Freitas
Apresentações de Projeto Interdisciplinar UCL
Nota minha:
- Dia da apresentação do Projeto Interdisciplinar de Engenharia II
Lucas T R Freitas
domingo, 6 de dezembro de 2015
quarta-feira, 2 de dezembro de 2015
terça-feira, 1 de dezembro de 2015
segunda-feira, 30 de novembro de 2015
Saber Direito - Direito empresarial (5/5)
Notas minhas:
- Exclusão de Sócios na Limitada (LTDA)
- Ninguém é obrigado a se associar e a permanecer associado contra a sua vontade.
- Artigo 5°, Inciso XVII e XX da Constituição Federal
- "Art. 5º Todos são iguais perante a lei, sem distinção de qualquer natureza, garantindo-se aos brasileiros e aos estrangeiros residentes no País a inviolabilidade do direito à vida, à liberdade, à igualdade, à segurança e à propriedade, nos termos seguintes:"
- "XVII - é plena a liberdade de associação para fins lícitos, vedada a de caráter paramilitar;"
- "XX - ninguém poderá ser compelido a associar-se ou a permanecer associado;"
- Artigo 1029 do Código Civil
- "Art. 1.029. Além dos casos previstos na lei ou no contrato, qualquer sócio pode retirar-se da sociedade; se de prazo indeterminado, mediante notificação aos demais sócios, com antecedência mínima de sessenta dias; se de prazo determinado, provando judicialmente justa causa.
Parágrafo único. Nos trinta dias subseqüentes à notificação, podem os demais sócios optar pela dissolução da sociedade." - Há três maneiras de se apurar haveres de sócios em uma sociedade:
- 1- Para Sociedades Anônimas: cotação média em Bolsa das ações no último exercício social.
- 2- (Método Patrimonial) Pelo Patrimônio Líquido - avaliação do patrimônio a preço de mercado (o preço que vale hoje): Ativo menos Passivo Exigível (Dívidas). O que sobra é o Acervo Societário (Patrimônio Líquido).
- 3- (Método da Perspectiva de Rentabilidade - Fluxo de Caixa Descontado) - Perspectiva de lucros futuros para os próximos 3 anos.
- Artigo 1031 do Código Civil
- "Art. 1.031. Nos casos em que a sociedade se resolver em relação a um sócio, o valor da sua quota, considerada pelo montante efetivamente realizado, liquidar-se-á, salvo disposição contratual em contrário, com base na situação patrimonial da sociedade, à data da resolução, verificada em balanço especialmente levantado.
§ 1o O capital social sofrerá a correspondente redução, salvo se os demais sócios suprirem o valor da quota.
§ 2o A quota liquidada será paga em dinheiro, no prazo de noventa dias, a partir da liquidação, salvo acordo, ou estipulação contratual em contrário. " - CPC (Código de Processo Civil) de 1939
- Ação de dissolução de sociedade (total ou parcial)
- CPC (Código de Processo Civil) de 1973, Artigo 1218, Inciso VII
- "Art. 1.218. Continuam em vigor até serem incorporados nas leis especiais os procedimentos regulados pelo Decreto-lei nº 1.608, de 18 de setembro de 1939, concernentes:"
- "Vll - à dissolução e liquidação das sociedades (arts. 655 a 674);"
- Artigo 1085 do Código Civil:
- "Art. 1.085. Ressalvado o disposto no art. 1.030, quando a maioria dos sócios, representativa de mais da metade do capital social, entender que um ou mais sócios estão pondo em risco a continuidade da empresa, em virtude de atos de inegável gravidade, poderá excluí-los da sociedade, mediante alteração do contrato social, desde que prevista neste a exclusão por justa causa.
Parágrafo único. A exclusão somente poderá ser determinada em reunião ou assembléia especialmente convocada para esse fim, ciente o acusado em tempo hábil para permitir seu comparecimento e o exercício do direito de defesa." - Quórum para alterar o Contrato Social:
- Artigo 1076, Inciso 1, do Código Civil:
- "Art. 1.076. Ressalvado o disposto no art. 1.061 e no § 1o do art. 1.063, as deliberações dos sócios serão tomadas:"
- "I - pelos votos correspondentes, no mínimo, a três quartos do capital social, nos casos previstos nos incisos V e VI do art. 1.071;"
- "Art. 1.071. Dependem da deliberação dos sócios, além de outras matérias indicadas na lei ou no contrato:"
- "V - a modificação do contrato social;"
- "VI - a incorporação, a fusão e a dissolução da sociedade, ou a cessação do estado de liquidação;"
Lucas T R Freitas
quinta-feira, 26 de novembro de 2015
Saber Direito - Direito empresarial (4/5)
Notas minhas:
- Responsabilização de Terceiros na sociedade limitada (LTDA).
- Responsabilidade civil
- Ação ou omissão voluntária
- Eventis dani: o dano (a ser ressarcido)
- Nexo de causalidade: porque houve ação ou omissão voluntária
- Deliberação dolosa dos sócios por ilícitos
- tornam ilimitada a responsabilidade dos que a aprovaram
- Exemplo: balanços maquiados para licitações
- Responsabilização de administradores em sociedades empresarias.
- O administrador não é pessoal responsável pelas obrigações que contraia em nome da sociedade, porém, responderá perante a sociedade e o terceiro prejudicado quando agir ou se omitir ilícita e culposamente.
- Artigo 170, Constituição Federal - assegura a todos o princípio da dignidade: a todos, inclusive a pessoa jurídica. Princípio da dignidade da pessoa jurídica.
Lucas T R Freitas
quarta-feira, 25 de novembro de 2015
Direito Tributário. Legislação Tributária
Notas minhas:
- Impostos reguladores = impostos extrafiscais (exceções ao Princípio da Legalidade)
- IPI (Imposto sobre Produtos Industrializados), IOF (Imposto sobre Operações Financeiras), Imposto de importação, Imposto de exportação
- CIDE (Contribuição de Intervenção no Domínio Econômico) Petróleo ou Combustível
- Podem ser alterados mediante ato do Poder Executivo (decreto)
- ICMS sobre o combustível (a alíquota é fixada através de convênio - convênio entre todos os estados membro mais o Distrito Federal)
Direito Tributário - aula 5
Notas minhas:
- Função social do tributo
- Tributo e Justiça Social
- Tributos ocultos
- estão inseridos nos preços das mercadorias e serviços
- Reforma Tributária
Lucas T R Freitas
Direito Tributário - aula 4
Notas minhas:
- Função Social do Tributo
- Tributo, cidadania e dignidade
- Estado Democrático de Direito
- Cidadania
- Ética
- Dignidade da pessoa humana
- Capacidade contributiva
- Balizada entre o "mínimo existencial" (que não é o salário mínimo) e a vedação ao confisco.
Lucas T R Freitas
terça-feira, 24 de novembro de 2015
Direito Tributário - aula 3
Notas minhas:
- Função Social do Tributo: Tributo, Solidariedade e Propriedade.
- A Solidariedade justifica a tributação
- A receita proveniente de impostos não é vinculada a fundo ou despesa pública ou órgão público (Art. 167, Inciso IV, Constituição Federal 1988)
- Solidariedade fiscal
- Dosimetria da tributação
- Necessidade pública X Necessidade Coletiva
- Necessidade pública: o Estado é criado para atender as necessidades públicas. A necessidade pública é de interesse direto ou indireto dos indivíduos.
- Necessidade coletiva é específica a um grupo da sociedade (clubes de torcida, por exemplo).
- O tributo é arrecadado para atender às necessidades públicas.
- Princípio da vedação ao confisco
- O confisco equivale a afastar o indivíduo da propriedade
- Função extrafiscal proibitiva:
- Cigarro não pode ser proibido, mas afeta a saúde. O Estado começa a inibir o consumo (proíbe a propaganda, aumenta o ICMS, inclui advertências nas embalagens...).
Lucas T R Freitas
segunda-feira, 23 de novembro de 2015
domingo, 22 de novembro de 2015
sábado, 21 de novembro de 2015
sexta-feira, 20 de novembro de 2015
Diagrama de Funcionamento da Sanfona Ultrassônica - PIE2
PROJETO INTERDISCIPLINAR DE ENGENHARIA 2: programando Arduíno com sensor ultrassom para enviar notas musicais MIDI
UCL
LUCAS
TIAGO RODRIGUES DE FREITAS
PROJETO INTERDISCIPLINAR DE ENGENHARIA
2: programando Arduíno com sensor ultrassom para enviar notas musicais MIDI
LUCAS
TIAGO RODRIGUES DE FREITAS
PROJETO INTERDISCIPLINAR DE ENGENHARIA
2: programando Arduíno com sensor ultrassom para enviar notas musicais MIDI
Trabalho apresentado à disciplina Projeto Interdisciplinar de Engenharia
II, como requisito parcial para obtenção de nota.
SUMÁRIO
1 PROGRAMANDO ARDUÍNO COM SENSOR
ULTRASSOM PARA ENVIAR NOTAS MUSICAIS MIDI
Para a disciplina Projeto Interdisciplinar de Engenharia II (UCL - Serra
- ES), foi requisitado fazer um instrumento musical utilizando Arduíno.
Optei por fazer uma "Sanfona Ultrassônica", com dois sensores
Ultrassom HCSR04. Utilizei um Arduíno MEGA 2560. Também fiz um Trombone
Eletrônico, utilizando sensor ultrassom.
1.1 MEDIÇÃO DAS DISTÂNCIAS
Comecei a pesquisar em vários sites sobre como medir a distância usando
Arduíno e sensores ultrassom. Consegui informações relevantes no post
"HC-SR04 com Arduíno: Colocando o ultrassom para funcionar", do
seguinte blog: http://blog.repeatdomiau.com.br/miadas/arduino-com-ultrassom-hcsr04.
Enfim, cheguei ao seguinte código para medir as distâncias utilizando os
dois sensores ultrassom:
1.1.1
Código Arduíno para medir as
distâncias usando dois sensores ultrassom (entre aspas - retirar
as aspas se for utilizar)
"
#define echoPin1 13 //Pino 13 recebe o pulso do echo
#define trigPin1 12 //Pino 12 envia o pulso para gerar o echo
#define echoPin2 9 //Pino 9 recebe o pulso do echo
#define trigPin2 8 //Pino 8 envia o pulso para gerar o echo
void setup()
{
Serial.begin(9600); //inicia a porta serial
pinMode(echoPin1, INPUT); // define o pino 13 como entrada
(recebe)
pinMode(trigPin1, OUTPUT); // define o pino 12 como saida
(envia)
pinMode(echoPin2, INPUT); // define o pino 9 como entrada
(recebe)
pinMode(trigPin2, OUTPUT); // define o pino 8 como saida
(envia)
}
void loop()
{
//seta o pino 12 com um pulso baixo "LOW" ou desligado
ou ainda 0
digitalWrite(trigPin1, LOW);
//delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou
ainda 1
digitalWrite(trigPin1, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin1, LOW);
//pulseIn lê o tempo entre a chamada e o pino entrar em high
long duration1 = pulseIn(echoPin1,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem
dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia1 = duration1 /29 / 2 ;
Serial.print("Distancia sensor 1 em CM: ");
Serial.println(distancia1);
delay(1000); //espera 1 segundo para fazer a leitura novamente
//seta o pino 8 com um pulso baixo "LOW" ou desligado
ou ainda 0
digitalWrite(trigPin2, LOW);
//delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 8 com pulso alto "HIGH" ou ligado ou
ainda 1
digitalWrite(trigPin2, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 8 com pulso baixo novamente
digitalWrite(trigPin2, LOW);
//pulseIn lê o tempo entre a chamada e o pino entrar em high
long duration2 = pulseIn(echoPin2,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem
dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia2 = duration2 /29 / 2 ;
Serial.print("Distancia sensor 2 em CM: ");
Serial.println(distancia2);
delay(1000); //espera 1 segundo para fazer a leitura novamente
}
"
1.1.2 Explicação sobre o código Arduíno
Os sensores ultrassom HCSR04 tem quatro conexões: 5V, GND, Trigger e
ECHO. As conexões 5V e GND são para alimentação de energia. A conexão Trigger
(gatilho) é para a emissão do sinal ultrassom. A conexão ECHO detecta o sinal
ultrassom após ser refletido em alguma superfície.
Como o sinal vai e volta, é necessário dividir a distância por dois. Os
demais ajustes para chegar à distância em centímetros estão descritos no código
acima.
O código acima utilizou a porta serial 9600 e os valores de medições
podem ser visualizados utilizando-se o "Monitor Serial" do Arduíno
(Arduíno - Ferramentas - Monitor Serial // ou pressionando Ctrl + Shift + M).
Para a medição das distâncias, é necessário utilizar o programa do
Arduíno (gratuito, disponível em https://www.arduino.cc/), o Arduíno (placa -
utilizei o Arduíno MEGA 2560), o cabo USB que vem com o Arduíno, os dois
sensores ultrassom e o computador. A função "Monitor Serial" do
programa do Arduíno mostra as distâncias em cm (conforme o código acima).
1.2
EMITINDO AS NOTAS MIDI COM UM SENSOR ULTRASSOM
Com as medições prontas, resolvi inserir a emissão de notas musicais
MIDI conforme as distâncias medidas pelos sensores ultrassom. Voltei a estudar vários
sites. Aqui vão alguns links para ajudar quem queira fazer um instrumento
musical (encontrei de baterias, xilofones, instrumentos para música
eletrônica):
- Xilofone
com sensores de pressão (piezo): http://www.instructables.com/id/Arduino-Xylophone/
- Outro
xilofone com sensores de pressão (piezo): http://www.instructables.com/id/Arduino-Uno-Xylophone/
- Musical
MIDI shoes: http://www.instructables.com/id/Musical-MIDI-Shoes/
- Tambores
MIDI com Arduíno: http://www.instructables.com/id/MIDI-Arduino-Drums/
- Projeto
Mini Bateria Eletrônica: http://labdegaragem.com/profiles/blog/show?id=6223006%3ABlogPost%3A150112&commentId=6223006%3AComment%3A195737
- O
que é MIDI: http://www.instructables.com/id/What-is-MIDI/
- Fazendo
a saída de MIDI usando um Arduíno: https://itp.nyu.edu/physcomp/labs/labs-serial-communication/lab-midi-output-using-an-arduino/
- Programa
MIDI-OX para monitorar o sinal MIDI: http://www.midiox.com/
- Explicação
sobre o MIDI-OX: http://www.musitec.com.br/revistas/?c=66
- Enviando
sinais MIDI: http://forum.arduino.cc/index.php?topic=84651.0
- Vários
vídeos e anotações minhas: http://lucastrfreitas.blogspot.com.br/search/label/Projeto%20Interdisciplinar%20de%20Engenharia%20II
Analisando tudo, foram necessários os seguintes programas para o som
sair:
- Programa
do Arduíno (para escrever o código a ser gravado no Arduíno):
- LoopMIDI
(é um "cabo virtual" para conexões MIDI):
- Hairless
(faz uma ponte para aparelhos que usam a conexão SERIAL - é um Serial
Bridge):
- MIDI-OX
(monitoramento das notas MIDI):
- VMPK
MIDI Piano Keyboard (execução das notas MIDI)
- Reaper
(execução das notas MIDI)
- Kontakt
5 (execução das notas MIDI)
Uma nota importante é que a porta Serial para usar o Hairless usa o
número 115200. Gastei muito tempo tentando fazer as notas MIDI saírem usando
outros números de portas e não consegui. É possível trocar o número Baud rate
(115200) no Hairless: Hairless >> File >> Preferences >> Baud
rate.
Olhando os códigos que encontrei, consegui fazer o som funcionar com
várias notas utilizando o código abaixo. Utilizei as notas de 68 a 91, para uma
distância de 50 cm. Coloquei a nota 68 para os primeiros 2 cm. A cada 2 cm a
mais de distância do ultrassom, a nota aumenta em 1 número. Utilizei a função
"if" e "else if" para delimitar as distâncias. Caso alguém
queira tentar, acredito que seja possível fazer a variação de notas conforme a
distância utilizando a função "for".
A próxima seção apresenta o código que funcionou para um sensor
Ultrassom. O som do instrumento musical pode ser escolhido no programa que
executa as notas MIDI (como o VMPK MIDI piano Keyboard, por exemplo).
1.2.1
Código Arduíno que funcionou com
um sensor ultrassom (entre aspas - retirar as aspas se for utilizar)
"
#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo
const byte noteOffCommand = 0;
const byte noteOnCommand = 1;
byte channel = 0; // Channel 1 (0-15 selects channel 1-16)
//byte pitchByte = 69; // A4 = Middle A = 440 Hz (Piano keyboard
runs from 21/A0 to 108/C8)
//byte velocityByte = 127; // Medium Velocity/Volume (value from 0
to 127)
void setup()
{
Serial.begin(115200); //inicia a porta serial 115200
para o HairLess
pinMode(echoPin, INPUT); // define o pino 13 como entrada
(recebe)
pinMode(trigPin, OUTPUT); // define o pino 12 como saida
(envia)
}
void loop()
{
//seta o pino 12 com um pulso baixo "LOW" ou desligado
ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou
ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
//pulseInt lê o tempo entre a chamada e o pino entrar em high
long duration = pulseIn(echoPin,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem
dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia = duration /29 / 2 ;
if (distancia >= 50){
delay(1000); // Tempo de espera duration
}
else if (distancia <= 2){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(68));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(68));
Serial.write(byte(0));
}
else if ((distancia > 2) && (distancia <= 4)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(69));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(69));
Serial.write(byte(0));
}
else if ((distancia > 4) && (distancia <= 6)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(70));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(70));
Serial.write(byte(0));
}
else if ((distancia > 6) && (distancia <= 8)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(71));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(71));
Serial.write(byte(0));
}
else if ((distancia > 8) && (distancia <= 10)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(72));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(72));
Serial.write(byte(0));
}
else if ((distancia > 12) && (distancia < 14)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(73));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(73));
Serial.write(byte(0));
}
else if ((distancia > 14) && (distancia <= 16)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(74));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(74));
Serial.write(byte(0));
}
else if ((distancia > 16) && (distancia <= 18)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(75));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(75));
Serial.write(byte(0));
}
else if ((distancia > 18) && (distancia <= 20)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(76));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(76));
Serial.write(byte(0));
}
else if ((distancia > 20) && (distancia <= 22)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(77));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(77));
Serial.write(byte(0));
}
else if ((distancia > 22) && (distancia <= 24)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(78));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(78));
Serial.write(byte(0));
}
else if ((distancia > 24) && (distancia <= 26)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(79));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(79));
Serial.write(byte(0));
}
else if ((distancia > 26) && (distancia <= 28)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(80));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(80));
Serial.write(byte(0));
}
else if ((distancia > 28) && (distancia <= 30)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(81));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(81));
Serial.write(byte(0));
}
else if ((distancia > 30) && (distancia <= 32)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(82));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(82));
Serial.write(byte(0));
}
else if ((distancia > 32) && (distancia <= 34)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(83));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(83));
Serial.write(byte(0));
}
else if ((distancia > 34) && (distancia <= 36)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(84));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(84));
Serial.write(byte(0));
}
else if ((distancia > 36) && (distancia <= 38)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(85));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(85));
Serial.write(byte(0));
}
else if ((distancia > 38) && (distancia <= 40)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(86));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(86));
Serial.write(byte(0));
}
else if ((distancia > 40) && (distancia <= 42)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(87));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(87));
Serial.write(byte(0));
}
else if ((distancia > 42) && (distancia <= 44)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(88));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(88));
Serial.write(byte(0));
}
else if ((distancia > 44) && (distancia <= 46)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(89));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(89));
Serial.write(byte(0));
}
else if ((distancia > 46) && (distancia <= 48)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(90));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(90));
Serial.write(byte(0));
}
else if ((distancia > 48) && (distancia < 50)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(91));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(91));
Serial.write(byte(0));
}
//delay(200); //espera 200 milissegundos para fazer a leitura novamente
}
"
1.3
EMITINDO AS NOTAS MIDI COM DOIS SENSORES ULTRASSOM
Após fazer as notas MIDI funcionarem com um sensor ultrassom, consegui
colocar os dois sensores ultrassom para funcionar. No código abaixo está um
sensor relacionado com o canal 1 e o outro com o canal 2, ou seja, podem ser
ligados dois tipos de sons instrumentos musicais, um em cada canal.
Para o primeiro sensor, as notas variam de 68 a 91. Para o segundo
sensor, as notas variam de 68 a 45.
Travei a distância máxima de cada sensor ultrassom em 50 cm para a
emissão de notas.
Conforme a necessidade de cada projeto, o código poderá ser alterado.
1.3.1 Código Arduíno que funcionou com
dois sensores ultrassom (entre aspas - retirar as aspas se for utilizar)
"
#define echoPin2 9 //Pino 9 recebe o pulso do echo
#define trigPin2 8 //Pino 8 envia o pulso para gerar o echo
#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo
const byte noteOffCommand = 0;
const byte noteOnCommand = 1;
byte channel = 0; // Channel 1 (0-15 selects channel 1-16)
byte channel2 = 1; // Channel 2 (0-15 selects channel 1-16)
//byte pitchByte = 69; // A4 = Middle A = 440 Hz (Piano keyboard
runs from 21/A0 to 108/C8)
//byte velocityByte = 127; // Medium Velocity/Volume (value from 0
to 127)
void setup()
{
Serial.begin(115200); //inicia a porta serial 115200
para o HairLess
pinMode(echoPin, INPUT); // define o pino 13 como entrada
(recebe)
pinMode(trigPin, OUTPUT); // define o pino 12 como saida
(envia)
pinMode(echoPin2, INPUT); // define o pino 9 como entrada
(recebe)
pinMode(trigPin2, OUTPUT); // define o pino 8 como saida
(envia)
}
void loop()
{
// -- ULTRASSOM SENSOR 1 -- Medição --
//seta o pino 12 com um pulso baixo "LOW" ou desligado
ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou
ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
//pulseInt lê o tempo entre a chamada e o pino entrar em high
long duration = pulseIn(echoPin,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem
dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia = duration /29 / 2 ;
// -- NOTAS MIDI -- ULTRASSOM SENSOR 1 --
if (distancia >= 50){
delay(300); // Tempo de espera 300 milissegundos
}
else if (distancia <= 2){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(68));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(68));
Serial.write(byte(0));
}
else if ((distancia > 2) && (distancia <= 4)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(69));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(69));
Serial.write(byte(0));
}
else if ((distancia > 4) && (distancia <= 6)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(70));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(70));
Serial.write(byte(0));
}
else if ((distancia > 6) && (distancia <= 8)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(71));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(71));
Serial.write(byte(0));
}
else if ((distancia > 8) && (distancia <= 10)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(72));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(72));
Serial.write(byte(0));
}
else if ((distancia > 12) && (distancia < 14)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(73));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(73));
Serial.write(byte(0));
}
else if ((distancia > 14) && (distancia <= 16)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(74));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(74));
Serial.write(byte(0));
}
else if ((distancia > 16) && (distancia <= 18)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(75));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(75));
Serial.write(byte(0));
}
else if ((distancia > 18) && (distancia <= 20)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(76));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(76));
Serial.write(byte(0));
}
else if ((distancia > 20) && (distancia <= 22)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(77));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(77));
Serial.write(byte(0));
}
else if ((distancia > 22) && (distancia <= 24)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(78));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(78));
Serial.write(byte(0));
}
else if ((distancia > 24) && (distancia <= 26)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(79));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(79));
Serial.write(byte(0));
}
else if ((distancia > 26) && (distancia <= 28)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(80));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(80));
Serial.write(byte(0));
}
else if ((distancia > 28) && (distancia <= 30)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(81));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(81));
Serial.write(byte(0));
}
else if ((distancia > 30) && (distancia <= 32)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(82));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(82));
Serial.write(byte(0));
}
else if ((distancia > 32) && (distancia <= 34)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(83));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(83));
Serial.write(byte(0));
}
else if ((distancia > 34) && (distancia <= 36)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(84));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(84));
Serial.write(byte(0));
}
else if ((distancia > 36) && (distancia <= 38)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(85));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(85));
Serial.write(byte(0));
}
else if ((distancia > 38) && (distancia <= 40)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(86));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(86));
Serial.write(byte(0));
}
else if ((distancia > 40) && (distancia <= 42)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(87));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(87));
Serial.write(byte(0));
}
else if ((distancia > 42) && (distancia <= 44)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(88));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(88));
Serial.write(byte(0));
}
else if ((distancia > 44) && (distancia <= 46)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(89));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(89));
Serial.write(byte(0));
}
else if ((distancia > 46) && (distancia <= 48)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(90));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(90));
Serial.write(byte(0));
}
else if ((distancia > 48) && (distancia < 50)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(91));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(91));
Serial.write(byte(0));
}
// -- ULTRASSOM SENSOR 2 -- Medição --
//seta o pino 8 com um pulso baixo "LOW" ou desligado
ou ainda 0
digitalWrite(trigPin2, LOW);
//delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 8 com pulso alto "HIGH" ou ligado ou ainda
1
digitalWrite(trigPin2, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 8 com pulso baixo novamente
digitalWrite(trigPin2, LOW);
//pulseIn lê o tempo entre a chamada e o pino entrar em high
long duration2 = pulseIn(echoPin2,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem
dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia2 = duration2 /29 / 2 ;
// -- NOTAS MIDI -- ULTRASSOM SENSOR 2 --
if (distancia2 >= 50){
delay(300); // Tempo de espera 300 milissegundos
}
else if (distancia2 <= 2){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(68));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(68));
Serial.write(byte(0));
}
else if ((distancia2 > 2) && (distancia2 <= 4)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(67));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(67));
Serial.write(byte(0));
}
else if ((distancia2 > 4) && (distancia2 <= 6)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(66));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(66));
Serial.write(byte(0));
}
else if ((distancia2 > 6) && (distancia2 <= 8)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(65));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(65));
Serial.write(byte(0));
}
else if ((distancia2 > 8) && (distancia2 <= 10)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(64));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(64));
Serial.write(byte(0));
}
else if ((distancia2 > 12) && (distancia2 < 14)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(63));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(63));
Serial.write(byte(0));
}
else if ((distancia2 > 14) && (distancia2 <= 16)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(62));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(62));
Serial.write(byte(0));
}
else if ((distancia2 > 16) && (distancia2 <= 18)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(61));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(61));
Serial.write(byte(0));
}
else if ((distancia2 > 18) && (distancia2 <= 20)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(60));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(60));
Serial.write(byte(0));
}
else if ((distancia2 > 20) && (distancia2 <= 22)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(59));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(59));
Serial.write(byte(0));
}
else if ((distancia2 > 22) && (distancia2 <= 24)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(58));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(58));
Serial.write(byte(0));
}
else if ((distancia2 > 24) && (distancia2 <= 26)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(57));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(57));
Serial.write(byte(0));
}
else if ((distancia2 > 26) && (distancia2 <= 28)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(56));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(56));
Serial.write(byte(0));
}
else if ((distancia2 > 28) && (distancia2 <= 30)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(55));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(55));
Serial.write(byte(0));
}
else if ((distancia2 > 30) && (distancia2 <= 32)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(54));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(54));
Serial.write(byte(0));
}
else if ((distancia2 > 32) && (distancia2 <= 34)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(53));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(53));
Serial.write(byte(0));
}
else if ((distancia2 > 34) && (distancia2 <= 36)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(52));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(52));
Serial.write(byte(0));
}
else if ((distancia2 > 36) && (distancia2 <= 38)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(51));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(51));
Serial.write(byte(0));
}
else if ((distancia2 > 38) && (distancia2 <= 40)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(50));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(50));
Serial.write(byte(0));
}
else if ((distancia2 > 40) && (distancia2 <= 42)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(49));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(49));
Serial.write(byte(0));
}
else if ((distancia2 > 42) && (distancia2 <= 44)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(48));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(48));
Serial.write(byte(0));
}
else if ((distancia2 > 44) && (distancia2 <= 46)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(47));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(47));
Serial.write(byte(0));
}
else if ((distancia2 > 46) && (distancia2 <= 48)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(46));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(46));
Serial.write(byte(0));
}
else if ((distancia2 > 48) && (distancia2 < 50)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(45));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(45));
Serial.write(byte(0));
}
//delay(200); //espera 200 milissegundos para fazer a leitura novamente
}
"
1.4
EMITINDO AS NOTAS MIDI COM DOIS SENSORES ULTRASSOM: CÓDIGO
RESUMIDO
Uma outra lógica mais curta do que utilizar várias funções
"if" e "else if" pode ser feita se atrelarmos a variação de
distância com a formação da nota. Abaixo segue um código mais curto seguindo a
ideia. Cada sensor está relacionado com um canal de emissão de notas MIDI: um
sensor com o canal 1 e o outro com o canal 2.
1.4.1 Código Arduíno mais
curto que funcionou com dois sensores ultrassom (entre aspas - retirar as aspas
se for utilizar)
"
#define echoPin2 9 //Pino 9 recebe o pulso do echo
#define trigPin2 8 //Pino 8 envia o pulso para gerar o echo
#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo
const byte noteOffCommand = 0;
const byte noteOnCommand = 1;
byte channel = 0; // Channel 1 (0-15 selects channel 1-16)
byte channel2 = 1; // Channel 2 (0-15 selects channel 1-16)
//byte pitchByte = 69; // A4 = Middle A = 440 Hz (Piano keyboard
runs from 21/A0 to 108/C8)
//byte velocityByte = 127; // Medium Velocity/Volume (value from 0
to 127)
void setup()
{
Serial.begin(115200); //inicia a porta serial 115200
para o HairLess
pinMode(echoPin, INPUT); // define o pino 13 como entrada
(recebe)
pinMode(trigPin, OUTPUT); // define o pino 12 como saida
(envia)
pinMode(echoPin2, INPUT); // define o pino 9 como entrada
(recebe)
pinMode(trigPin2, OUTPUT); // define o pino 8 como saida
(envia)
}
void loop()
{
// -- ULTRASSOM SENSOR 1 -- Medição --
//seta o pino 12 com um pulso baixo "LOW" ou desligado
ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou
ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
//pulseInt lê o tempo entre a chamada e o pino entrar em high
long duration = pulseIn(echoPin,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem
dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia = duration /29 / 2 ;
// -- ULTRASSOM SENSOR 2 -- Medição --
//seta o pino 8 com um pulso baixo "LOW" ou desligado
ou ainda 0
digitalWrite(trigPin2, LOW);
//delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 8 com pulso alto "HIGH" ou ligado ou
ainda 1
digitalWrite(trigPin2, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 8 com pulso baixo novamente
digitalWrite(trigPin2, LOW);
//pulseIn lê o tempo entre a chamada e o pino entrar em high
long duration2 = pulseIn(echoPin2,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem
dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia2 = duration2 /29 / 2 ;
// -- NOTAS MIDI -- ULTRASSOM SENSOR 1 --
if (distancia >= 50){
delay(300); // Tempo de espera 300 milissegundos
}
else {
int nota = distancia + 68;
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota)); //
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota));
Serial.write(byte(0));
}
// -- NOTAS MIDI -- ULTRASSOM SENSOR 2 --
if (distancia2 >= 50){
delay(300); // Tempo de espera 300 milissegundos
}
else {
int nota2 = 68 - distancia2;
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel2)));
Serial.write(byte(nota2));
Serial.write(byte(127));
delay(300); // Note duration
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel2)));
Serial.write(byte(nota2));
Serial.write(byte(0));
}
}
//delay(200); //espera 200 milissegundos para fazer a leitura novamente
"
2
TROMBONE ELETRÔNICO
O código utilizado para construir o trombone eletrônico utilizou o mesmo
sistema de medição com o sensor ultrassom e emissão das notas MIDI. Porém, foi
acrescentado um botão para acionamento do equipamento. Assim, o equipamento só
emite notas se o botão estiver pressionado.
“
// Definindo os pinos Echo (recepção do ultrassom) e Trigger (gatilho,
disparo do ultrassom)
#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo
#define botaoacionador 2 //Pino 2 envia o sinal do botão acionador do
trombone
// Liga e desliga as notas midi
const byte noteOffCommand = 0;
const byte noteOnCommand = 1;
// Tempo de duração das notas (em milissegundos)
int tempodasnotas = 90;
// Tempo de intervalo entre as notas (em milissegundos)
int tempoentrenotas = 30;
// Tempo de espera se a distância for maior que 50cm (em milissegundos)
int tempodeespera = 30;
// Interruptor de Acionamento do Trombone
int acionador = 0; // variável para ler o estado do botão acionador do
trombone
// Notas midi
int nota1 = 36; // Nota C (Dó)
int nota2 = 38; // Nota D (Ré)
int nota3 = 40; // Nota E (Mi)
int nota4 = 41; // Nota F (Fá)
int nota5 = 43; // Nota G (Sol)
int nota6 = 45; // Nota A (Lá)
int nota7 = 47; // Nota B (Si)
int nota8 = 48; // Nota C (Dó)
int nota9 = 50; // Nota D (Ré)
int nota10 = 52; // Nota E (Mi)
//fim das notas midi
//variável para armazenar a nota a executar
int notaaexecutar = 0;
//variável para armazenar a nota anteriormente tocada
int notaanterior = 1;
//variável para armazenar a distancia anteriormente medida
int distanciaanterior = 0;
//variável para armazenar o estado do botão (0 para desligado e 1 para
ligado)
int botao = 0;
// variável que informa se o botão foi acionado agora (1) ou não (0)
int botaoacionadoagora = 2;
// variável distancia limite de 50cm atingida (1) ou não atingida (0)
int distancialimite = 2;
// variável informa que a distancia permanece além do limite de 50cm (1)
ou não (0)
int zonafora = 2;
// variável informa que a distancia saiu da zona fora do limite de 50cm
agora (1) ou não (0)
int saiudazonaforaagora = 2;
byte channel = 0; // Channel
1 (0-15 selects channel 1-16)
//byte pitchByte = 69; // A4 =
Middle A = 440 Hz (Piano keyboard runs from 21/A0 to 108/C8)
//byte velocityByte = 127; //
Medium Velocity/Volume (value from 0 to 127)
// Configuração do Setup
void setup()
{
Serial.begin(115200); //inicia
a porta serial (115200 para o HairLess, pode ser modificada no Hairless)
pinMode(echoPin, INPUT); //
define o pino 13 como entrada (recebe)
pinMode(trigPin, OUTPUT); //
define o pino 12 como saida (envia)
pinMode(botaoacionador, INPUT);
// define o botão acionador como entrada (recebe)
}
// Inicia o loop de verificações de distâncias e emissão de notas
midi
void loop()
{
// Configurando o botão de acionamento
acionador = digitalRead(botaoacionador); // Lê o valor de entrada do
botão (HIGH ou LOW)
if (acionador == HIGH) { // verifica se a entrada é HIGH (interruptor
livre)
// Se o botão estava pressionado, ele vai desarmar a nota tocada
anteriormente
if (botao == 1) {
// estado da variável
botão passa para desligado
botao = 0;
// reseta a variável
distanciaanterior
distanciaanterior = 0;
if (notaaexecutar != 0 && zonafora == 0){
// desliga a nota MIDI
"notaaexecutar" executada anteriormente quando o botão estava
apertado
Serial.write(0x80 +
(noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(notaaexecutar));
Serial.write(byte(0));
}
}
if (botao == 0) {
delay(1); // espera 1
milissegundo
}
} else {
if (botao == 0){
// variável botao grava que o botao está pressionado
botao = 1;
// variável que informa se o botão foi acionado agora (1)
botaoacionadoagora = 1;
}
// Realizando a medida com o ultrassom
//seta o pino 12 com um pulso
baixo "LOW" ou desligado ou ainda 0
digitalWrite(trigPin,
LOW);
// delay de 2
microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto
"HIGH" ou ligado ou ainda 1
digitalWrite(trigPin,
HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo
novamente
digitalWrite(trigPin,
LOW);
//pulseInt lê o tempo entre a
chamada e o pino entrar em high
long duration =
pulseIn(echoPin,HIGH);
//Esse calculo é baseado em s =
v . t, lembrando que o tempo vem dobrado
//porque é o tempo de ida e
volta do ultrassom
long distancia = duration /29
/ 2 ;
// se a distância medida pelo ultrassom permanecer constante, a nota
MIDI continua a ser executada
if (distanciaanterior == distancia){
// Tempo de espera para checar a
distância até o ultrassom novamente
delay(tempodeespera);
}
// se a distância medida pelo ultrassom variar, a nota MIDI a ser
executada muda
else {
// Se a distancia medida for menor que 50cm
if (distancia < 50){
// Se a distancia anterior estava fora do limite de 50cm
if (zonafora == 1){
// variável informa que
a distancia não está fora do limite de 50cm
zonafora = 0;
// variável
distancialimite indica que a distancia de 50cm não foi atingida (0)
distancialimite = 0;
// variável informa que
a distancia saiu da zona fora do limite de 50cm (1)
saiudazonaforaagora =
1;
}
if (zonafora == 2);{
// variável informa que
a distancia não está fora do limite de 50cm
zonafora = 0;
}
}
// Se a distancia medida for maior que 50cm
if (distancia > 50){ // distância máxima de captação limitada em 50cm
// variável distancia limite
de 50cm atingida
distancialimite = 1;
}
// Se a distancia limite de 50cm for atingida (1)
if (distancialimite == 1){
if (zonafora == 0 || zonafora
==2){
// variável informa que
a distancia está fora do limite de 50cm (1)
zonafora = 1;
if (notaanterior != 1){
// desliga a nota MIDI
"notaanterior" executada anteriormente quando o botão estava apertado
Serial.write(0x80 +
(noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(notaanterior));
Serial.write(byte(0));
}
}
}
// a variável notaaexecutar recebe um novo valor conforme a distancia
medida pelo ultrassom
if (distancia <= 5){
notaaexecutar = nota1; // a variável notaaexecutar recebe o valor da
variável nota1
}
else if ((distancia > 5) && (distancia <= 10)){
notaaexecutar = nota2; // a variável notaaexecutar recebe o valor da
variável nota2
}
else if ((distancia > 10) && (distancia <= 15)){
notaaexecutar = nota3; // a variável notaaexecutar recebe o valor da
variável nota3
}
else if ((distancia > 15) && (distancia <= 20)){
notaaexecutar = nota4; // a variável notaaexecutar recebe o valor da
variável nota4
}
else if ((distancia > 20) && (distancia <= 25)){
notaaexecutar = nota5; // a variável notaaexecutar recebe o valor da
variável nota5
}
else if ((distancia > 25) && (distancia < 30)){
notaaexecutar = nota6; // a variável notaaexecutar recebe o valor da
variável nota6
}
else if ((distancia > 30) && (distancia <= 35)){
notaaexecutar = nota7; // a variável notaaexecutar recebe o valor da
variável nota7
}
else if ((distancia > 35) && (distancia <= 40)){
notaaexecutar = nota8; // a variável notaaexecutar recebe o valor da
variável nota8
}
else if ((distancia > 40) && (distancia <= 45)){
notaaexecutar = nota9; // a variável notaaexecutar recebe o valor da
variável nota9
}
else if ((distancia > 45) && (distancia <= 50)){
notaaexecutar = nota10; // a variável notaaexecutar recebe o valor da
variável nota10
}
// Se o botão foi acionado agora
if (botaoacionadoagora == 1
&& zonafora != 1) {
// Toca a nota MIDI correspondente à distância
medida pelo ultrassom
Serial.write(0x80 +
(noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(notaaexecutar));
Serial.write(byte(127));
// Tempo de espera para checar
a distância até o ultrassom novamente
delay(tempoentrenotas);
// a variável distancia
anterior receber o valor da distancia medida após a execução da nota MIDI
distanciaanterior = distancia;
// a variável notaanterior
receber o valor da nota MIDI executada
notaanterior = notaaexecutar;
// variável
botaoacionadoagora informa que o botão já foi acionado (0)
botaoacionadoagora = 0;
}
// Se a distancia medida saiu da zona fora do limite de 50cm agora (1)
else if (saiudazonaforaagora == 1) {
// Toca a nota MIDI correspondente à distância
medida pelo ultrassom
Serial.write(0x80 +
(noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(notaaexecutar));
Serial.write(byte(127));
// Tempo de espera para checar
a distância até o ultrassom novamente
delay(tempoentrenotas);
// a variável distancia
anterior receber o valor da distancia medida após a execução da nota MIDI
distanciaanterior = distancia;
// a variável notaanterior
receber o valor da nota MIDI executada
notaanterior = notaaexecutar;
// variável
botaoacionadoagora informa que o botão já foi acionado (0)
saiudazonaforaagora =
0;
}
// Se a nota a ser executada for igual à nota midi anterior
else if (notaaexecutar == notaanterior || notaaexecutar == 0) {
// Tempo de espera para checar
a distância até o ultrassom novamente
delay(tempodeespera);
}
// Se a nota a ser executada for diferente da nota MIDI anteriormente
executada
else {
// Se a variável notaanterior for diferente de 1, desliga a nota
anteriormente tocada
if (notaanterior != 1){
// desliga a nota MIDI
"notaanterior" executada anteriormente quando o botão estava apertado
Serial.write(0x80 +
(noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(notaanterior));
Serial.write(byte(0));
}
// Toca a nota MIDI
correspondente à distância medida pelo ultrassom
Serial.write(0x80 +
(noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(notaaexecutar));
Serial.write(byte(127));
// Tempo de espera para checar
a distância até o ultrassom novamente
delay(tempoentrenotas);
// a variável distancia
anterior receber o valor da distancia medida após a execução da nota MIDI
distanciaanterior = distancia;
// a variável notaanterior
receber o valor da nota MIDI executada
notaanterior = notaaexecutar;
}
}
}
//final do programa
}”
A Fig. 1 mostra o esquema de conexões. O esquema foi feito utilizando-se
o programa Fritzing.
Figura 1: Esquema de conexão feito no Fritzing. |
A Fig. 2 mostra a montagem do circuito do trombone eletrônico.
Figura 2: Montagem do circuito do trombone eletrônico utilizando um protoboard. |
A Fig. 3 mostra o diagrama de funcionamento do trombone eletrônico.
Figura 3: Diagrama de funcionamento do trombone eletrônico. |
A Fig. 4 e a Fig. 5 mostram o trombone eletrônico montado, com vara móvel,
botão de acionamento e circuitos eletrônicos.
Figura 4: Trombone eletrônico montado (vara esticada). |
Figura 5: Trombone eletrônico montado (vara recolhida). |
A Fig. 6 e a Fig. 7 mostram como o sensor ultrassom e o circuito eletrônico
foram fixados no trombone eletrônico.
Figura 6: Fixação do sensor ultrassom e do circuito eletrônico (vista completa). |
Figura 7: Fixação do sensor ultrassom e do circuito eletrônico (vista aproximada). |
Assinar:
Postagens (Atom)