Created
August 4, 2025 20:37
-
-
Save gustavorps/8ef0750c05f9f355ce1439d234f861f9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import math | |
| def analisar_viabilidade_icamento(dados_veiculo, dados_carga): | |
| """ | |
| Analisa a viabilidade de uma operação de içamento de carga para uma caçamba de pickup | |
| usando um tripé pré-definido. | |
| Args: | |
| dados_veiculo (dict): Dicionário com as especificações do veículo. | |
| dados_carga (dict): Dicionário com as especificações da carga. | |
| Returns: | |
| dict: Um dicionário contendo o resultado da análise de viabilidade e cálculos adicionais. | |
| """ | |
| # --- PARÂMETROS FIXOS DO EQUIPAMENTO (Baseado na Solução 2: Perfil de Aço U) --- | |
| # Estes valores são baseados no projeto de engenharia do relatório anterior. | |
| tripe = { | |
| "capacidade_max_kg": 1000, | |
| "altura_total_m": 3.0, | |
| "raio_base_m": 1.5, | |
| "comprimento_perna_m": 3.354, | |
| "altura_util_gancho_m": 2.8, # Altura total - espaço para o cabeçote e gancho | |
| "perfil_Iy_mm4": 302000, # Momento de Inércia mínimo (Iy) para o Perfil U 127x50 | |
| "material_E_MPa": 200000 # Módulo de Elasticidade do Aço ASTM A36 | |
| } | |
| # --- INICIALIZAÇÃO DA ANÁLISE --- | |
| analise = { | |
| "viabilidade_geral": True, | |
| "justificativas": | |
| } | |
| # --- CHECKLIST DE VIABILIDADE --- | |
| # 1. Verificação de Capacidade de Carga do Tripé | |
| if dados_carga["peso_kg"] > tripe["capacidade_max_kg"]: | |
| analise["viabilidade_geral"] = False | |
| analise["justificativas"].append(f"[FALHA] Peso da carga ({dados_carga['peso_kg']} kg) excede a capacidade do tripé ({tripe['capacidade_max_kg']} kg).") | |
| else: | |
| analise["justificativas"].append(f"[OK] Peso da carga ({dados_carga['peso_kg']} kg) é compatível com a capacidade do tripé ({tripe['capacidade_max_kg']} kg).") | |
| # 2. Verificação de Capacidade de Carga do Veículo | |
| if dados_carga["peso_kg"] > dados_veiculo["capacidade_carga_kg"]: | |
| analise["viabilidade_geral"] = False | |
| analise["justificativas"].append(f"[FALHA] Peso da carga ({dados_carga['peso_kg']} kg) excede a capacidade da pickup ({dados_veiculo['capacidade_carga_kg']} kg).") | |
| else: | |
| analise["justificativas"].append(f"[OK] Peso da carga ({dados_carga['peso_kg']} kg) é compatível com a capacidade da pickup ({dados_veiculo['capacidade_carga_kg']} kg).") | |
| # 3. Verificação de Dimensões (Carga vs. Caçamba) | |
| # Verifica se a carga cabe na caçamba em qualquer orientação (comprimento x largura ou largura x comprimento) | |
| cargo_c = dados_carga["comprimento_m"] | |
| cargo_l = dados_carga["largura_m"] | |
| cacamba_c = dados_veiculo["cacamba_comprimento_m"] | |
| cacamba_l = dados_veiculo["cacamba_largura_m"] | |
| if not ((cargo_c <= cacamba_c and cargo_l <= cacamba_l) or \ | |
| (cargo_l <= cacamba_c and cargo_c <= cacamba_l)): | |
| analise["viabilidade_geral"] = False | |
| analise["justificativas"].append(f"[FALHA] Dimensões da carga ({cargo_c}m x {cargo_l}m) não cabem na caçamba ({cacamba_c}m x {cacamba_l}m).") | |
| else: | |
| analise["justificativas"].append(f"[OK] Dimensões da carga são compatíveis com o espaço da caçamba.") | |
| # 4. Verificação Geométrica de Elevação (Altura) | |
| if tripe["altura_util_gancho_m"] <= dados_veiculo["altura_piso_cacamba_m"]: | |
| analise["viabilidade_geral"] = False | |
| analise["justificativas"].append(f"[FALHA] Altura útil do gancho do tripé ({tripe['altura_util_gancho_m']}m) é insuficiente para superar a altura da caçamba ({dados_veiculo['altura_piso_cacamba_m']}m).") | |
| else: | |
| analise["justificativas"].append(f"[OK] Tripé possui altura suficiente para elevar a carga acima da caçamba.") | |
| # 5. Verificação Geométrica de Posicionamento (Espaço Interno do Tripé) | |
| # Calcula o raio da carga (distância do centro ao canto mais distante) | |
| raio_carga_m = math.sqrt((dados_carga["comprimento_m"] / 2)**2 + (dados_carga["largura_m"] / 2)**2) | |
| # Calcula o raio interno disponível do tripé na altura da caçamba | |
| h_cacamba = dados_veiculo["altura_piso_cacamba_m"] | |
| H_tripe = tripe["altura_total_m"] | |
| R_base = tripe["raio_base_m"] | |
| raio_disponivel_na_altura_cacamba = R_base * (H_tripe - h_cacamba) / H_tripe | |
| if raio_carga_m >= raio_disponivel_na_altura_cacamba: | |
| analise["viabilidade_geral"] = False | |
| analise["justificativas"].append(f"[FALHA] A carga é muito larga (raio de {raio_carga_m:.2f}m) para passar entre as pernas do tripé na altura da caçamba (espaço de {raio_disponivel_na_altura_cacamba:.2f}m).") | |
| else: | |
| analise["justificativas"].append(f"[OK] A carga passa com segurança entre as pernas do tripé para ser posicionada na caçamba.") | |
| # --- CÁLCULOS ADICIONAIS --- | |
| # 1. Cálculo da Altura Máxima de Elevação da Carga | |
| # Limitado pela altura do gancho ou pela geometria (quando a carga toca as pernas) | |
| h_max_geometrica = H_tripe * (1 - raio_carga_m / R_base) | |
| altura_maxima_elevacao = min(tripe["altura_util_gancho_m"], h_max_geometrica) | |
| limitante = "altura do gancho" if altura_maxima_elevacao == tripe["altura_util_gancho_m"] else "geometria da carga (risco de colisão com as pernas)" | |
| analise["altura_max_elevacao"] = f"{altura_maxima_elevacao:.2f} metros (limitado pela: {limitante})" | |
| # 2. Cálculo da Abertura Máxima (Ângulo) Segura do Tripé | |
| # Baseado na carga crítica de flambagem do perfil de aço | |
| P_critica_N = (math.pi**2 * tripe["material_E_MPa"] * tripe["perfil_Iy_mm4"]) / (tripe["comprimento_perna_m"] * 1000)**2 | |
| # Força de projeto (Carga de trabalho * Fator de Segurança) | |
| P_projeto_N = tripe["capacidade_max_kg"] * 9.81 * 4.0 # FS = 4.0 | |
| # A força de compressão na perna é C = P_projeto / (3 * cos(theta)) | |
| # Para segurança, C <= P_critica. Logo, cos(theta) >= P_projeto / (3 * P_critica) | |
| if (3 * P_critica_N) > P_projeto_N: | |
| cos_theta_min = P_projeto_N / (3 * P_critica_N) | |
| theta_max_rad = math.acos(cos_theta_min) | |
| theta_max_graus = math.degrees(theta_max_rad) | |
| analise["abertura_max_graus"] = f"{theta_max_graus:.2f} graus (com a vertical)" | |
| else: | |
| analise["abertura_max_graus"] = "Inviável. A força de projeto excede a resistência à flambagem mesmo a 0 graus." | |
| return analise | |
| # --- DADOS DE ENTRADA PARA SIMULAÇÃO --- | |
| # Altere estes valores para testar diferentes cenários | |
| # Cenário 1: Operação Viável | |
| veiculo_exemplo_1 = { | |
| "modelo": "Pickup Média", | |
| "capacidade_carga_kg": 1100, | |
| "cacamba_comprimento_m": 1.5, | |
| "cacamba_largura_m": 1.2, | |
| "altura_piso_cacamba_m": 0.9 | |
| } | |
| carga_exemplo_1 = { | |
| "descricao": "Motor Industrial Pequeno", | |
| "peso_kg": 750, | |
| "comprimento_m": 1.0, | |
| "largura_m": 0.8, | |
| "altura_m": 0.9 | |
| } | |
| # Cenário 2: Operação Não Viável (Carga muito pesada e larga) | |
| veiculo_exemplo_2 = veiculo_exemplo_1 | |
| carga_exemplo_2 = { | |
| "descricao": "Gerador Grande", | |
| "peso_kg": 1200, | |
| "comprimento_m": 1.4, | |
| "largura_m": 1.4, | |
| "altura_m": 1.1 | |
| } | |
| # --- EXECUÇÃO E APRESENTAÇÃO DOS RESULTADOS --- | |
| def imprimir_relatorio(cenario_nome, veiculo, carga): | |
| resultado = analisar_viabilidade_icamento(veiculo, carga) | |
| print("\n" + "="*60) | |
| print(f"RELATÓRIO DE ANÁLISE DE IÇAMENTO - {cenario_nome.upper()}") | |
| print("="*60) | |
| print("\n--- PARÂMETROS DE ENTRADA ---") | |
| print(f"Veículo: {veiculo['modelo']}") | |
| print(f" - Capacidade: {veiculo['capacidade_carga_kg']} kg") | |
| print(f" - Caçamba: {veiculo['cacamba_comprimento_m']}m x {veiculo['cacamba_largura_m']}m") | |
| print(f" - Altura da Caçamba: {veiculo['altura_piso_cacamba_m']}m") | |
| print(f"Carga: {carga['descricao']}") | |
| print(f" - Peso: {carga['peso_kg']} kg") | |
| print(f" - Dimensões: {carga['comprimento_m']}m x {carga['largura_m']}m x {carga['altura_m']}m") | |
| print("\n--- RESULTADO DA ANÁLISE ---") | |
| status = "VIÁVEL" if resultado["viabilidade_geral"] else "NÃO VIÁVEL" | |
| print(f"Status Geral da Operação: {status}") | |
| print("\n--- DETALHAMENTO (ENUMERADORES DE VIABILIDADE) ---") | |
| for justificativa in resultado["justificativas"]: | |
| print(f" - {justificativa}") | |
| print("\n--- CÁLCULOS ADICIONAIS DE ENGENHARIA ---") | |
| print(f"1. Altura Máxima Possível para Elevar a Carga: {resultado['altura_max_elevacao']}") | |
| print(f"2. Abertura Máxima Segura do Tripé (Ângulo por Perna): {resultado['abertura_max_graus']}") | |
| print("="*60) | |
| # Executa e imprime os relatórios para os dois cenários | |
| imprimir_relatorio("Cenário 1: Operação Viável", veiculo_exemplo_1, carga_exemplo_1) | |
| imprimir_relatorio("Cenário 2: Operação Não Viável", veiculo_exemplo_2, carga_exemplo_2) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment