$\rightarrow$ Laboratório


Disciplina de Projetos de Ciências

Deixe sua dúvida clicando no botão abaixo. Pode colar códigos do seu programa caso queira que seu professor encontre um possível erro.


       

AULA 23: Piezo Parte I

10 de Agosto de 2022

Seguindo nosso planejamento, vamos separar este estudo em três partes:

  • montagem do circuito apenas com o buzer, apresentação de três novas funções e conversão de graus para radianos;
  • criaremos funções com o objetivo de emitir notas musicais;
  • criaremos uma melodia e um mini piano.

Baixe a nota de aula no botão abaixo:

AULA 22: Entrega de relatório e usando o LDR

03 de Agosto de 2022

Entrega do relatório

Para começar, baixe aqui o modelo para seu relatório.

Lembre-se que neste semestre a avaliação será baseada no relatório a respeito da atividade desenvolvida no semestre passado. Será necessário enviar um relatório por grupo, em qualquer um dos formatos a seguir: pdf, doc, docx, odf, djvu ou epub. Para outros formatos, pergunte ao professor.

O envio deverá ser feito por e-mail (pode enviar para a coordenação ou, preferencialmente, ao professor, no e-mail daniloa@professordanilo.com. Sugiro que a pessoa responsável pelo envio envie o e-mail com cópia para os demais membros do grupo. O professor responderá ao e-mail com as correções e apontamentos.

Caso prefira entregar o relatório impresso, seu grupo poderá entregar diretamente ao professor ou deixar com alguém da inspetoria ou coordenação e pedir para deixa no armário do professor.

Atenção ao prazo de entrega: 31/08/2022. Atenção ao fim do bimestre e ao feriado do dia 07/09/2022, que será em uma quarte feira, dia da aula desta disciplina. Procure fazer o relatório o quanto antes, para não cumular tarefas, podendo entregar o relatório antes da data acima.

Nosso novo projeto

Para este semestre, vamos desenvolver um tipo de instrumento musical, bastante simples e de baixa qualidade sonora. Vamos chamar de mini harpa de luz, mesmo que o resultado final não ser assemelhe à uma harpa de fato.

Vamos ter uma ideia de como ela irá funcionar:

  • usaremos alguns módulos laser que irá iluminar um LDR (a luz do laser funcionará como uma corda);
  • o LDR será iluminado pelo laser que, quando interrompido pelo dedo de uma pessoa, terá sua resistência modificada;
  • a mudança da resistência do LDR será percebida pelo Arduino que enviará um sinal para um piezzo que, por sua vez, emitirá uma nota musical.

Vamos separar as aulas em partes, procurando entender o que é e como funciona cada um dos módulos acima citados.

O que é o LDR

O LDR (Light Dependent Resistor) é um componente eletrônico cuja resistência elétrica varia com a luminosidade. Você pode consultar o verbete correspondente à LDR, em inglês, na Wikipedia.

Para montagem do circuito você vai usar, como sempre, resistores. As resistências, em eletrônica, possuem códigos de cores conforme a figura abaixo. Para resistores com mais faixas, dê uma olhada neste site, que mostra como se dá os códigos de cores.

Baixe a nota de aula no botão abaixo:

AULA 21: Formatação de arquivos no word

22 de Junho de 2022

Baixe o arquivo word que iremos formatar em aula.



O video a seguir é um complemento ao anterior e é útil para quem irá trabalhar com bibliografias.



AULA 20: calculando a gravidade - Parte VI

15 de Junho de 2022

Prorrogamos nossa última aula para coletarmos mais dados em nosso experimento. Estes dados serão importantes para a montagem de nosso relatório.

Consulte a aula anterior para mais informações. Se estiver sem o material impresso, baixe a aula 19. O vídeo no QR-code deste material está na aula passada.


AULA 19: calculando a gravidade - Parte V

07 de Junho de 2022

Chegamos finalmente na nossa última aula do projeto de cálculo da gravidade. Apesar de termos obtidos valores bem razoáveis, vimos que a forma que foram feitas as medidas, como deixar a esfera a alguns centímetros de altura.

Você deverá, na aula de hoje:

  • medir e anotar a altura da qual será solta a esfera;
  • observar o tempo medido pelo Arduíno e anotar na tabela fornecida pelo professor;
  • passar os dados para o Excel;
  • no Excel, seguindo o vídeo abaixo, converta a distância para metros e o tempo para seguindo. Posteriormente calcule o quadrado do tempo;
  • por fim, copie os dados e cole no Desmos.



E aí, os resultados ficaram melhores?

AULA 18: calculando a gravidade - Parte IV

01 de Junho de 2022

Abaixo, na tabela, você encontra os dados do seu grupo.

Siga as instruções do material entregue pelo professor na aula.

Quando seus cálculos estiverem prontos, veja o vídeo abaixo para entender como usar o Desmos.



Abaixo segue os resultados dos três grupos.

Grupo da Elisa

Lançamento

Altura (cm)

Tempo de queda (ms)

1

2,3

74

2

4

101

3

6,5

125

4

10

149

5

12

168

6

13,5

189

7

6

125

8

6

118

9

7,5

137

10

9

140

 



Grupo do João

Lançamento

Altura (cm)

Tempo de queda (ms)

1

10

152

2

12,5

180

3

15

184

4

16,5

194

5

18,5

218

6

20

212

7

21

216

8

23,5

234

9

25

234

10

30

253

 



Grupo da Luana

Lançamento

Altura (cm)

Tempo de queda (ms)

1

5

89

2

6

104

3

7

118

4

8

123

5

9

135

6

10

140

7

11

146

8

12

154

9

13

160

10

15

178

 



AULA 17: calculando a gravidade - Parte III

25 de Maio de 2022

Para ajudar você, o professor fez um programa para calcular o tempo de queda livre. Note a importância de ter que esperar o transistor esfriar e o programa a seguir leva isso em conta.

/*declarando as variaveis*/
int tempo_i = 0;
int tempo_f = 0;
int eletroima = 2;
int botao_eletroima = 3;
int botao_queda = 4;
int liga = 1, desliga = 0;

void setup() {
     // put your setup code here, to run once:
pinMode(eletroima, OUTPUT);
pinMode(botao_eletroima, INPUT_PULLUP);
pinMode(botao_queda, INPUT_PULLUP);
Serial.begin(9600);
}

void loop() {
     Serial.println("Programa sendo inicializado");
     digitalWrite(eletroima, desliga); 
     Serial.println("Pressione o botão ligado à porta digital 3 para seguir com cada passo");
     while(digitalRead(botao_eletroima)==1){}//espera até que o botão seja pressionado
     delay(1000);
     Serial.println("...\nPosicione o botão ligado à porta digital 4 abaixo do eletroímã.");
     while(digitalRead(botao_eletroima)==1){}//espera até que o botão seja pressionado novamente
     delay(1000);
     Serial.println("...\nLigue a fonte na tomada\n...");
     while(digitalRead(botao_eletroima)==1){}//espera até que o botão seja pressionado
     delay(1000);
     Serial.println("\nPressione o botão para ligar o eletroímã."); 
     delay(1000);   
     while(digitalRead(botao_eletroima)==1){}//espera até que o botão seja pressionado  
     digitalWrite(eletroima, liga);
     Serial.println("\nPressione o botão para iniciar quanto estiver pronto.");   
     delay(1000);
     while(digitalRead(botao_eletroima)==1){}//espera até que o botão seja pressionado 
     digitalWrite(eletroima, desliga); 
     tempo_i = millis(); 
     while(digitalRead(botao_queda)==1){}   
     tempo_f = millis();
     Serial.println("Sucesso!!!");
     Serial.println(" ______________________________________________");
     Serial.print("|   O tempo de queda foi de ");
     Serial.print(tempo_f - tempo_i);
     Serial.println(" milisegundos.");
     Serial.println(" ______________________________________________");
     Serial.println("\nEletroima desligado. Aguarde 10 s para resfriar o transistor."); 
         for(int i=10; i>0; i--){
           Serial.println(i);
           delay(1000); 
         }
     Serial.println("\nPressione para reiniciar o programa.\n\n\n");
     while(digitalRead(botao_eletroima)==1){}
}
        

AULA 16: calculando a gravidade - Parte II

18 de Maio de 2022

Na aula de hoje, se tudo der certo, você já conseguirá obter alguns valores para o tempo de queda da esfera. Tudo correndo bem, na próxima aula iremos coletar os dados para fazermos uma análise dos dados.

AULA 15: calculando a gravidade - Parte I

11 de Maio de 2022

Finalmente vamos começar a montar o experimento para medirmos o tempo de queda de uma esfera.

Ilustração do experimento que vamos montar

Acima, ilustração do experimento que vamos montar


A partir de agora, vocês deverão trabalhar em grupo e de maneira mais independente, sem tutoriais, exceto os vídeos abaixo: o primeiro apresenta como usar o módulo relé modificado para controlar o eletroímã; e o segundo mostra como usar um botão sem usar o resistor pull up ou o resistor pull down.


Para ligar o botão no Arduino, você poderia utilizar duas possíveis montagens usando resistores. No circuito abaixo vemos que a porta digital 2 está conectada ao GND (0 V) através do resistor e como a corrente elétrica é muito pequena no resistor (se houver), praticamente 0 V chega à porta digital 2. O Arduino irá ler sempre o valor falso (0), desde que não pressionamos o botão. Quando pressionamos o botão, conectamos o 5 V à esta porta e então o valor lido será verdadeiro (1). Damos o nome deste resistor de resistor pull down (pois levamos a tensão na porta de entrada para baixo - 0 V).


No circuito abaixo vemos uma segunda forma de conectar o botão: a porta digital 2 está conectada ao 5 V através do resistor e como a corrente elétrica é muito pequena no resistor, praticamente 5 V chega à porta digital 2. O Arduino irá ler sempre o valor verdadeiro (1). Quando pressionamos o botão, conectamos o GND à esta porta e então o valor lido será falso (0). Damos o nome deste resistor de resistor pull up (pois levamos a tensão na porta de entrada para cima - 5 V).


O resistor usado não precisa ter um valor preciso, mas precisa ser grande, na faixa de milhares de ohms. No circuito das duas imagens acima foram usados resistores de \(100\;\rm k \Omega \).


O Arduino possui um resistor que pode ser usado como resistor pull up, ou seja, é possível manter uma porta de entrada como se estivesse recebendo 5 V. Para isso, você deve substituir INPUT por INPUT_PULLUP quando usar a função pinMode. Como exemplo, abaixo temos um código simples para ler um botão ligado na porta digital 2 do Arduino UNO.

    int status_botao = 5;
    
    void setup() {
         pinMode(4, INPUT_PULLUP);
         Serial.begin(9600);
    }
    
    void loop() {
         status_botao = digitalRead(4);
         Serial.println(status_botao);
    }
    
    

Veja o vídeo abaixo para entender como montar o circuito sem usar estes resistores.


Qualquer dúvida, fale com o professor através de um dos canais que ele disponibilizou: Discord, formulário, e-mail ou WhatsApp. Outros meios, como facebook, é provável que o professor demore muito para responder.

AULA 14: Programação em C - Parte III

04 de Maio de 2022

Chegamos no assunto "laços". Aqui, veremos três laços: for, while e do while.

Como usar:

  • for(inicialização; condição; atualização da variável){}. Enquanto a "condição" for verdadeira, o que estiver entre { } será executado. Exemplo que imprime números de 1 até 10:

for(int i=1; i<=10; i=i+1){
     printf("Numero atual: %d\n", i);
     }

  • while(condição){}. Enquanto a "condição" for verdadeira, o que estiver entre { } será executado. Note que a condição é analisada antes de que os comandos dentro de { } seja executado. Exemplo que pede uma variável ao usuário até que essa variável seja zero:

int variavel = 1;
while(variavel!= 0){
     printf("Digite um numero: ");
     scanf("%d", &variavel);
} 
 printf("Programa encerrado.");

do{}while(condição). Enquanto a "condição" for verdadeira, o que estiver entre { } será executado. Note que a condição é analisada após os comandos dentro de { } serem executados, portanto, o do while executa o que está entre { } pelo menos uma vez. Exemplo que pede uma variável ao usuário até que essa variável seja zero (note que a variável inicia com valor zero):

int variavel = 0;
do{
     printf("Digite um novo numero: ");
     scanf("%d", &variavel);
}while(variavel!= 0);
 printf("Programa encerrado.");

Faremos isso através de exemplos:

  1. Faça um programa, usando o loop for, que imprima na tela números de um até 10.
  2. Faça um programa que lê um número, digitado pelo usuário, enquanto este número for diferente de 0. Quando o número for zero, o programa é encerrado. Faça isso usando os comandos for, while e do while.
  3. Crie um programa que recebe um número inteiro positivo e devolve a tabuada deste número. Por exemplo, recebe 7 e devolve 7 ×1, 7 ×2, 7 ×3, ..., 7 ×8, 7 ×9 e 7 ×10.
  4. Faça um programa que receba um número inteiro positivo e retorna a soma de todos os inteiros positivos menores ou iguais ao número recebido. Por exemplo, se receber dez, deverá retornar 55, pois 55 = 1 + 2 + 3 + ... + 9 + 10.
  5. Faça um programa que receba um número positivo, maior ou igual a zero, e retorna o fatorial deste número (\(n!\)). Se o número for zero, o fatorial é zero. Se o número recebido for \(n\gt 0\), então \(n!=n\times (n-1) \times \cdots\times 3\times 2\times 1\). Por exemplo, se o número enviado for \(0\), então o programa retorna \(1\); se receber \(3\), retorna \(6\), pois \(3\times2\times1\times=6\); se receber \(9\), deve retornar \(362.880\) e assim por diante.

Resolução exercícios propostos: veja o vídeo abaixo.



Veja resoluções no código abaixo.


#include <stdio.h>

int main(){
       int opcao = 0;
       do{
           printf("\n\n3. Fatorial.\n");
           printf("2. Soma.\n");
           printf("1. Tabuada.\n");
           printf("0. Sair do programa.\n");
           scanf("%d", &opcao);
           if(opcao==1){
               tabuada();
           }
           if(opcao==2){
               somatorio();
           }
           if(opcao==3){
               fatorial();
           }
           
       }while(opcao);
       printf("\n\nPrograma encerrado pelo usuário.");    
}

int fatorial(){
       int n=0, produto=1;
       printf("Digite um número inteiro e positivo.\n");
       scanf("%d", &n);
       if(n==0){
           printf("O fatorial de zero é 1.");
       }
       for(int i = 1; i <= n; i=i+1){
           produto = produto * i;        
       }
       if(n>0){
           printf("O fatorial de %d é %d.", n, produto);
       }
}


int somatorio(){
       int nmr=0, soma=0;
       printf("Digite um número inteiro e positivo.\n");
       scanf("%d", &nmr);
       for(int i = 1; i <= nmr; i=i+1){
           soma = soma + i;        
       }
       printf("O valor da soma é: %d", soma);
}





int tabuada() {
       int numero=0;
       printf("Digite um número de 1 a 10.\n");
       scanf("%d", &numero);
       for(int i = 1; i<=10; i=i+1){
           printf("\n%d x %d = %d", numero, i, numero*i);
       }
       return 0;
}
    

Agora você pode rever a playlist do canal eXcript.

Acesse um compilador online para a linguagem C (programiz) caso o compilador adicionado abaixo não funcione.




AULA 13: Programação em C - Parte II

27 de Abril de 2022

Vamos continuar com os estudos da aula passada: faltou falar do comando if.

Na aula de hoje, no lugar de continuar com a teoria, você poderá resolver os problemas da aula passada em aula:

  1. Utilize a diretiva if para fazer um programa que recebe um número (como se fosse lido por um sensor de temperatura) informando a temperatura e retorna "Frio" se a temperatura (valor informado) for menor que 21, retorna "Agradável" se o valor informado \(T\) estiver no intervalo \(21\leq T\leq 25\) e retorna "Quente" se a temperatura for maior que 25.
  2. Faça um programa que receba três valores que representam as notas de três provas. O programa deve retornar a média, a frase "Aprovado(a)!!!" se a nota for maior ou igual a 6, a frase "De recuperação, mas pode atingir a média após a rec." se a nota do aluno for maior ou igual a 5 e menor que 6 e a frase "Reprovado(a)" se a nota for inferior a 5. Considere que as três provas tenham pesos iguais.
  3. Faça um programa que recebe dois lados de um retângulo e retorna a área dele. Lembre-se que se \(A\) é a área de um retângulo, \(l\) é um dos lados e \(h\) o outro lado (ou, se preferir, chame de altura), então podemos calcular a área pela fórmula \(A=l\times h\).
  4. Faça um programa que receba as dimensões de uma piscina em formato de prisma e retorna o volume de água dentro dela. Para facilitar, considere que todos os dados estão em metros. Lembre-se que o volume é \(V=a\times b\times h\).
  5. Sabendo que o IMC (Índice de Massa Corpórea) é calculado pela fórmula \[IMC=\rm{\frac{Peso\;(em\;quilograma)}{Altura^2\;(em\;metros)}},\]faça um programa que receba a massa e a altura de uma pessoa e diga qual a classificação que a pessoa se encontra, de acordo com a tabela abaixo.

    Fonte: https://guiatech.net/
  6. De acordo com o código brasileiro de trânsito,

    \(\bullet \) Dirigir em velocidade até 20% acima do limite da via é classificado como infração média, com multa de \(R$\;130,16\) e cinco pontos na CNH;
    \(\bullet \) Dirigir em velocidade entre 20% e 50% acima do limite da via é classificado como infração grave, com multa de \(R$\;195,23\) e quatro pontos na CNH;
    \(\bullet \) Dirigir em velocidade 50% acima do limite da via é classificado como infração gravíssima. Em casos assim, a multa é multiplicada por três e resulta no valor de \(R$\;880,41\), com suspensão da CNH.
    Fonte: https://www.mobiauto.com.br/

    Tendo isso em mente, faça um programa que receba o valor limite de trânsito em uma rodovia e a velocidade de um veículo (supostamente obtida por um equipamento chamado de radar) e nos retorna se houve infração ou não; no caso de infração, retorna em quantos porcento a velocidade estava acima da permitida bem como o valor da multa e quantos pontos foi perdido.
  7. Este será um desafio: faça um programa que recebe a nota de duas provas, uma chamada mensal (PM) e outra chamada de bimestral (PB), com pesos de 40% e 60% respectivamente; uma terceira avaliação, chamada de simulado bônus (SB), também existe, mas poderá apenas aumentar a média em um ponto, mas isso se a média final do aluno não passar de dez; o seu programa deverá retornar "Aprovado" se a nota for maior ou igual a 6 ou "Reprovado" se a nota for menor que 6. Não se preocupe com arredondamentos, mas o seu programa deverá fazer uma verificação se a média do aluno não é maior que 10, pois se assim for, a média será, na verdade, 10. Faça o teste com os seguintes valores: PM = 2, PB = 7, SB = 8 (media = 5,8); PM = 6, PB = 3, SB = 5 (media = 4,7); PM = 6, PB = 5, SB = 9 (media = 6,4); PM = 9,6, PB = 9,8, SB = 10 (media = 5,8).

Resolução dos cinco primeiros exercícios propostos: veja o vídeo abaixo.




Confira resoluções abaixo.

/*multa versão 1.0*/
#include <stdio.h>

int main() {
       int velocidade = 0, limite = 0;
       printf("Dite o valor da velocidade limite: ");
       scanf("%d", &limite);
       printf("Dite o valor da velocidade do veículo: ");
       scanf("%d", &velocidade);
       
       int porcentagem = 100*velocidade/limite-100;
       
       if(porcentagem <= 0){
           printf("Não houve multa.");
       }
       else{
           if(porcentagem <= 20){
               printf("Houve multa.\nInfração média.\nMulta: R$ 130,16\nCinco pontos na CNH.");
           }
           else{
               if(porcentagem <= 50){
                   printf("Houve multa.\nInfração grave.\nMulta: R$ 195,23\nQuatro pontos na CNH.");
               }
               else{
                   printf("Houve multa.\nInfração gravíssima.\nMulta: R$ 880,41\nSuspensão da CNH.");
               }
           }
       }
       
       /*printf("\n\n%d", porcentagem);*/
       return 0;
}

/*multa versão 2.0*/
#include <stdio.h>

int main() {
       int velocidade = 0, limite = 0;
       printf("Dite o valor da velocidade limite: ");
       scanf("%d", &limite);
       printf("Dite o valor da velocidade do veículo: ");
       scanf("%d", &velocidade);
       
       int porcentagem = 100*velocidade/limite-100;
       
       if(porcentagem <= 0){
           printf("Não houve multa.");
       }
       if(porcentagem > 0 && porcentagem <= 20){
               printf("Houve multa.\nInfração média.\nMulta: R$ 130,16\nCinco pontos na CNH.");
       }
       if(porcentagem > 20 && porcentagem <= 50){
                   printf("Houve multa.\nInfração grave.\nMulta: R$ 195,23\nQuatro pontos na CNH.");
               }
       if(porcentagem > 50){
                   printf("Houve multa.\nInfração gravíssima.\nMulta: R$ 880,41\nSuspensão da CNH.");
               }
          
       /*printf("\n\n%d", porcentagem);*/
       return 0;
}

/*Nota*/
#include <stdio.h>

int main() {
       float PM = 0, PB = 0, SB = 0;
       printf("Digite a nota da prova mensal: ");
       scanf("%f", &PM);
       printf("Digite a nota da prova bimestral: ");
       scanf("%f", &PB);
       printf("Digite a nota do simulado bônus: ");
       scanf("%f", &SB);
       
       float media = 0.4*PM+0.6*PB;
       
       media = media + SB/10;
       if(media>10){
           media=10;
       }
       if(media<6){
           printf("A nota do(a) aluno(a) é %f.\nO(A) aluno(a) está reprovado(a)!", media);
       }
       else{
           printf("A nota do(a) aluno(a) é %f.\nO(A) aluno(a) está aprovado(a)!", media);
       }
       return 0;
}

Para a próxima aula, você deverá estudar em casa assistindo mais alguns vídeos. Os vídeos irão abordar os seguintes assuntos:

  • modificadores de tipos;
  • laços (while e do while);
  • switch;
  • operador incremento (++).

O professor pede que você assista aos vídeos que ele sugerir, mas você pode correr atrás de outros vídeo. Nós teremos apenas três aulas para estudar esta linguagem, assim é claro que não será possível aprender tudo, mas quanto mais você conseguir absorver, melhor.

A playlist pode ser acessada neste link. Os vídeos que você precisa assistir para esta semana são todos da aula 22 até 33, menos o 25, 26 e o 30.

Você pode ver os vídeos por aqui se quiser, basta clicar no botão abaixo para expandir o conteúdo:













Para treinar a programação, você poderá utilizar o espaço abaixo (o compilador foi incorporado no site do professor), mas se ele não carregar, clique aqui para ir para o site onde está hospedado o compilador. Você poderá utilizar outro de sua preferencia, caso queira.


Como atividade para casa, deixarei alguns exercícios. Você pode enviar os seus programas para o professor, caso queira ajuda dele, de forma anônima e ele te responderá (tanto formulário quanto link para respostas estão no topo desta página). Segue abaixo os exercícios:

  1. Faça um programa que recebe um número e calcula o fatorial deste número. Lembre-se que fatorial de un número \(n\) é definido por \(n=n\cdot (n-1)\cdot (n-1) \cdots 1\). Por definição, fatorial de zero é 1.
  2. Faça um programa que exiba na tela, de forma formatada, a tabuada do um ao dez.
  3. Crie um programa com um tipo de menu que permite que o usuário decida se quer que seja exibida a tabuada, o cálculo do volume de um paralelepípedo ou calcula o fatorial de um número.

Na próxima aula, falaremos de laços e, finalmente, voltaremos a ter atividades avaliativas.



AULA 12: Programação em C - Parte I

20 de Abril de 2022

Hoje não teremos notas de aula: você poderá acompanhar alguma vídeo-aula que achar melhor, sendo que o professor irá indicar uma sequência de um determinado canal.

Na aula de hoje, vamos aprender e ver na prática sobre:

  • tipos de dados;
  • variáveis;
  • função de saída printf;
  • bibliotecas;
  • entrada de dados scanf;
  • condicional if.

O professor pede que você assista aos vídeos que ele sugerir, mas você pode correr atrás de outros vídeo. Nós teremos apenas três aulas para estudar esta linguagem, assim é claro que não será possível aprender tudo, mas quanto mais você conseguir absorver, melhor.

A playlist pode ser acessada neste link. Os vídeos que você precisa assistir para esta semana são:

  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

Ou seja, dos vinte primeiros vídeos, para esta semana, você NÃO precisa assistir os vídeos de número 1, 2, 5 e 11 pois eles se referem ao uso de um programa que não utilizaremos em sala. Porém, se você quiser, você pode baixar o programa code::block em seu computador e estudar por ele, sem necessidade do uso do compilador online (que é o que faremos).

Você pode ver os vídeos por aqui se quiser, basta clicar no botão abaixo para expandir o conteúdo:



















Para treinar a programação, você poderá utilizar o espaço abaixo (o compilador foi incorporado no site do professor), mas se ele não carregar, clique aqui para ir para o site onde está hospedado o compilador. Você poderá utilizar outro de sua preferencia, caso queira.


Para praticar, faça os seguintes programas em sala de aula, junto com o professor.

  1. Crie variáveis de diversos tipos (int, float, char, void e double).
  2. Discuta regras de nomes de variáveis.
  3. Utilizando a função printf, faça um programa que imprima "Hello World" na tela. Discuta o que são "escape sequence" (\n, \t, \\, \", \' e \0).
  4. Faça um programa que imprima o resto da divisão de diversos números.
  5. Discuta sobre o que são bibliotecas.
  6. Discuta um pouco sobre funções (lembre-se das funções loop e setup que usamos muito no Arduíno).
  7. Apresente a entrada de dados scanf e faça um programa que recebe dois dados e imprima na tela a soma, subtração, multiplicação, divisão e o resto da divisão do primeiro pelo segundo. Teste mudando os tipos de variáveis (int, float e double).
  8. Utilize a diretiva if para fazer um programa que recebe um número (como se fosse lido por um sensor de temperatura) informando a temperatura e retorna "Frio" se a temperatura (valor informado) for menor que 20, retorna "Agradável" se o valor informado \(T\) estiver no intervalo \(21\leq T\leq 25\) e retorna "Quente" se a temperatura for maior que 25.
  9. Faça um programa que receba três valores que representam as notas de três provas. O programa deve retornar a média, a frase "Aprovado(a)!!!" se a nota for maior ou igual a 6, a frase "De recuperação, mas pode atingir a média após a rec." se a nota do aluno for maior ou igual a 5 e menor que 6 e a frase "Reprovado(a)" se a nota for inferior a 5. Considere que as três provas tenham pesos iguais.

Como atividade para casa, deixarei alguns exercícios. Você pode enviar os seus programas para o professor, caso queira ajuda dele, de forma anônima e ele te responderá (tanto formulário quanto link para respostas estão no topo desta página). Segue abaixo os exercícios:

  1. Faça um programa que recebe dois lados de um retângulo e retorna a área dele. Lembre-se que se \(A\) é a área de um retângulo, \(l\) é um dos lados e \(h\) o outro lado (ou, se preferir, chame de altura), então podemos calcular a área pela fórmula \(A=l\times h\).
  2. Faça um programa que receba as dimensões de uma piscina em formato de prisma e retorna o volume de água dentro dela. Para facilitar, considere que todos os dados estão em metros. Lembre-se que o volume é \(V=a\times b\times h\).
  3. Sabendo que o IMC (Índice de Massa Corpórea) é calculado pela fórmula \[IMC=\rm{\frac{Peso\;(em\;quilograma)}{Altura^2\;(em\;metros)}},\]faça um programa que receba a massa e a altura de uma pessoa e diga qual a classificação que a pessoa se encontra, de acordo com a tabela abaixo.

    Fonte: https://guiatech.net/
  4. De acordo com o código brasileiro de trânsito,

    \(\bullet \) Dirigir em velocidade até 20% acima do limite da via é classificado como infração média, com multa de \(R$\;130,16\) e cinco pontos na CNH;
    \(\bullet \) Dirigir em velocidade entre 20% e 50% acima do limite da via é classificado como infração grave, com multa de \(R$\;195,23\) e quatro pontos na CNH;
    \(\bullet \) Dirigir em velocidade 50% acima do limite da via é classificado como infração gravíssima. Em casos assim, a multa é multiplicada por três e resulta no valor de \(R$\;880,41\), com suspensão da CNH.
    Fonte: https://www.mobiauto.com.br/

    Tendo isso em mente, faça um programa que receba o valor limite de trânsito em uma rodovia e a velocidade de um veículo (supostamente obtida por um equipamento chamado de radar) e nos retorna se houve infração ou não; no caso de infração, retorna em quantos porcento a velocidade estava acima da permitida bem como o valor da multa e quantos pontos foi perdido.
  5. Este será um desafio: faça um programa que recebe a nota de duas provas, uma chamada mensal (PM) e outra chamada de bimestral (PB), com pesos de 40% e 60% respectivamente; uma terceira avaliação, chamada de simulado bônus (SB), também existe, mas poderá apenas aumentar a média em um ponto, mas isso se a média final do aluno não passar de dez; o seu programa deverá retornar "Aprovado" se a nota for maior ou igual a 6 ou "Reprovado" se a nota for menor que 6. Não se preocupe com arredondamentos, mas o seu programa deverá fazer uma verificação se a média do aluno não é maior que 10, pois se assim for, a média será, na verdade, 10. Faça o teste com os seguintes valores: PM = 2, PB = 7, SB = 8 (media = 5,8); PM = 6, PB = 3, SB = 5 (media = 4,7); PM = 6, PB = 5, SB = 9 (media = 6,4); PM = 9,6, PB = 9,8, SB = 10 (media = 5,8).

Na próxima aula, falaremos de laços e, finalmente, voltaremos a ter atividades avaliativas.



AULA 11: Medindo a velocidade do som

13 de Abril de 2022

Baixe a nota de aula no arquivo a seguir.

Veja a sequência de três vídeos a seguir, onde eu apresento, na sequência, a montagem, o resultado experimental e um último experimento aumentando a distância para melhorar a precisão na medida da velocidade do som.







Esta aula havia sido planejada para ser executada em até duas ou três partes, mas foi finalizada em uma única aula, portanto não teremos continuação.



AULA 10: Controlando corrente elétrica pelo Arduíno

06 de Abril de 2022

NOTA: houve uma inversão na sequência da aula, portanto o material está com a data da semana anterior e como aula 09.

Para baixar o arquivo pdf desta aula, também disponível impresso e no SisQ, clique no botão abaixo.

ATENÇÃO: ESTE MATERIAL É DE USO EM SALA DE AULA COM UM PROFESSOR ORIENTANDO COMO PROCEDER. NÃO RECOMENDO O USO SE VOCÊ NÃO TIVER CONHECIMENTO NECESSÁRIO, UMA VEZ QUE VOCÊ PODE QUEIMAR NÃO SOMENTE O ARDUÍNO, MAS TAMBÉM O SEU COMPUTADOR.

Confira o resultado no vídeo exclusivo

A seguir, veja o resultado que você deve obter. Ele não está listado, portanto somente por aqui você conseguirá chegar nele.

AULA 9: Conhecendo o multímetro

30 de Março de 2022

Nesta aula não usamos materiais: apenas aprendemos como utilizar o multímetro nas funções amperímetro, ohmímetro e voltímetro.

Lembre-se que vamos medir correntes sempre acima de um ampère, portanto o fio vermelho fina na posição 10 A.

AULA 8: Controlando LED RGB por PWM - sem uso de resistores

23 de Março de 2022

Para baixar o arquivo pdf desta aula, também disponível impresso e no SisQ, clique no botão abaixo.

Como ficou o resultado final

Veja uma simulação a seguir. Note que o LED RGB usado em aula tem pinos diferentes dos pinos do LED no tinkercad.

Vídeo mostrando o funcionamento do LED que você deve obter.

AULA 7: Entrada digital e tempo de reação

16 de Março de 2022

Para baixar o arquivo pdf desta aula, também disponível impresso e no SisQ, clique no botão abaixo.

Laço while e função random

No arquivo acima você confere o uso da função random e do laço while.

AULA 6: Semáforo

09 de Março de 2022

Para baixar o arquivo pdf desta aula, também disponível impresso e no SisQ, clique no botão abaixo.

Variáveis e o laço for

Dois conceitos importantes que veremos aqui são: variáveis e laços.

Todas as informações que você transfere para o computador devem ficar guardadas em alguma parte do computador. Você pode atribuir um valor à uma variável simplesmente escrevendo "x = 2" em que entendemos que o valor 2 será atribuído à uma variável que chamamos de "x". É importante entender que existem diversos tipos de variáveis, dentre elas podemos dizer que temos variáveis numéricas (números simplesmente), strings (sequência de letras, números e simbos que, na verdade, não possui valor numérico) e booleanas (verdadeiro e falso, ou, no caso da linguagem C++ e C, true e false).

Os números se dividem em vários tipos, como inteiro, ponto flutuante ou de precisão dupla. Basicamente, estes tipos de variáveis aceitam determinados números, como números grandes, negativos ou com vírgula. Isso será abordado melhor na próxima aula.

A linguagem C++, assim como seu precursor C, são linguagens ditas fortemente tipadas, isto significa que devemos declarar a variável dizendo que tipo ela é. Vamos começar com a tipo inteiro sem nos importarmos com mais detalhes.

Para declarar uma variável, você pode proceder da seguinte maneira:

    int x = 0;    
    

O comando "for" serve para que uma determinada instrução seja repetida determinado conjunto de vezes. Por exemplo, para imprimir na tela "Olá Mundo!" dezessete vezes você pode usar o seguinte comando:

    for(int x = 1; x <= 17; x = x + 1){
         printf("Holá Mundo!");
    }    
    

Veja que a primeira coisa que devemos fazer é criar uma variável inteira chamada x e atribuir à ela um valor inicial (1); depois, este comando verifica se x é menor ou igual à 17 (x <=17) e se for verdadeiro ele executa o que vem a seguir: imprimir na tela a frase "Holá Mundo!". Depois, a variável x sofre um incremento, isto é, ela passa a valer 2 e assim; logo após é verificado se x ainda é menor ou igual a 17, imprime-se "Holá Mundo!" e x sofre outro incremento. Isso se repete até que x seja igual a 18 e a verificação x <= 17 torna-se falsa e o programa encerra.

Veja o vídeo abaixo para mais alguns detalhes. Depois faça os exercícios que se segue.

Agora é com você:

1. Faça um programa que gere a tabuada do 1 ao dez, conforme o professor fez em vídeo.

2. Faça um programa que calcule o quadrado de um número indo de um até 100. Por exemplo: 1 x 1 = 1; 2 x 2 = 4; ... 100 x 100 = 10000.

3. Faça um programa que calcule a soma de todos os números indo de 1 até 100. Esse é mais difícil. Veja a solução do professor no vídeo abaixo.

AULA 5: Entendendo o potenciômetro, transistor, capacitor e as portas do Arduíno

02 de Março de 2022

Para baixar o arquivo pdf desta aula, também disponível impresso e no SisQ, clique no botão abaixo.

Linguagem C e C++

Agora que você sabe que o Arduino pode ser programado através de uma linguagem chamada de C++, nós vamos então aprender um pouco mais sobre ela.

A linguagem C foi uma linguagem criada nos anos 70, enquanto a linguagem C++ é da década de 80 e, apesar de antigas, são muito importantes até hoje. Na aula de hoje, vamos aprender alguns comandos importantes para programação sendo importante você saber que vamos começar pela linguagem C, mas não se preocupe, uma vez que quase tudo se aplica à linguagem C++.

Porque então não começamos pela linguagem C++? Digamos, de forma simplificada, que o C++ é mais completo e, por isso, um pouco mais complexo que o C, porém ao estudar C você estará se preparando para aprender C++ e para programar o Arduino. Que acha?

A seguir vamos vendo alguns comandos que poderão ser executados na janela incorporada aqui mesmo nesta página. Bora começar?

Bibliotecas, Entrada e Saída

Já tivemos uma ideia do que é uma biblioteca: de forma simplificada, é um conjunto de funções que são disponibilizadas para nós utilizarmos em nosso programa e que, para ser usada, deve ser informada no início do programa.

Entende-se por entrada toda informação que "entra" no computador, seja pelo uso do teclado ou mouse. Entende-se como saída o que o computador irá mostrar na tela. Assim, se quisermos criar um programa que exige que o usuário informe algo ao computador ou que algo seja mostrado no computador para o usuário, devemos trabalhar com entrada e saída. Por esta razão iremos utilizar uma biblioteca chamada de <stdio.h>. Para usar as funções desta biblioteca, você deverá escrever no início do seu programa:

#include <stdio.h>

O nome desta biblioteca vem da junção das palavras, em inglês, standard (padrão) input e output (entrada e saída). Já o ".h" no final, faz referência ao que chamamos de extensão do arquivo onde serão salvas as funções (por exemplo, temos extensões .pdf para arquivos texto, .jpg para imagens e muitas outras.

Assim como no Arduino, que você tinha que criar duas funções, sendo uma o void setup() e a outra o void loop() , aqui você vai ter que criar uma função chamada int main(), que significa principal. Lembre-se que no Arduino você tinha que configurar as portas antes de iniciar o loop, já aqui é só criar a função principal.

Como toda função retorna alguma coisa, sempre finalizamo toda função com o comando return acrescido do que esta função retorna. Como a função principal não precisa retornada nada, costumamos colocar no fim da função o return 0. Note que é um número o caractere ao lado do comando return.

a estrutura base do nosso primeiro programa será assim:

            #include <stdio.h>
            
            int main(){
            //comandos
            return 0;
            }
            
            

Ao colar o código no espaço abaixo, clique em "Run" para ver o resultado.

Comentários

Tão importante quanto programar é descrever o que você está fazendo. Assim, nós podemos sempre fazer bom uso de comentários. Em C, ou C++, se você quiser escrever um comentário em um linha, é só colocar // e escrever seu comentário à direita. O que estiver à direita e na mesma linha que o // não será compilado pelo computador.

Se você quiser fazer comentários em mais de uma linha, você deve usar os símbolos /* para iniciar o comentário e */ para finalizar o comentário. Assim, você pode escrever em mais de uma linha uma sequência de comentários como se segue:

            #include <stdio.h>
            
            /*se quiser colocar um comentário
            que ocupa diversas linhas, então é
            só fazer como neste exemplo*/
            
            int main(){
            //Aqui temos um comentário
            //numa lina. E para continuar
            //na linha seguinte, temos que
            //colocar o // no começo da frase
            return 0; //o comentário por
            //ser colocado após um comando
            }
            
            

O comando if()

Vamos fazer um pequeno programa que envolva tomada de decisão. Veja isso no vídeo abaixo.

Teste na prática

Abaixo, verifique o que você aprendeu no assunto acima.

Tabela Verdade

Veremos a tabela verdade em aulas futuras, mas você pode dar uma pesquisada da web para adiantar um pouco, o que acha?

Praticando

1. Explore os comandos que você aprendeu alterando os números de entrada e comparando-os: sejam dois números n1 e n2, escreva na tela as seguintes informações:

  • "n1 e' maior que n2" se n1 > n2 (em C, a comparação é, n1 > n2);
  • "n1 e' maior ou igual n2" se n1 ≥ n2 (em C, a comparação é, n1 >= n2);
  • "n1 e' menor que n2" se n1 < n2 (em C, a comparação é, n1 < n2;)
  • "n1 e' menor ou igual a n2" se n1 ≤ n2 (em C, a comparação é, n1 <= n2);
  • "n1 e' igual a n2" se n1 = n2 (em C, a comparação é, n1 == n2);
  • "n1 e' diferente de n2" se n1 ≠ n2 (em C, a comparação é, n1 != n2).

2. Verifique a tabela verdade que o professor te apresentou. Para isso, teste todos as comparações que a linguagem te permite: E, OU (exclusivo), OU (inclusivo) e o NÃO. Para isso, lembre-se de cada um sos símbolos em C:

  • E: &&;
  • OU (exclusivo): ^;
  • OU (inclusivo): ||;
  • NÃO: !.

Como exemplo, observe o código abaixo:

        #include <stdio.h>
        
        int main() {
        if(1==1 || 1==2){
        printf("verdadeiro");
        }
        else{
        printf("falso");
        }
        }
        
        

Nele, verificamos uma ou outra ou ambas as proposições a seguir é/são verdadeira/verdadeiras:

  • 1 é igual à 1;
  • 1 é igual à 2.

Se a verificação for satisfeita, o programa retorna "verdadeiro", caso contrário (se for falsa), retorna "falso".

Como pelo menos uma das proposições acima é verdadeira, ao executar o código o computador retorna verdadeiro.


3. Para os cinco itens a seguir, responda: o que o computador retornará ao executá-los? Note que você conseguirá a sua resposta se executar o código.

a)

    #include <stdio.h>
    int main() {
    if(2>=1 && 3<5){
    printf("verdadeiro");
    }
    else{
    printf("falso");
    }
    }
    
    

b)

    #include <stdio.h>
    int main() {
    if(1>=1 ^ 1==1){
    printf("verdadeiro");
    }
    else{
    printf("falso");
    }
    }
    
    

c)

    #include <stdio.h>
    int main() {
    if(!(1>5) && 1<2){
    printf("verdadeiro");
    }
    else{
    printf("falso");
    }
    }
    
    

d)

    #include <stdio.h>
    int main() {
    if((1==1 || 1==2) && ~(1<0)){
    printf("verdadeiro");
    }
    else{
    printf("falso");
    }
    }
    
    

 

AULA 4: Primeiros contatos com o Arduino

14 de Fevereiro de 2022

Para baixar o arquivo pdf desta aula, também disponível impresso e no SisQ, clique no botão abaixo.

Veja o vídeo abaixo para entender o que vamos fazer na aula de hoje.

Como visto no vídeo acima, temos cinco objetivos hoje. São eles:

  1. Ligar o LED usando a saída 3,3V do Arduino;
  2. Ligar o LED usando a saída 5V do Arduino;
  3. Ligar o LED na porta digital 2 do Arduino;
  4. Ligar o LED na porta digital 3 do Arduino;
  5. Ligar o LED na porta 13 do Arduino, mas controlar se o LED fica ligado ou desligado, respectivamente, desconectando e conectando a porta digital 12 do Arduino no GND.

O primeiro e segundo objetivos consiste em apenas ligar o LED, agora usando o Arduíno como fonte de energia. O terceiro consiste em conhecer como funciona a saída digital, que consiste basicamente em ligar ou desligar esta porta (respectivamente, conectar em 5V ou no GND). O quarto objetivo consiste em conhecer a saída PWM que nos permite controlar o brilho do LED ou mesmo controlar a velocidade de um motor. Por fim, o último item consiste em verificar o que seria uma entrada digital, onde o usuário determina se fornece 5V ou se conecta ao GND.

