BuzzerTemp Notificări

  • Author: Andreea-Teodora NECULA
  • Email: andreea.necula2102@stud.acs.upb.ro
  • Master: AI

Introduction

Proiectul BuzzerTemp Notificări este o aplicație IoT construită în jurul plăcii ESP32. Aceasta are scopul de a monitoriza temperatura ambientală cu ajutorul senzorului analogic LM35. Atunci când temperatura depășește un prag prestabilit, sistemul:

  • declanșează o alertă sonoră folosind un buzzer pasiv
  • trimite o notificare către utilizator
  • vizualizare istoric în aplicația Android cu grafic

Hardware

Componente utilizate:

  • ESP32 DevKit v1 – placă de dezvoltare cu Wi-Fi și Bluetooth integrat
  • LM35 – senzor de temperatură analogic
  • Buzzer pasiv – emite semnale sonore de alertă
  • Breadboard – platformă de prototipare rapidă
Componentă ESP32 Pin (Etichetă pe placă) Descriere
LM35 – VCC 3.3V Alimentare senzor
LM35 – GND GND Masă comună
LM35 – OUT D33 Semnal analogic temperatură
Buzzer – (+) D26 Control semnal buzzer
Buzzer – (–) GND Masă

Methodology

Firebase Realtime Database

  • Trimitere și citire date ESP32 ↔ Firebase
  • Integrare cu aplicația Android

Code Snippets

Aplicatia are 2 ecrane: una pentru monitorizarea în timp real și una pentru vizualizarea istorică a temperaturilor sub formă de grafic.
Aplicația mobilă ( Kotlin Jetpack Compose) citește datele din Firebase și permite utilizatorului să:

  • vadă temperatura curentă și pragul salvat
  • actualizeze pragul
  • vizualizeze istoric temperaturi sub formă de grafic (cu MPAndroidChart)
// Citirea temperaturilor istorice din Firebase
database.child("istoric").addValueEventListener(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {
        val list = mutableListOf<Float>()
        for (child in snapshot.children) {
            child.getValue(Float::class.java)?.let { list.add(it) }
        }
        temperatures = list
    }
    override fun onCancelled(error: DatabaseError) {}
})
// Afișarea graficului cu temperaturi
@Composable
fun LineChartComponent(temperatures: List<Float>) {
    AndroidView(
        factory = { context -> LineChart(context).apply {
            description.isEnabled = false
            legend.isEnabled = false
            xAxis.labelRotationAngle = -45f
        }},
        update = { chart ->
            val entries = temperatures.mapIndexed { i, v -> Entry(i.toFloat(), v) }
            val dataSet = LineDataSet(entries, "Temperaturi").apply {
                mode = LineDataSet.Mode.CUBIC_BEZIER
                circleRadius = 4f
                lineWidth = 2f
            }
            chart.data = LineData(dataSet)
            chart.invalidate()
        },
        modifier = Modifier
            .fillMaxWidth()
            .height(300.dp)
    )
}

Arduino IDE:

1. Citire temperatură și trimitere în Firebase:

// Citire temperatura analogică
int adc = analogRead(tempPin);
float voltage = adc * 3.3 / 4095.0;
float temperatura = voltage * 100.0;

// Actualizare valoare curentă în Firebase
Firebase.RTDB.setFloat(&fbdo, "/temperatura", temperatura);

2. Salvare în istoric + control buzzer:

// Salvare temperatură în nodul /istoric cu timestamp
String timestamp = String(millis());
String pathIstoric = "/istoric/" + timestamp;
Firebase.RTDB.setFloat(&fbdo, pathIstoric.c_str(), temperatura);

// Activare buzzer dacă temperatura depășește pragul
if (temperatura > prag) {
  ledcWrite(0, 127); // buzzer activ
} else {
  ledcWrite(0, 0);   // buzzer oprit
}

Demo - steps

Pas1:

Pas2:
notiifacre_trimisa.jpeg
Pas3:

Pas4:

OBS

  1. Datele sunt salvate corect în Firebase (noduri: temperatura, prag, istoric/{timestamp})
  2. Buzzerul reacționează instant la depășirea pragului
  3. Aplicația mobilă permite control de la distanță
  4. Graficul se actualizează automat pe baza nodului istoric
  5. Proiectul demonstrează integrarea eficientă dintre hardware și software pentru un sistem de alertă termică. Este scalabil pentru aplicații smart-home, agricultură sau industrie.

Challenges

  1. Configurarea inițială a Firebase
  2. Detectarea și calibrarea precisă a temperaturii cu LM35 a necesitat testări multiple.
  3. A fost necesar un efort suplimentar pentru integrarea MPAndroidChart cu Jetpack Compose, care nu are suport direct.
  4. Au existat probleme de sincronizare între aplicația mobilă și Firebase din cauza unor delay-uri și citiri paralele.
  5. Testarea în timp real a fost dificilă fără o sursă de temperatură variabilă.

References

iothings/proiecte/2025sric/buzzertemp.txt · Last modified: 2025/05/29 00:09 by andreea.necula2102
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0