$\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 34: Código Morse usando LED parte II

16 de Outubro de 2022

Nesta última aula do ano, o professor irá discutir o código com a sala. Você precisará apenas montar o circuito da aula passada e enviar o código a seguir.

Neste link você pode copiar o programa do codificador para código Morse.

Envie o programa para o Arduíno e escreva o que quiser no monitor serial. Quando pressionar o enter, seu código Morse será enviando para o LED e para o monitor serial.

Para mais detalhes, veja uma postagem feita pelo seu professor sobre este nosso programa.

AULA 33: Código Morse usando LED parte I

09 de Novembro de 2022

Esta aula é para você tentar montar um circuito, usando um LED, que seja capaz de emitir um SOS usando código Morse.

Tente montar o circuito sem procurar por mais ajuda na internet. A seguir, apresento uma lista de comandos e informações que você poderá precisar. Quando estiver algo entre símbolos de "menor que" e "maior que" <NúmeroAqui> você deve substituir por algum número que represente, por exemplo, uma porta digital ou o tempo de espera, em milissegundos.

  • Lembre-se de usar o void setup() {. Nele você configura as portas de entrada e saída bem como inicia a comunicação serial, que não será necessária na aula de hoje.
  • Para definir uma porta digital como saída, use  pinMode(<EndereçoDaPorta>, OUTPUT); não se esquecendo de terminar com um ponto e vírgula.
  • Todo o programa principal deve ficar na função main, entre os colchetes. Lembre se como usá-la: void loop() { }
  • Para ligar o LED:  digitalWrite(<EndereçoDaPorta>, HIGH);
  • Para desligar o LED:  digitalWrite(<EndereçoDaPorta>, LOW);
  • Para esperar (seja enquanto o LED está ligado ou quando o LED está desligado:  delay(<TempoDeEspera>);

Com estas informações você já consegue montar seu código.

Quanto ao circuito, você vai precisar de:

  • dois fios MM;
  • um LED;
  • um resistor de cerca de 220 Ω.

Não se esqueça que a perna do LED com maior comprimento se liga no positivo e a menor no GND. Portanto, você pode fazer a seguinte ligação: porta digital 2 do Arduíno -> perna comprida do LED -> perna curta do LED -> resistor -> GND do Arduíno.

Caso tenha dificuldades, você pode procurar no google por ajuda. Se quiser o código pronto, você consegue no link abaixo... Ele existe: só deixei na mesma cor que o texto de fundo para que não procurem ir direto para a solução.

Você pode clicar ao lado:                                                                                                                                                                                            E aí, achou?

AULA 32: Voltando ao C (código Morse - parte III)

26 de Outubro de 2022

Vamos falar de matrizes. Inicialmente, sejam 6 números chamados $A$, $B$, $C$, $D$, $E$ e $F$ que queremos organizar em uma espécie de tabela. Por exemplo, queremos expressar os números contidos na tabela abaixo, que apresenta as notas de dois alunos na primeira prova (Prova 1), na segunda prova (Prova P2) e na terceira prova (Prova 3):

Nota P1

Nota P2

Nota P3

Aluno 1

$A$

$B$

$C$

Aluno 2

$D$

$E$

$F$

Organizamos estes dados no que chamamos de matriz:

$matriz = \begin{bmatrix} A & B & C\\ E & F & G \end{bmatrix}.$

Em linguagem de programação C, usamos colchetes, como fizemos com vetores. A maneira de expressarmos isso é:

$matriz[2][3] = [[A,\;B,\;C],\;[D,\;E,\;F]].$

Note que a variável que contém os dados, que chamamos de $matriz$, deve conter quanto de espaço usamos para guardar os dados. Por exemplo, $matriz[2][3]$ é a maneira pela qual dizemos ao computador que vamos criar uma matriz de 2 linhas e três colunas. Assim, concluímos que a forma de declarar a matriz é

$matriz[< linhas >][< colunas >].$

Logicamente, devemos dizer qual o tipo de dado. Por exemplo, para guardamos notas de alunos, podemos usar o tipo float; já para guardar o RM, podemos usar o tipo int.

Vamos praticar.

1) Faça um programa que recebe seis números, como explicado acima, e exiba na tela uma espécie de tabela, apresentando a nota dos alunos como na tabela acima. Lógico que a formatação aqui não será nossa prioridade, portanto não se preocupe com a beleza do que for apresentado.

Solução do exercício 1 da aula 32.


2) Crie uma matriz que apresenta todo o alfabeto e, utilizando o looping for, exibe na tela todo o alfabeto. Para isso, temos que salvar o alfabeto em uma "matriz" de caracteres e isso é feito com chaves { } e aspas simples ' ' como se segue:

char alfabeto[37]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}

Solução do exercício 2 da aula 32.


3) Agora, faça aparecer na tela o simbolo de cada letra, número e espaço em código Morse. Use as declarações abaixo para te ajudar:

char alfabeto[37]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ' '};

char morse[37][7]={{ "o- "}, {"-ooo "}, {"-o-o "}, {"-oo "}, {"o "}, {"oo-o "}, {"--o "}, { "oooo "}, {"oo " }, {"o--- "}, {"-o- "}, {"o-oo "}, {"-- "}, {"-o "}, {"--- "}, { "o--o "}, {"--o- "}, { "o-o "}, {"ooo "}, {"- "}, {"oo- "}, {"ooo- "}, {"o-- "}, {"-oo- "}, {"-o-- "}, {"--oo "}, {"o---- "}, {"--oo- "},{"ooo-- "}, {"oooo- "}, {"ooooo "}, {"-oooo "}, {"--ooo "}, {"---oo "}, {"----o "}, {"----- "}, {" "}};

Solução do exercício 3 da aula 32.


Se não der tempo de fazer o exercício na sala de aula então o professor fará um vídeo e postará aqui.

Na próxima aula começaremos a utilizar o Arduino novamente.

Atividade do terceiro trimestre.

A atividade deste trimestre será feita em um único questionário no qual você deverá descrever, de forma bem resumida, o que cada um dos cinco programas apresentados faz. É importante dizer que todos os programas apresentados foram desenvolvidos durante as aulas e que você pode procurar todos os códigos nas aulas anteriores, copiar os códigos e jogar em um compilador para ver o que o programa faz.

Se quiser ver os códigos com coloração, como ocorre no programa Arduino, é só baixar a atividade do 4° bimestre em formato pdf.

Caso você tenha faltado à aula, procure o professor que ele pode te entregar o material impresso. Caso não consiga, não se preocupe: resolva tudo em uma folha qualquer e entregue ao seu professor.

AULA 31: Voltando ao C (código Morse - parte II)

19 de Outubro de 2022

Faça um programa que:

  • recebe dois vetores bidimensionais $\vec S_1$ e $\vec S_2$, que representam as posições de um corpo em um plano;
  • recebe o intervalo de tempo $\Delta t$ para se deslocar da posição $\vec S_1$ até a posição $\vec S_2$;
  • retorna o vetor deslocamento $\Delta \vec S = \vec S_2 - \vec S_1$;
  • retorna o módulo do vetor deslocamento $|\Delta \vec S |$;
  • retorna o vetor velocidade vetorial média $\vec v_{m\acute{e}dia} = \frac{\Delta \vec S}{\Delta t}$;
  • retorna o módulo do vetor velocidade vetorial média $|\vec v_{m\acute{e}dia}|$.

Agora, teste seu programa no exercício extraído da lista de cinemática vetorial, segundo bimestre, primeiro ano:

exercício extraído da lista da escola

Respostas:

a) $|\vec v_{m\acute{e}dia}| = 2\sqrt 2 \;\rm m/s$ $\approx 2,83\;\rm m/s$.

b) $\vec v_{m\acute{e}dia} = (2,2\;\vec i+2,2\;\vec j)\;\rm m/s \;$ ou $\; \vec v_{m\acute{e}dia} = (2.2, 2.2) \;\rm m/s$. Note que nesta última notação preferi usar o "." no lugar da "," para não confundir os dados, tal como devemos fazer durante a programação do Arduino.

Aqui você encontra a solução do exercício da aula 31.

Ao finalizar este exercício, retorne à aula anterior e resolva os exercícios 5, 6 e 7.

AULA 30: Voltando ao C (código Morse - parte I)

05 de Outubro de 2022

Para acompanhar a aula, utilize a folha que o professor forneceu.

Você pode consultar a solução dos exercícios propostos.

AULA 29: Mini Harpa de luz Parte IV e feira de ciências

28 de Setembro de 2022

Finalizando a Harpa

Primeiramente, compartilho o código da harpa que desenvolvi no vídeo compartilhado na aula passada.

Posteriormente adicionei os códigos que estavam sendo desenvolvido pelas três equipes:

Lembre-se que para copiar é só clicar no botão correspondente.

Caso seu grupo tenha finalizado a Harpa, você pode ajudar outro grupo a finalizar o projeto ou se dedicar ao circuito da feira de ciências.

Qualquer dúvida, pergunte ao professor.

Feira de ciências

Temos uma novidade: vocês poderão apresentar o projeto da queda livre, feito no primeiro semestre deste ano, na nossa feira de ciências que ocorrerá amanhã. Assim sendo, vocês irão se dividir para finalizar a harpa de luz, que também serão exibidas na feira, e entre quem manipulará o experimento da queda livre.

A harpa não necessita de alguém manipulando o circuito, porém o experimento de queda livre precisa de supervisão uma vez que o transistor não poderá ficar ligado por muito tempo pois ele esquenta de mais e poderá queimar.

