Elektroniczny odstraszacz kretów :D

Prezentacje projektów
ODPOWIEDZ
Awatar użytkownika
niveasoft
Posty: 1221
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Elektroniczny odstraszacz kretów :D

Post autor: niveasoft » 15 cze 2022, 17:54

Kupiłem na Alledrogo dwa odstraszacze kretów po 20zł każdy. Reklamują je tak : Żeby kret się nie przyzwyczaił częstotliwości, odstępy w czasie i długość dźwięku się zmieniają.
Wyszło na to że nic z tego nie jest prawdą. Możecie na jednym foto zobaczyć co jest w środku. Zwykły brzęczek który można kupić za 5zł więc częstotliwość dźwięku jest stała. Do tego to 404Hz a krety nie lubią wyższych częstotliwości.
Do tego jest tam zbudowany na dwóch tranzystorach najprostszy bistabilny przerzutnik tak więc i odstępy są stałe i długość dźwięku jest stała.

Na foto z psem możecie zobaczyć, że trzeba te odstraszacze uszczelnić taśmą. Ja tego nie zrobiłem za pierwszym razem i zalała mi go woda...dlatego musiałem zbudować swój moduł elektroniczny :D Krzyżyk na wieczku jest po to by go po czasie łatwiej było znaleźć w trawie ;)

Użyłem Attiny2331, chociaż wystarczyłby jakiś Tiny13, bo mam ich dużo. Jako przetwornika dźwięku użyłem głośnika z laptopa bo mam całą masę różnych starych laptopów na części a te głośniki są małe i mają obudowy.
By nie używać wzmacniacza głośnik podłączyłem na wzór D-CLASS amplifier :D

Mój odstraszacz losuje nową częstotliwość, nowy czas długości dźwięku i nowy czas przerwy. Tak by kret się nie przyzwyczaił :D
Z wartościami można poeksperymentować.

Zużycie prądu baterii jest następujące : Podczas odtwarzania dźwięku ~24mA a podczas przerwy 9uA

Baterie kiedy je wkładałem zimą miały 1,59V. Po sześciu miesiącach mają 1,48V
Niemniej rozważam wbudowanie takiego odstraszacza w lampkę solarną z akumulatorem ;)

Teraz skuteczność. Krety się wyprowadziły do sąsiadów :D
  1. 'Electronic Mole Scare Device  by BARTek
  2. $regfile = "attiny2313.dat"                                 ' the used chip
  3. $crystal = 1000000                                          ' frequency used
  4. $hwstack = 40
  5. $swstack = 0
  6. $framesize = 24
  7. $baud = 38400
  8.  
  9. Config Portd = &B0000_1100 : Portd = 255                    'D2 &D3
  10.  Sw Alias Pinb.0 : Portb = 255
  11.  
  12.  
  13. Dim Period As Word , Adc_val As Word
  14. Dim On_off As Byte , Sound_on As Byte , Sound_time As Byte , Idle_time As Byte
  15. Dim T0_ticks As Byte , 100ms As Byte
  16.  
  17. Config Timer0 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
  18.  Compare0a = 96                                             '100ms @1MHz/1024
  19.   On Compare0a Timer0_isr
  20.    Enable Compare0a
  21.  
  22.  
  23.  Set Acsr.acd                                               'disable AD
  24.  Stop Watchdog
  25.  
  26.  Enable Interrupts
  27.  
  28. Do
  29.  
  30.  If 100ms = 0 Then
  31.   100ms = 9
  32.      If Idle_time = 0 Then                                  'we reboot or its time
  33.       Sound_on = 1                                          'sound will be played
  34.       T0_ticks = 0                                          'reset time counter to be compared
  35.       Do                                                    'draw new time for pause
  36.        Idle_time = Rnd(99)                                  '99 maximum
  37.       Loop Until Idle_time > 9                              '9  minimum
  38.  
  39.      Else
  40.       Decr Idle_time                                        'countdown
  41.      End If
  42.  End If
  43.  
  44.  Do                                                         'draw freq everytime for better randomness
  45.   Period = Rnd(60)
  46.  Loop Until Period > 3
  47.  
  48.  Do
  49.   Sound_time = Rnd(30)                                      'draw period for sound
  50.  Loop Until Sound_time > 15
  51.  
  52.  
  53.  '-------[PLAYING HERE]--- (24mA)
  54.  While Sound_on = 1                                         'this flag will be cleared in ISR
  55.   Portd = &B0000_1000
  56.   Waitus Period
  57.   Portd = &B0000_0100
  58.   Waitus Period
  59.  Wend
  60.  '------------------------
  61.  Portd = 255                                                'playing end
  62.  
  63.  Config Powermode = Idle                                    'go to sleep (~9uA)
  64.  
  65. Loop
  66. End
  67.  
  68. 'ISR is needed to jump from While-Wend to measure time
  69. Timer0_isr:                                                 '100ms
  70.   If Sound_on = 1 Then
  71.     Incr T0_ticks
  72.     If T0_ticks = Sound_time Then                           'compare with drawn time
  73.      Sound_on = 0
  74.  
  75.     End If
  76.   Else
  77.      If 100ms > 0 Then Decr 100ms
  78.   End If
  79. Return
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
marekszy
Posty: 104
Rejestracja: 20 lis 2016, 20:21

Re: Elektroniczny odstraszacz kretów :D

Post autor: marekszy » 20 maja 2024, 21:51

Właśnie walczę z kretami :P
Bartek da się to wcisnąć do Attiny13 (przy kompilacji krzyczy "brak miejsca SRAM")
Awatar użytkownika
niveasoft
Posty: 1221
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Elektroniczny odstraszacz kretów :D

Post autor: niveasoft » 20 maja 2024, 22:31

Nie testowałem czy działa. Może coś trzeba jeszcze poprawić.
Tam było dużo więcej do zmiany. Tiny13 ma tylko 64B SRAM więc trzeba kombinować z Nosave żeby nie odkładał 32 rejestrów w przerwaniu. Do tego ten Tiny nie ma USART a tam pisało $baud. Do tego zmieniłem PORTD na PORTB, ale musisz sprawdzić piny.
Tny13 chodzi nie na 1MHz a na 1,2MHz albo nie na 8MHz tylko na 9,6MHz więc trzeba było przeliczyć Timer...
Zrobiłbym to szybciej, ale mi telefonami nie dają żyć nawet o tej godzinie :D
  1.     'Electronic Mole Scare Device  by BARTek
  2.     $regfile = "attiny13.dat"                               ' the used chip
  3.     $crystal = 1200000                                      ' frequency used
  4.     $hwstack = 8
  5.     $swstack = 0
  6.     $framesize = 14
  7.  
  8.     Config Portb = &B0000_1100 : Portb = 255                    'D2 &D3
  9.      'Sw Alias Pinb.0 : Portb = 255
  10.  
  11.  
  12.     Dim Period As Word , Adc_val As Word
  13.     Dim On_off As Byte , Sound_on As Byte , Sound_time As Byte , Idle_time As Byte
  14.     Dim T0_ticks As Byte , 100ms As Byte
  15.  
  16.     Config Timer0 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
  17.      Compare0a = 116                                        '100ms @1,2MHz/1024
  18.       On Compare0a Timer0_isr Nosave
  19.        Enable Compare0a
  20.  
  21.  
  22.      'Set Acsr.acd                                           'disable AD
  23.      Stop Watchdog
  24.  
  25.      Enable Interrupts
  26.  
  27.     Do
  28.  
  29.      If 100ms = 0 Then
  30.       100ms = 9
  31.          If Idle_time = 0 Then                              'we reboot or its time
  32.           Sound_on = 1                                      'sound will be played
  33.           T0_ticks = 0                                          'reset time counter to be compared
  34.           Do                                                    'draw new time for pause
  35.            Idle_time = Rnd(99)                                  '99 maximum
  36.           Loop Until Idle_time > 9                          '9  minimum
  37.  
  38.          Else
  39.           Decr Idle_time                                        'countdown
  40.          End If
  41.      End If
  42.  
  43.      Do                                                         'draw freq everytime for better randomness
  44.       Period = Rnd(60)
  45.      Loop Until Period > 3
  46.  
  47.      Do
  48.       Sound_time = Rnd(30)                                      'draw period for sound
  49.      Loop Until Sound_time > 15
  50.  
  51.  
  52.      '-------[PLAYING HERE]--- (24mA)
  53.      While Sound_on = 1                                         'this flag will be cleared in ISR
  54.       Portb = &B0000_1000
  55.       Waitus Period
  56.       Portb = &B0000_0100
  57.       Waitus Period
  58.      Wend
  59.      '------------------------
  60.      Portb = 255                                            'playing end
  61.  
  62.      Config Powermode = Idle                                    'go to sleep (~9uA)
  63.  
  64.     Loop
  65.     End
  66.  
  67.     'ISR is needed to jump from While-Wend to measure time
  68.    Timer0_isr:                                              '100ms
  69.   $asm
  70.   !PUSH R16
  71.   !PUSH R20
  72.   !PUSH R24
  73.   !PUSH R26
  74.   !IN R24, SREG
  75.   !PUSH  R24
  76.   $end asm
  77.  
  78.   '#  PUT YOUR ISR ROUTINES HERE   #
  79.   '          Tuned with NoSave Tool 1.14
  80.  
  81.       If Sound_on = 1 Then
  82.         Incr T0_ticks
  83.         If T0_ticks = Sound_time Then                           'compare with drawn time
  84.          Sound_on = 0
  85.  
  86.         End If
  87.       Else
  88.          If 100ms > 0 Then Decr 100ms
  89.       End If
  90.  
  91.   $asm
  92.   !POP  R24
  93.   !OUT SREG, R24
  94.   !POP R26
  95.   !POP R24
  96.   !POP R20
  97.   !POP R16
  98.   $end asm
  99.  
  100.  Return
marekszy
Posty: 104
Rejestracja: 20 lis 2016, 20:21

Re: Elektroniczny odstraszacz kretów :D

Post autor: marekszy » 21 maja 2024, 19:25

Kompiluje się bez problemów , jeszcze miejsce zostało :D
Jak uruchomię to dam znać.
Dzięki
marekszy
Posty: 104
Rejestracja: 20 lis 2016, 20:21

Re: Elektroniczny odstraszacz kretów :D

Post autor: marekszy » 30 maja 2024, 18:26

witam
Coś mi to nie chce ruszyć , głośnik milczy.
musiałem zmienić oscylator na 4,8MHz i COMPARE0A na 45 aby było 100ms (zdjąłem też zaznaczenie z CKDIV8 żeby nie dzieliło przez 8) ponieważ mam dostępne częstotliwości oscylatora 128kHz/4,8MHz/9,6MHz
  1. 'Electronic Mole Scare Device  by BARTek
  2.     $regfile = "attiny13.dat"                               ' the used chip
  3.     $crystal = 4800000'1200000                                      ' frequency used
  4.     $hwstack = 8
  5.     $swstack = 0
  6.     $framesize = 14
  7.  
  8.     Config Portb = &B0000_1100 : Portb = 255                    'D2 &D3
  9.      'Sw Alias Pinb.0 : Portb = 255
  10.  
  11.  
  12.     Dim Period As Word , Adc_val As Word
  13.     Dim On_off As Byte , Sound_on As Byte , Sound_time As Byte , Idle_time As Byte
  14.     Dim T0_ticks As Byte , 100ms As Byte
  15.  
  16.     Config Timer0 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
  17.      Compare0a = 45'116                                        '100ms @1,2MHz/1024
  18.       On Compare0a Timer0_isr Nosave
  19.        Enable Compare0a
  20.  
  21.  
  22.      'Set Acsr.acd                                           'disable AD
  23.      Stop Watchdog
  24.  
  25.      Enable Interrupts
  26.  
  27.     Do
  28.  
  29.      If 100ms = 0 Then
  30.       100ms = 9
  31.          If Idle_time = 0 Then                              'we reboot or its time
  32.           Sound_on = 1                                      'sound will be played
  33.           T0_ticks = 0                                          'reset time counter to be compared
  34.           Do                                                    'draw new time for pause
  35.            Idle_time = Rnd(99)                                  '99 maximum
  36.           Loop Until Idle_time > 9                          '9  minimum
  37.  
  38.          Else
  39.           Decr Idle_time                                        'countdown
  40.          End If
  41.      End If
  42.  
  43.      Do                                                         'draw freq everytime for better randomness
  44.       Period = Rnd(60)
  45.      Loop Until Period > 3
  46.  
  47.      Do
  48.       Sound_time = Rnd(30)                                      'draw period for sound
  49.      Loop Until Sound_time > 15
  50.  
  51.  
  52.      '-------[PLAYING HERE]--- (24mA)
  53.      While Sound_on = 1                                         'this flag will be cleared in ISR
  54.       Portb = &B0000_1000
  55.       Waitus Period
  56.       Portb = &B0000_0100
  57.       Waitus Period
  58.      Wend
  59.      '------------------------
  60.      Portb = 255                                            'playing end
  61.  
  62.      Config Powermode = Idle                                    'go to sleep (~9uA)
  63.  
  64.     Loop
  65.     End
  66.  
  67.     'ISR is needed to jump from While-Wend to measure time
  68.    Timer0_isr:                                              '100ms
  69.   $asm
  70.   !PUSH R16
  71.   !PUSH R20
  72.   !PUSH R24
  73.   !PUSH R26
  74.   !IN R24, SREG
  75.   !PUSH  R24
  76.   $end asm
  77.  
  78.   '#  PUT YOUR ISR ROUTINES HERE   #
  79.   '          Tuned with NoSave Tool 1.14
  80.  
  81.       If Sound_on = 1 Then
  82.         Incr T0_ticks
  83.         If T0_ticks = Sound_time Then                           'compare with drawn time
  84.          Sound_on = 0
  85.  
  86.         End If
  87.       Else
  88.          If 100ms > 0 Then Decr 100ms
  89.       End If
  90.  
  91.   $asm
  92.   !POP  R24
  93.   !OUT SREG, R24
  94.   !POP R26
  95.   !POP R24
  96.   !POP R20
  97.   !POP R16
  98.   $end asm
  99.  
  100.  Return
zajęte jest 64%
marekszy
Posty: 104
Rejestracja: 20 lis 2016, 20:21

Re: Elektroniczny odstraszacz kretów :D

Post autor: marekszy » 04 cze 2024, 0:16

Bartek zerknij proszę jak znajdziesz chwilę
Awatar użytkownika
niveasoft
Posty: 1221
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Elektroniczny odstraszacz kretów :D

Post autor: niveasoft » 04 cze 2024, 6:41

Normalnie 9,6MHz z CKDIV8 daje 1,2MHz
Powiedz mi jak chcesz osiagnać 100ms przy zegarze 4,8MHz na timerze osmiobitowym który liczy do 255?
Jeśli już przy 1,2MHz i maksymalnym preskalerze to już musiało być prawie połowa timera to maksymalnie mozna było podnieść taktowanie do 2,4MHz żeby to się w timerze zmieściło a wiadomo że tam takiego taktowania nie ma.
Głośnik ma być podłączony bezposrednio do pinów PB2 i PB3 bez żadnej masy. To jest rozwiazane trochę jak wzmacniacz klasy D żeby miało wiecej siły i odwraca polaryzację raz wypychając a raz wciagając głośnik.
Widze że chyba mozna oszczędzić jeszcze dwa bajty bo tu zmienna ADC_val nigdzie się nie przyda a moze sie przydac do ramki albo stosu.
Jak znajdę chwile to wrzucę to na moje Tiny13.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1221
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Elektroniczny odstraszacz kretów :D

Post autor: niveasoft » 04 cze 2024, 10:13

Sprawdziłem plik który przesłałem wcześniej. Wszystko zadziałało od strzała.

Link do wideo ->

(Przy okazji zainstalowałem dziś na forum rozszerzenie do umieszczania wideo)
marekszy
Posty: 104
Rejestracja: 20 lis 2016, 20:21

Re: Elektroniczny odstraszacz kretów :D

Post autor: marekszy » 04 cze 2024, 11:13

Dzięki za odpowiedź , zobaczyłem filmik i uwierzyłem 😁, w kalkulatorze przez pomyłkę zapomniałem wpisać jednego zera dla tego mi pokazało to co wyszło , pomyliłem na płytce piny głośnika (podpiąłem pod B3/B4) , mała zmiana w programie i już działa
Dzięki za pomoc
ODPOWIEDZ