0% encontró este documento útil (0 votos)
20 vistas13 páginas

Calculadora de Protecciones en Android

El documento describe el desarrollo de una aplicación de calculadora de protecciones utilizando Android Studio y Java. Incluye el diseño de la interfaz en XML, la lógica de la actividad principal en Java y la implementación de cálculos eléctricos para determinar la corriente de carga y el interruptor recomendado. También se mencionan las pruebas realizadas en el emulador de Android Studio.

Cargado por

tintacarlos28
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas13 páginas

Calculadora de Protecciones en Android

El documento describe el desarrollo de una aplicación de calculadora de protecciones utilizando Android Studio y Java. Incluye el diseño de la interfaz en XML, la lógica de la actividad principal en Java y la implementación de cálculos eléctricos para determinar la corriente de carga y el interruptor recomendado. También se mencionan las pruebas realizadas en el emulador de Android Studio.

Cargado por

tintacarlos28
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Aplicación con Android Studio y Java

Diseño

Activity_main.xml
[Link]
[Link]
[Link]

Pruebas en emulador de Android studio


Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>


<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/tvTitle"
android:text="Calculadora de Protecciones"
android:textSize="20sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>

<Spinner
android:id="@+id/spnPhase"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:entries="@array/phase_options"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="12dp"/>

<EditText
android:id="@+id/etPower"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Potencia (W)"
android:inputType="numberDecimal"
app:layout_constraintTop_toBottomOf="@id/spnPhase"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="12dp"/>

<EditText
android:id="@+id/etVoltage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Tensión (V)"
android:inputType="numberDecimal"
app:layout_constraintTop_toBottomOf="@id/etPower"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="8dp"/>

<EditText
android:id="@+id/etPF"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Factor de potencia (0.8 por defecto)"
android:inputType="numberDecimal"
app:layout_constraintTop_toBottomOf="@id/etVoltage"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="8dp"/>

<EditText
android:id="@+id/etDerating"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Factor corrección (ej. 1.25)"
android:inputType="numberDecimal"
app:layout_constraintTop_toBottomOf="@id/etPF"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="8dp"/>

<Button
android:id="@+id/btnCalculate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Calcular"
app:layout_constraintTop_toBottomOf="@id/etDerating"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="12dp"/>

<TextView
android:id="@+id/tvResult"
android:layout_width="0dp"
android:layout_height="0dp"
android:text=""
app:layout_constraintTop_toBottomOf="@id/btnCalculate"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="12dp"
android:padding="8dp"/>
<ScrollView xmlns:android="[Link]
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">

<!-- Aquí van tus EditText, Spinner, Button y TextView -->


</ScrollView>

</[Link]>

MainActivity
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class MainActivity extends AppCompatActivity {

private Spinner spnPhase;


private EditText etPower, etVoltage, etPF, etDerating;
private Button btnCalculate;
private TextView tvResult;
private DecimalFormat df = new DecimalFormat("#.##");

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);

// Activa modo Edge-to-Edge (diseño moderno)


[Link](this);
setContentView([Link].activity_main);

// Ajusta márgenes automáticamente según las barras del sistema


[Link](findViewById([Link]), (v,
insets) -> {
Insets systemBars =
[Link]([Link]());
[Link]([Link], [Link], [Link],
[Link]);
return insets;
});

spnPhase = findViewById([Link]);
etPower = findViewById([Link]);
etVoltage = findViewById([Link]);
etPF = findViewById([Link]);
etDerating = findViewById([Link]);
btnCalculate = findViewById([Link]);
tvResult = findViewById([Link]);

// Valores por defecto


[Link]("0.8");
[Link]("1.25");
[Link]("220");

[Link](new [Link]() {
@Override
public void onClick(View view) {
calculateAndShow();
}
});
}

private void calculateAndShow() {


String sPower = [Link]().toString().trim();
String sVoltage = [Link]().toString().trim();
String sPF = [Link]().toString().trim();
String sDer = [Link]().toString().trim();

if ([Link]() || [Link]()) {
[Link](this, "Introduce potencia (W) y tensión (V).",
Toast.LENGTH_SHORT).show();
return;
}

double power = parseDoubleSafe(sPower, 0);


double voltage = parseDoubleSafe(sVoltage, 0);
double pf = parseDoubleSafe(sPF, 0.8);
double der = parseDoubleSafe(sDer, 1.25);

boolean isThreePhase =
[Link]().toString().toLowerCase().contains("trif");

if (voltage <= 0 || power <= 0) {


[Link](this, "Potencia y tensión deben ser mayores que 0.",
Toast.LENGTH_SHORT).show();
return;
}

double loadCurrent =
[Link](power, voltage, pf, isThreePhase);
double recommendedI =
[Link](loadCurrent, der);
int suggestedBreaker =
[Link]([Link](recommendedI));

StringBuilder sb = new StringBuilder();


[Link]("Carga calculada: ").append([Link](loadCurrent)).append(" A\
n");
[Link]("Corriente recomendada (con factor
").append([Link](der)).append("): ")
.append([Link](recommendedI)).append(" A\n");
[Link]("Interruptor/Fusible sugerido (talla estándar): ")
.append(suggestedBreaker).append(" A\n\n");

[Link]("Notas:\n");
[Link]("- Ajusta el factor de corrección según normativa local
(temperatura, agrupamiento, tipo de conductor).\n");
[Link]("- Este cálculo es orientativo; verifica con norma local (p.
ej. NEC, IEC, NB777/NB1089).\n");
[Link]([Link]());
}

private double parseDoubleSafe(String s, double def) {


try {
return [Link](s);
} catch (Exception e) {
return def;
}
}
}

ProtectionCalculator
package [Link];

public class ProtectionCalculator {

public static double calculateCurrentFromPower(double power, double voltage,


double pf, boolean isThreePhase) {
if (isThreePhase) {
// Fórmula trifásica: I = P / (√3 × V × PF)
return power / ([Link](3) * voltage * pf);
} else {
// Fórmula monofásica: I = P / (V × PF)
return power / (voltage * pf);
}
}

public static double recommendedBreakerCurrent(double loadCurrent, double


derating) {
return loadCurrent * derating;
}

public static int selectStandardBreaker(double current) {


int[] standards = {6, 10, 13, 16, 20, 25, 32, 40, 50, 63, 80, 100, 125,
160, 200};
for (int val : standards) {
if (val >= current) return val;
}
return standards[[Link] - 1];
}
}

[Link]
<resources>
<string name="app_name">Protecciones</string>
<string-array name="phase_options">
<item>Monofásico</item>
<item>Trifásico</item>
</string-array>
</resources>

También podría gustarte