Química

1 Lei dos Gases Ideais (EM13CNT101, EM13CNT204, EM13CNT205, EM13CNT207, EM13CNT303)

# Dados:
R = 8.314 # J/(mol*K), constante geral dos gases ideias
V = seq(0,22.4, length.out=50)  # vetor de "Volume" (em litros), com 50 pontos
T = 298 # K, temperatura absoluta


# Equação
# pV = RT; p = RT/V
p = R*T/V

library(plotly)
library(magrittr) # biblioteca para o operador pipe "%>%"
plot_ly(x = V, y = ~R*T/V, type = 'scatter', mode='lines') %>%
  layout(
    title = "Transformação Isotérmica de um Gás",
    xaxis = list(title = "Volume V, L", range=c(-1,24)),
    yaxis = list(title = "Pressão p, Pascal")
  )

Sugestões:

      Experimente modificar o gráfico, usando/substituindo alternativamente os comandos abaixo no trecho de código:


2 Curvas de consumo de reagente e formação de produto (EM13CNT301, EM13MAT304, EM13CNT306)

library(ggplot2)
library(gganimate)
library(gifski)

# Dados simulados de tempo, reagente e produto
tempo <- seq(0, 10, length.out = 100)           # 0 a 10 segundos
reagente <- 100 * exp(-0.3 * tempo)             # Decaimento exponencial
produto <- 100 * (1 - exp(-0.3 * tempo))        # Formação de produto

# Criando um dataframe para o gráfico
dados <- data.frame(Tempo = tempo, Reagente = reagente, Produto = produto)

# Gráfico animado de consumo de reagente e formação de produto
p <- ggplot(dados, aes(x = Tempo)) +
  geom_line(aes(y = Reagente, color = "Reagente"), linewidth = 1.2) +
  geom_line(aes(y = Produto, color = "Produto"), linewidth = 1.2) +
  scale_color_manual(values = c("Reagente" = "blue", "Produto" = "red")) +
  labs(title = "Consumo de Reagente e Formação de Produto ao Longo do Tempo",
       x = "Tempo (s)", y = "Quantidade (mol)", color = "Substância") +
  transition_reveal(Tempo) +
  theme_minimal()

# Exibindo o gráfico animado
animate(p, renderer = gifski_renderer())

Sugestões:

      Experimente modificar o gráfico, usando/substituindo alternativamente os comandos abaixo no trecho de código:


3 Equilíbrio de dissociação de ácidos e bases fracas (EM13CNT303, EM13MAT305, EM13CNT304)

library(plotly)

# Parâmetro inicial de Ka para ácido fraco e dados para pH e concentração
Ka <- 1e-5  # Constante de acidez padrão

# Valores de pH e concentrações
pH_values <- seq(0, 14, 0.1)
conc_H <- 10^(-pH_values)       # Concentração H+ para cada pH
conc_OH <- 1e-14 / conc_H       # Concentração OH- com base no produto iônico da água
conc_HA <- conc_H / (Ka + conc_H)  # Concentração HA para ácido fraco
conc_A <- Ka * conc_HA             # Concentração A- 

# Data frame combinado
dados_acidez <- data.frame(pH = pH_values, conc_H = conc_H, conc_OH = conc_OH, conc_HA = conc_HA, conc_A = conc_A)

# Gráfico combinado interativo
plot_ly(dados_acidez) %>%
  add_lines(x = ~pH, y = ~conc_H, name = "Concentração H+", line = list(color = "blue")) %>%
  add_lines(x = ~pH, y = ~conc_OH, name = "Concentração OH-", line = list(color = "red")) %>%
  add_lines(x = ~pH, y = ~conc_HA, name = "Concentração HA (ácido)", line = list(color = "purple")) %>%
  add_lines(x = ~pH, y = ~conc_A, name = "Concentração A- (base conjugada)", line = list(color = "green")) %>%
  layout(
    title = "Curvas de Acidez, Basicidade e Dissociação de Ácido",
    xaxis = list(title = "pH"),
    yaxis = list(title = "Concentração (mol/L)", type = "log"),
    sliders = list(
      list(
        active = 5, 
        currentvalue = list(prefix = "Ka = "),
        steps = lapply(seq(1e-7, 1e-3, length.out = 10), function(k) {
          list(label = format(k, scientific = TRUE), method = "update",
               args = list(list(
                 y = list(
                   10^(-pH_values),                    # Atualizar H+
                   1e-14 / 10^(-pH_values),            # Atualizar OH-
                   10^(-pH_values) / (k + 10^(-pH_values)), # Atualizar HA
                   k * (10^(-pH_values) / (k + 10^(-pH_values))) # Atualizar A-
                 )
               )))
        })
      )
    )
  )

Sugestões:

      Experimente modificar o gráfico, usando/substituindo alternativamente os comandos abaixo no trecho de código:


4 Decaimento radioativo e meia-vida (EM13CNT306, EM13MAT305, EM13CNT301)

library(plotly)