Abaixo, temos um vídeo e uma simulação para você entender melhor nosso objetivo de hoje.

Veja aqui o código no gitHub.

Abaixo, veja um tour pelo Arduino

Agora, vamos falar sobre a atividade que você terá que entregar... Isso mesmo, mas é bem simples: a folha que você receber tem o nickname para o seu grupo e você deverá entrar no link abaixo, com seu apelido, e fazer um programa bem simples que o professor te ajudará.

AULA 3: Finalizando o eletroímã

07 de Fevereiro de 2022

Uma vez que os grupos foram formados e entendemos como se monta um eletroímã, agora vamos montar o eletroímã.

O professor irá fornecer um metro de fio esmaltado e entregará à você para que monte o eletroímã. Nosso objetivo hoje é muito simples: ele deverá ser capaz de segurar a bolinha quando o fio for conectado à bateria 9V.

AULA 2: Montando um eletroímã

31 de Janeiro de 2022

Nesta aula vamos formar os grupos e iniciar as aulas práticas criando um eletroímã. Se você não sabe o que é, veja neste link um pouco de teoria.

Vamos alimentar nosso eletroímã com uma bateria da marca Duracell® cujas propriedades podem ser obtidas baixando este datasheet ou procurando na internet por "duracel 9V datasheet".

