terça-feira, 22 de dezembro de 2015

Lego-style apartment transforms into infinite spaces



Lucas T R Freitas

Tiny Origami apartment in Manhattan unfolds into 4 rooms



Lucas T R Freitas

Make a Laser Ball



Lucas T R Freitas

6 rooms into 1: morphing apartment packs 1100 sq ft into 420



Lucas T R Freitas

CHARLIE STEVENS HIDDEN BED SECRET PASSAGEWAY



Lucas T R Freitas

Star Trek Door (Extended Version)



Lucas T R Freitas

Disappearing Staircase



Lucas T R Freitas

Introducing Invisidoor



Lucas T R Freitas

Hidden bookcase doors to secret lair



Lucas T R Freitas

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:"
      • "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

Cortador de Parede BRIC 35 Cortag



Lucas T R Freitas

Serra Fita Portátil S1010 Starret - Loja do Mecânico



Lucas T R Freitas

Gilat Ka Band CPE Installation



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)
Lucas T R Freitas

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

sexta-feira, 20 de novembro de 2015

Diagrama de Funcionamento da Sanfona Ultrassônica - PIE2

Diagrama de Funcionamento da Sanfona Ultrassônica - PIE2

Diagrama de funcionamento da sanfona ultrassônica do PIE 2 (UCL 2015).


Lucas T R Freitas

Calvin Harris feat. Example - We'll Be Coming Back (Lyrics)



Lucas T R Freitas

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):
Analisando tudo, foram necessários os seguintes programas para o som sair:

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).