Wasseralarm mit einem attiy13

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Wasseralarm mit einem attiy13

      Aus gegebenen Anlass bräuchte ich mehrere Wasseralarmgeräte. Ich meine damit ein Teil, dass bei einer feucht werdenden Oberfläche, wo es drauf steht, Alarm gibt.
      Ich plane das mit einem attiny13a, der alle paar Minuten aus powerdown erwacht, einen kurzen 'ich arbeite Blitz' absondert, eine Widerstandsmessung ausführt und bei unterschreiten eines Wertes per Piezo-Plättchen Radau macht. Gibt es keinen Grund dazu, soll das Teil seine Batterieversorgung (3V, 2xAA Batterien) messen und bei drohender Leere Radau machen. Wenn alles passt, dann halt wieder powerdown.
      Jetzt meine Fragen:
      Das Piezoplättchen kann man doch direkt zwischen pin und gnd hin anschließen? Der Ton entsteht durch den sound-Befehl, also laden und entladen des Piezos.
      Da ich mit interner Vref von 1,1V arbeite und als Fühler einfach das Gehäuse auf 3 Beinchen stellen will, wobei ein Bein adc-in ist, das zweite VCC und das dritte isoliert ist, kann am adc-in eine höhere Spannung als 1,1V anliegen. Das macht doch nix, als Ergebnis kommt halt für alle Spannungen über 1,1V 1023 raus, oder?

      Die Batteriespannungsmessung will ich nach diesem Muster machen:
      Vcc messen
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Das Piezoplättchen kann man doch direkt zwischen pin und gnd hin anschließen? Der Ton entsteht durch den sound-Befehl, also laden und entladen des Piezos.
      ein Kondensator in Reihe lässt am Speaker (Piezo) Wechselspannung anliegen, was am Ende lauter ist bei gleicher Energie. Alternativ 2 Pins wechselseitig toggeln.

      tschoeatsch schrieb:

      wobei ein Bein adc-in ist, das zweite VCC und das dritte isoliert ist, kann am adc-in eine höhere Spannung als 1,1V anliegen.
      das wäre mir zu undefiniert, was ist bei Kriechströmen oder "Elektrosmog"?

      tschoeatsch schrieb:

      Das macht doch nix, als Ergebnis kommt halt für alle Spannungen über 1,1V 1023 raus, oder?
      ja, genauso isses. Die Spannung darf halt nicht über Vcc gehen.
    • Michael schrieb:

      das wäre mir zu undefiniert, was ist bei Kriechströmen oder "Elektrosmog"?
      Kriechstrom käme dann wohl durch Feuchtigkeit, soll ja erkannt werden. Wie könnte man es definieren, mit 500k vom Eingang zu Gnd, oder den weiter entfernten, 3. Fuß an gnd legen?

      Ich hab' auch was falsches geschrieben, Vref ist ja VCC.


      Michael schrieb:

      ein Kondensator in Reihe lässt am Speaker (Piezo) Wechselspannung anliegen, was am Ende lauter ist bei gleicher Energie.
      gut zu wissen, danke.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Die Berechnung ADC 1.1V Referenz sollte so hier sein.

      BASCOM-Quellcode

      1. Adc_result = Getadc(14) 'Dummy Messung auf MUX Kanal 14, der internen Bandgap Referenzspannung (1.1V)
      2. Waitms 1 'Stabilisierungszeit für Bandgap Spannung
      3. Adc_result = Getadc(14) 'Mit gültiger Messung die erste Messung verwerfen
      4. Supply_voltage = 1126.4 / Adc_result 'Errechnen von Vcc (1024*1.1/ADC)
      5. Wait 1 'Verlangsamung der Loop zur Betrachtung der Meßwerte
      6. If Adc_result >= 363 Then
      7. 'If Supply_voltage <= 3.10 Then 'Schalten bei 3.1Volt
    • @ftelektro genau, bei config adc wird als Reference = AVCC angegeben.
      Nur, dass ich in den attiny13 keine single-Verarbeitung mehr unterbringe. Ich mach das einfach mit words und dem 10fachen Ergebnis. Bislang bin ich jetzt bei diesem code, ohne ihn aber probiert zu haben.

      BASCOM-Quellcode

      1. 'Wasseralarm
      2. $regfile = "attiny13a.dat"
      3. $crystal = 1200000
      4. $hwstack = 10
      5. $swstack = 0
      6. $framesize = 10
      7. Config Adc = Single , Prescaler = Auto , Reference = Avcc '2x 1,5V
      8. Config Portb.3 = Input 'ADC-Messpunkt
      9. Config Portb.4 = Output 'Piezo
      10. Piezo Alias Portb.4
      11. Config Portb.1 = Output 'Led
      12. Led Alias Portb.1
      13. Config Watchdog = 8192 '8 Sekunden
      14. On Wdt Wdt_isr
      15. Enable Wdt
      16. Enable Interrupts
      17. Dim Messung As Word 'adc-Messung
      18. Dim Supply_voltage As Word
      19. Dim Zaehler As Byte 'Zähler in der isr, um längere Zeiten zu erzielen
      20. Stop Ac 'Analogkomparator ausschalten
      21. Do
      22. If Zaehler = 0 Then
      23. Zaehler = 5
      24. Start Adc
      25. Led = 1 'Led-Blitz
      26. Waitms 50
      27. Led = 0
      28. Messung = Getadc(3) 'Bodenwiderstand messen
      29. If Messung > 50 Then Gosub Wasseralarm
      30. Messung = Getadc(14) 'dummy
      31. Waitms 10
      32. Messung = Getadc(14) 'Vref messen
      33. Supply_voltage = 11264 / Messung 'Errechnen von Vcc (1024*1.1/ADC) hier 10facher Wert
      34. If Supply_voltage < 20 Then Gosub Batteriealarm
      35. Stop Adc
      36. Reset Watchdog
      37. Power Powerdown
      38. End If
      39. Loop
      40. End
      41. Wdt_isr:
      42. If Zaehler > 0 Then Decr Zaehler
      43. Return
      44. Wasseralarm:
      45. Sound Piezo , 100 , 4000
      46. Zaehler = 2
      47. Return
      48. Batteriealarm:
      49. Sound Piezo , 100 , 2000
      50. Zaehler = 3
      51. Return
      Alles anzeigen
      Gerade was das Piepsen betrifft, ist das jetzt alles Vermutung.
      Auch die stackwerte passen eigentlich nicht. Vielleicht sollte ich alles auf einem atmega88 laufen lassen. Da hat man dann solche Sorgen nicht. Das bisschen mehr Plastik ist hier egal.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • Hm, bei mir klappt das mit getadc(14) um die interne bandgap zu messen nicht. Zumindest nicht mit dem attiny13a, den ich verwendet hatte. X/
      Mit einem mega88p klappt es.
      Ein größeres Problem ist jetzt noch die Lautstärke des Piezos zu erhöhen. Meine haben einen D=20mm. Wenn ich da jetzt eine flache Dose mit einem Loch drum baue (wie man es häufig sieht), dann ist es immer noch dezent.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Nur für Messung wird Word benutzt.1024 bleibt gleich ,also nicht in word umrechnen.
      Der neue Code:

      BASCOM-Quellcode

      1. $regfile = "attiny13a.dat"
      2. $crystal = 1200000
      3. $hwstack = 20 'geändert
      4. $swstack = 20 'geändert
      5. $framesize = 15 'geändert
      6. Config Adc = Single , Prescaler = Auto , Reference = Avcc '2x 1,5V
      7. Config Portb.3 = Input 'ADC-Messpunkt
      8. Config Portb.4 = Output 'Piezo
      9. Piezo Alias Portb.4
      10. Config Portb.1 = Output 'Led
      11. Led Alias Portb.1
      12. Config Watchdog = 8192 '8 Sekunden
      13. On Wdt Wdt_isr
      14. Enable Wdt
      15. Enable Interrupts
      16. Dim Messung As Word 'adc-Messung
      17. Dim Supply_voltage As Word
      18. Dim Zaehler As Byte 'Zähler in der isr, um längere Zeiten zu erzielen
      19. Stop Ac 'Analogkomparator ausschalten
      20. Do
      21. If Zaehler = 0 Then
      22. Zaehler = 5
      23. Start Adc
      24. Led = 1 'Led-Blitz
      25. Waitms 50
      26. Led = 0
      27. Messung = Getadc(3) 'Bodenwiderstand messen
      28. If Messung > 50 Then Gosub Wasseralarm
      29. Messung = Getadc(14) 'dummy
      30. Waitms 10
      31. Messung = Getadc(14) 'Vref messen
      32. Supply_voltage = 1126.4 / Messung 'geändert 'Errechnen von Vcc (1024*1.1/ADC)
      33. If Supply_voltage < 751 Then Gosub Batteriealarm '= 1.5V
      34. Stop Adc
      35. Reset Watchdog
      36. Power Powerdown
      37. End If
      38. Loop
      39. End
      40. Wdt_isr:
      41. If Zaehler > 0 Then Decr Zaehler
      42. Return
      43. Wasseralarm:
      44. Sound Piezo , 100 , 4000
      45. Zaehler = 2
      46. Return
      47. Batteriealarm:
      48. Sound Piezo , 100 , 2000
      49. Zaehler = 3
      50. Return
      Alles anzeigen
    • Ich glaub' du täuscht dich.
      Sagen wir mal Vcc hat 2,0V, das wäre jetzt Vref. Gemessen wird 1,1V der bandgap und mit Vref verglichen. Der Wert aus der Messung ist also 1024/2,0V * 1,1V = 563. Das in die Formel eingesetzt
      1126,4 / 563 = 2,00V. Das Ergebnis ist also die Voltzahl. Wenn ich mit word arbeite, dann ist das mit dem 10fachen nicht so verkehrt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • @ftelektro dein Wink, den adc-Wert gleich als bat_low-Schwelle zu verwenden ist gut. Diese single-Rechnerei aus dem Beispiel ist ja nur optischer Schnickschnack. In deinem code müsste einfach in Zeile 33 nicht mit supply_voltage (diese Variable ist überflüssig) mit messung verglichen werden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------