Observemos os gráfico do datasheet da bateria.

Você deve escolher a corrente elétrica adequada considerando a durabilidade da bateria. Note que a corrente elétrica $i$, medida em ampère, e abreviada pela letra $\rm A$, mas nas figuras acima estamos com os dados em miliampère. A tensão que usaremos é perto de 9 V (volts) e usaremos a letra $U$ para representar esta tensão.

Vamos utilizar um fio de cobre de 0,1 mm de diâmetro. A resistência de um metro deste fio é de cerca de $2\;\Omega$. Verificamos isso pesquisando na internet pelo valor da resistividade do cobre ($\rho_{cobre}=0,0179\;\Omega\cdot\rm mm^2/m$) e usando a segunda lei de Ohm: $$R=\frac{\rho\cdot L}{A}$$ sendo $R$ a resistência elétrica do fio, $L$ o comprimento do fio, $A=\pi\cdot r^2$ a área da secção transversal do fio e $r$ o raio do fio. Vamos fazer esse cálculo juntos: $$R=\frac{\rho\cdot L}{A}\Rightarrow$$ $$R=\frac{0,0179\cdot 1}{\pi\cdot 0,05^2}\Rightarrow$$ $$R=2,28\;\Omega.$$

Vamos utilizar a segunda lei de Ohm ($U=R\cdot i$) para determinar a corrente necessária para isso: $$U=R\cdot i\Rightarrow$$ $$9=2,28\cdot i\Rightarrow$$ $$i=3,95\;\rm A.$$