# Parâmetros iniciais
N0 <- 100  # Quantidade inicial
tempo <- seq(0, 50, by = 0.5)  # Intervalo de tempo

# Função de decaimento
decaimento_radioativo <- function(t, meia_vida) {
  N0 * 0.5^(t / meia_vida)
}

# Gráfico com plotly
fig <- plot_ly(x = ~tempo, y = ~decaimento_radioativo(tempo, 10), type = 'scatter', mode = 'lines', name = "Decaimento")

# Adicionando o slider
fig <- fig %>% layout(
  title = "Decaimento Radioativo",
  xaxis = list(title = "Tempo"),
  yaxis = list(title = "Quantidade Restante"),
  sliders = list(list(
    currentvalue = list(prefix = "Meia-vida = "),
    steps = lapply(seq(5, 30, by = 5), function(meia_vida) {
      list(label = as.character(meia_vida), method = "update",
           args = list(list(y = list(decaimento_radioativo(tempo, meia_vida)))))
    })
  ))
)

fig

Sugestões:

      Experimente modificar o gráfico, usando/substituindo alternativamente os comandos abaixo no trecho de código:


5 Decomposição de peróxido de hidrogênio (EM13CNT301, EM13MAT305, EM13CNT303)

library(plotly)

# Parâmetros iniciais
H2O2_0 <- 1   # Concentração inicial de H2O2
tempo <- seq(0, 10, 0.1)  # Intervalo de tempo

# Função de decomposição
decomposicao <- function(t, k) H2O2_0 * exp(-k * t)

# Gráfico com slider
fig <- plot_ly(x = ~tempo, y = ~decomposicao(tempo, 0.3), type = 'scatter', mode = 'lines') %>%
  layout(
    title = "Decomposição de H2O2",
    xaxis = list(title = "Tempo (horas)"),
    yaxis = list(title = "Concentração de H2O2 (mol/L)"),
    sliders = list(list(
      currentvalue = list(prefix = "k = "),
      steps = lapply(seq(0.1, 1, 0.1), function(k) {
        list(label = k, method = "update", args = list(list(y = list(decomposicao(tempo, k)))))
      })
    ))
  )

fig

Sugestões:

      Experimente modificar o gráfico, usando/substituindo alternativamente os comandos abaixo no trecho de código:


6 Lei de Proust e estequiometria de reação em representação 3D (EM13CNT101, EM13CNT202, EM13CNT201)

library(plotly)

# Quantidades iniciais de reagentes
H2_mol <- 0:5  # Quantidade de H2 em mol
O2_mol <- 0:5  # Quantidade de O2 em mol

# Função para calcular H2O formado com base na estequiometria 2:1:2
formar_H2O <- function(H2, O2) {
  min(2 * H2, O2) / 2
}

# Dados para o gráfico
dados <- expand.grid(H2 = H2_mol, O2 = O2_mol)
dados$H2O <- mapply(formar_H2O, dados$H2, dados$O2)

# Gráfico interativo com sliders para H2 e O2
fig <- plot_ly(dados, x = ~H2, y = ~O2, z = ~H2O, type = 'mesh3d', mode = 'markers') %>%
  layout(
    title = "Estequiometria de Reação (Lei de Proust)",
    scene = list(
      xaxis = list(title = "Quantidade de H2 (mol)"),
      yaxis = list(title = "Quantidade de O2 (mol)"),
      zaxis = list(title = "Quantidade de H2O formado (mol)")
    )
  )

fig

Sugestões:

      Experimente modificar o gráfico, usando/substituindo alternativamente os comandos abaixo no trecho de código:


7 Concentração de reagentes e constante de equilíbrio de dissociação (EM13CNT201, EM13CNT202, EM13CNT204)

# Carregar pacotes necessários
library(ggplot2)
library(gganimate)

# Definir os parâmetros iniciais
A <- 1  # Concentração de A
B <- 1  # Concentração de B

# Função para calcular as concentrações de produtos com base na constante K
calc_produtos <- function(K) sqrt(K * A * B)

# Criar o conjunto de dados para diferentes valores de K
dados <- data.frame(
  K = seq(0.5, 3, by = 0.1)
)
dados$C <- calc_produtos(dados$K)
dados$D <- dados$C

# Transformar dados para visualização de barras
dados_long <- data.frame(
  K = rep(dados$K, each = 4),
  Substancia = rep(c("A", "B", "C", "D"), times = length(dados$K)),
  Concentracao = c(rep(A, length(dados$K)), rep(B, length(dados$K)), dados$C, dados$D)
)

# Criar gráfico animado
p <- ggplot(dados_long, aes(x = Substancia, y = Concentracao, fill = Substancia)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = 'Equilíbrio Químico - Constante de Equilíbrio (K): {closest_state}',
       x = 'Substâncias', y = 'Concentração (mol/L)') +
  transition_states(K, transition_length = 2, state_length = 1) +
  ease_aes('linear')

# Mostrar o gráfico
p

Sugestões:

      Experimente modificar o gráfico, usando/substituindo alternativamente os comandos abaixo no trecho de código:


De volta ao topo