Como não usaremos computador, teremos que utilizar um display de 0,96 polegadas de Oled. Para isso, além de copiar o código do projeto de queda livre no Github, você precisará instalar a biblioteca necessária para usar o display.

Para instalar a biblioteca, abra a IDE do Arduino e clique em "Ferramentas", no menu superior, e depois em "Gerenciar Bibliotecas" como apresentado na figura abaixo.

Na IDE Arduino, clique em Ferramentas e depois em Gerenciar Bibliotecas...

Vai abrir uma janela na qual você pode buscar por bibliotecas. Encontre a biblioteca U8glib.

No campo de busca, na janela que se abrir, buscque por U8glib

Clique na biblioteca, quando encontra-la, e depois em instalar.

Ao clicar na biblioteca, o botão para instalar fica ativo. Clique no botão instalar.

Agora, envie para o Arduino e monte o circuito.

Circuito da harpa

A conexão será da seguinte maneira:

  • O pino GND do display no GND do Arduino;
  • O pino VCC do display no 5 V do Arduino;
  • O pino SCK do display na porta analógica A5 do Arduino;
  • O pino SDA do display na porta analógica A4 do Arduino;
  • O relé deve ser ligado no 5 V (pino VCC) e no GND (pino GND) do Arduino e na porta digital 2 (pino IN);
  • O botão para passar para o próximo passo no programa, que pode ficar na protoboard, deve ser ligado no GND e na porta digital 3;
  • O botão que fica abaixo da esfera deve estar conectado na porta digital 4 do Arduino.

Veja esquema do circuito abaixo:

Esquema do circuito apresentando as ligações elétricas.

AULA 28: Mini Harpa de luz Parte III

21 de Setembro de 2022

A aula de hoje é continuação do projeto a ser desenvolvido em sala de aula: a harpa de luz. Ainda não compartilharei uma versão final do código, porém você pode baixar as versões em desenvolvimento pelo grupo do Pietro ou a versão em desenvolvimento do grupo do Castro.

Lembre-se que é só clicar no botão, em destaque na imagem abaixo.

Ao finalizar seu código, você pode enviar através do formulário com botão no início da página (usado para tirar dúvidas) que na aula seguinte eu compartilho aqui com algumas observações.

Talvez o vídeo abaixo te ajuda. Não testei na harpa, mas o código foi compilado e está tudo ok.


AULA 27: Mini Harpa de luz Parte II

14 de Setembro de 2022

A aula de hoje é continuação do projeto a ser desenvolvido em sala de aula: a harpa de luz.

Ao finalizar seu código, você pode enviar através do formulário com botão no início da página (usado para tirar dúvidas) que na aula seguinte eu compartilho aqui com algumas observações.

O grupo do Pietro e da Luana desenvolveram parte de um código que foi enviado na aula passada. Para acessar a versão original (na pasta PeL) ou a com correções do professor (PeL_modificado), você pode acessar acessar o site do Github. Dica: clique em "copiar", no Github, para copiar o código com mais facilidade ("Copy raw contents") conforme podemos ver na figura abaixo.


AULA 26: Mini Harpa de luz Parte I

01 de Setembro de 2022

Lembre-se: hoje é a data de entrega do relatório.

Na aula de hoje e nas próximas três aulas, seu grupo irá desenvolver a harpa sozinhos.

Para isso, você precisa:

  • um piezo passivo;
  • sete LDRs;
  • sete resistores de pelo menos 1000 Ω cada;
  • a harpa que contém sete lasers e três placas de ensaio;
  • muitos fios MM;
  • o código, que você desenvolverá.

Baixe a nota de aula da aula anterior se achar necessário:


AULA 25: Piezo Parte III

24 de Agosto de 2022

Na aula de hoje vamos montar o que seria uma corda da nossa arpa de luz.

Para isso, você precisa:

  • um piezo passivo;
  • um LDR;
  • um resistor de pelo menos 1000 Ω;
  • um módulo laser;
  • 16 fios MM;
  • o código, disponível no arquivo abaixo.

Baixe a nota de aula no botão abaixo:


Para saber mais sobre o LDR, você pode consultar o verbete na wikipedia e assistir o vídeo abaixo.



Confira o resultado do circuito do seu professor:


AULA 24: Piezo Parte II

17 de Agosto de 2022

Na aula de hoje vamos montar um mini piano que toca sete notas. No futuro, trocaremos os botões pelos lasers e LDRs.

Para isso, você precisa:

  • um piezo;
  • 16 fios MM;
  • o código, disponível no arquivo abaixo.

Baixe a nota de aula no botão abaixo:


Veja uma simulação abaixo.



Caso a simulação não carregue, acesse a simulação do mini piano aqui.

Confira o resultado do circuito do seu professor:


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

Aqui você encontra o modelo para seu relatório no formato requerido pelo seu professor.

Para acompanhar os vídeos abaixo você pode baixar um arquivo não formatado.



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