Veja que isso da $3950 \; \rm mA$, muito acima de qualquer um dos gráficos.

Agora temos um problema: qual corrente elétrica deveríamos utilizar ou tem como reduzir a corrente elétrica fornecida pela bateria?

Uma sugestão é colocar um resistor em série, mas somente temos resistor de baixa potência (cerca de $0,25\rm \; W$) o que da uma corrente baixa: $$P=U\cdot i \Rightarrow$$ $$0,25=9\cdot i \Rightarrow$$ $$i=0,028\rm\; A \;\;\;\;\;ou$$ $$i=28\rm\; mA.$$

Portanto, concluímos que o segundo gráfico já não nos serve. Você pode escolher a corrente que quiser, desde que não menor que o valor calculado acima. Como exemplo, se escolhêssemos uma corrente de $0,015\;\rm A$, precisaríamos de uma resistência $R_1$ no valor de $$U=R\cdot i\Rightarrow$$ $$9=R_1\cdot 0,015\Rightarrow$$ $$R_1=600\; \Omega.$$

Temos alguns resistores no laboratório e você deve, junto com seu grupo, escolher uma solução para isso e fazer diversos experimentos.

Depois de finalizar o eletroímã, tente testar atraindo metais, tente mudar o meio dentro do eletroímã.

Observações


