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 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
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ł
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
- 'Electronic Mole Scare Device by BARTek
- $regfile = "attiny2313.dat" ' the used chip
- $crystal = 1000000 ' frequency used
- $hwstack = 40
- $swstack = 0
- $framesize = 24
- $baud = 38400
- Config Portd = &B0000_1100 : Portd = 255 'D2 &D3
- Sw Alias Pinb.0 : Portb = 255
- Dim Period As Word , Adc_val As Word
- Dim On_off As Byte , Sound_on As Byte , Sound_time As Byte , Idle_time As Byte
- Dim T0_ticks As Byte , 100ms As Byte
- Config Timer0 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
- Compare0a = 96 '100ms @1MHz/1024
- On Compare0a Timer0_isr
- Enable Compare0a
- Set Acsr.acd 'disable AD
- Stop Watchdog
- Enable Interrupts
- Do
- If 100ms = 0 Then
- 100ms = 9
- If Idle_time = 0 Then 'we reboot or its time
- Sound_on = 1 'sound will be played
- T0_ticks = 0 'reset time counter to be compared
- Do 'draw new time for pause
- Idle_time = Rnd(99) '99 maximum
- Loop Until Idle_time > 9 '9 minimum
- Else
- Decr Idle_time 'countdown
- End If
- End If
- Do 'draw freq everytime for better randomness
- Period = Rnd(60)
- Loop Until Period > 3
- Do
- Sound_time = Rnd(30) 'draw period for sound
- Loop Until Sound_time > 15
- '-------[PLAYING HERE]--- (24mA)
- While Sound_on = 1 'this flag will be cleared in ISR
- Portd = &B0000_1000
- Waitus Period
- Portd = &B0000_0100
- Waitus Period
- Wend
- '------------------------
- Portd = 255 'playing end
- Config Powermode = Idle 'go to sleep (~9uA)
- Loop
- End
- 'ISR is needed to jump from While-Wend to measure time
- Timer0_isr: '100ms
- If Sound_on = 1 Then
- Incr T0_ticks
- If T0_ticks = Sound_time Then 'compare with drawn time
- Sound_on = 0
- End If
- Else
- If 100ms > 0 Then Decr 100ms
- End If
- Return