Image
Professor Danilo

Não se esqueça que o fio que você vai trabalhar é esmaltado: é como se ele tivesse uma capinha. Não se esqueça de escascar as pontas do fio, mas não descasque o meio do fio, caso contrário terá um curdo no meio do fio e o funcionamento do seu eletroímã vai ficar prejudicado.

TOPO 31 de Janeiro de 2022

AULA 1: introdução à disciplina de Ciência & Tecnologia

24 de Janeiro de 2022

Esta primeira aula foi pensada para apresentar o nosso objetivo aos alunos. Foram montados cinco circuitos:

  • controle de brilho de um LED com base na luminosidade ambiente e controle do brilho de uma sequência de LEDs;
  • teste de reflexo (quando os LEDs ascendem o usuário deve apertar um botão e o Arduíno mede o tempo que se leva até ser pressionado o botão);
  • sensor de movimento (quando detecta movimento, aciona uma lâmpada);
  • sensor ultrassônico capaz de medir distância, velocidade e aceleração e mostrar em um display de OLED de 0,96 polegada;
  • sensor de CO, umidade relativa e temperatura apresentado no vídeo abaixo.

Conforme prometido no vídeo, você pode baixar o arquivo com o código clicando aqui.

Para montar o circuito, siga a seguinte conexão:

Da esquerda para a direita com o display em baixo temos 16 pinos:
1 → gnd
2 → 5 V
3 → ligando 2k em série com gnd ficou bom. No gnd máximo contraste e no 5V mínimo contraste
4 → digital 12
5 → gnd
6 → digital 11
7 → nc
8 → nc
9 → nc
10 → digital 5
11 → digital 4
12 → digital 3
13 → digital 2
14 → ligar no 5 V com resistor de 330 ohm
16 → gnd

Note que nc significa não conectado.

O DHT11 com resistor simplesmente conectar data ao A0.

O MQ-7 deve ter a analog out ou AO ligada na porta A1 e a digital pode permanecer desligada. Vcc em 5V e GND no GND do Arduíno.

O buzzer (piezzo) deve ser ligado na porta 8 (positivo) e gnd.


Finalizamos esta primeira postagem sem nenhum arquivo.

Arduíno . Sensores . Introdução

Observações


Image
Professor Danilo

Na nossa primeira aula apenas vimos o laboratório, conhecemos o que é Arduíno e vimos cinco circuitos diferentes.

TOPO 26 de Janeiro de 2022