The purpose of this device is a bit evil. Oh well, sue me. I made it as a yoke for the first of april and many more days to come.
A brief description:
The device beeps a short beep of a very annoying frequency in random times. The time between beeps is anywhere within half an hour to nine hours.
Point:
The subject of your devious device has a flat/house. Put the beeper inside the house, and when the first beep occurs, your victim will just wonder about that what was it. When it occurs again and again he will try to locate the source. After checking all cellphones, smokealarms, battery powered devices in general he will be clueless as to what is causing this. The beeping will be a mystery as long as the battery lives. Or it will drive him nuts.
Instruction:
1. Activate the device
2. Hide the device
3. Don't stay around to watch the fun.
It beeps in random. Where the time between beeps can be anything from 30minutes, to 9hours and 30minutes.
Hardware:
The hardware is boringly simple. One piezotransducer, one battery, one AVR. All packed like you choose it. Here's the schematic:
A sample of how you can make it is here:
As you can see my main point is always functionality. Not decoration. But there's a gazilion other ways you can make the device.
Firmware:
I release the firmware under GNU. In the project folder, which you can download on the bottom of the page is a precompiled hex file which worked for me.
/*
Copyright David Gustafik, 2007
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <compat/deprecated.h>
#include <stdlib.h>
/*
(to be used on first of april, or whenever in an evil mood (for me 24/7))
by David 'daqq' Gustafik
The Beeper of Madness:
Beeps a short beep of very annoying frequency in random times.
Beeps occur randomly within half an hour to nine and a half hour.
Instruction:
1. Activate the device
2. Hide the device
3. Don't stay around to watch the fun.
Point:
The subject of your devious device has a flat/house. Put the beeper
inside the house, and when the first beep occurs, your victim will
just wonder about that what was it. When it occurs again and again
he will try to locate the source. After checking all cellphones,
smokealarms, battery powered devices in general he will be clueless
as to what is causing this. The beeping will be a mystery as long
as the battery lives. Or it will drive him nuts.
WARNING: This software is provided as is without any waranties at all.
The author is not responsible for any injuries/material damage that may
arise from the usage of this software/device
README:
The hex file you received with the zip file that contained this file
is calibrated for a ATTiny2313 running on the internal oscilator @ 4MHz
and with the CKDIV8 fuse enabled. Therefore the processor is running at
500kHz.
*/
#define SERIAL_NUMBER 1
//this is the seed for the random number generator. you may either use my
//serial number (1) or recompile it (unadvised) with your own.
//defs
#define BUZZER1() {sbi(PORTB,0);cbi(PORTB,1);}
#define BUZZER0() {cbi(PORTB,0);sbi(PORTB,1);}
#define BEEP_INTERVAL 0.08
#define BEEP_LENGTH 2500
#define nop() asm volatile ("nop;")
//globals
volatile unsigned int rand_cond=0;
volatile unsigned int rand_box=0;
//functions
void beep(void);
void wait(unsigned int a);
#define _ms(x) x*45
//timer overflow interrupt. occurs each 0.5seconds.
ISR(TIMER0_OVF_vect)
{
rand_box++;
return;
}
int main(void)
{
DDRD = 0x00;
DDRB = _BV(1) | _BV(0);
ACSR=0x80;//disable power to the analog comparator
TCCR0B=0x05;
TIMSK = 0x02;
srand(SERIAL_NUMBER);
wait(_ms(100));
beep();
sei();
while(1)
{
if(rand_box==rand_cond)
{
rand_box=0;
rand_cond=rand()%(0xFFFF-1000)+1000;
beep();
}
}
}
void beep()
{
unsigned int temp;
for(temp=0;temp!=BEEP_LENGTH;temp++)//does the beeping on the piezo.
{
BUZZER0();
wait(_ms(BEEP_INTERVAL));
BUZZER1();
wait(_ms(BEEP_INTERVAL));
}
return;
}
void wait(unsigned int a)
{
unsigned int b,c;
for(b=0;b!= a; b++)for(c=0;c!= 5;c++) nop();
return;
}
The code is boringly simple. You'll need an AVR running @ 4MHz with the CKDIV8 fuse enabled. This way, the device eats only 200uA (microamps) and can last long out of a lithium battery, like the one on the pictures.This is the configuration of your fuses to run this:
Download:
Download the project folder here:
NOTE: If you make this device I ask nothing in return, just PLEASE take a photo of it and post it into my forum. That's all I ask.
Mods
A number of people built this device. Macsek, a fine guy from Hungary improved my original device by using a smaller AVR (Tiny13) and made smaller version, easier to conceal.
Here's the photo and the source:
/*
Copyright David Gustafik, 2007
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
date modified by change
---------- -------------------------- ----------------------------
2007.03.27 Macsek mmx233@gmail.com Added Tiny13 support
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <compat/deprecated.h>
#include <stdlib.h>
/*
(to be used on first of april, or whenever in an evil mood (for me 24/7))
by David 'daqq' Gustafik
The Beeper of Madness:
Beeps a short beep of very annoying frequency in random times.
Beeps occur randomly within half an hour to nine and a half hour.
Instruction:
1. Activate the device
2. Hide the device
3. Don't stay around to watch the fun.
Point:
The subject of your devious device has a flat/house. Put the beeper
inside the house, and when the first beep occurs, your victim will
just wonder about that what was it. When it occurs again and again
he will try to locate the source. After checking all cellphones,
smokealarms, battery powered devices in general he will be clueless
as to what is causing this. The beeping will be a mystery as long
as the battery lives. Or it will drive him nuts.
WARNING: This software is provided as is without any waranties at all.
The author is not responsible for any injuries/material damage that may
arise from the usage of this software/device
README:
The hex file you received with the zip file that contained this file
is calibrated for a ATTiny2313 running on the internal oscilator @ 4MHz
and with the CKDIV8 fuse enabled. Therefore the processor is running at
500kHz.
*/
//#define DEBUG
#ifdef DEBUG
// can be enabled only if DEBUG is set
#define DEBUG_ONSCREEN
#endif
#define SERIAL_NUMBER 1
//this is the seed for the random number generator. you may either use my
//serial number (1) or recompile it (unadvised) with your own.
//defs
#ifdef __AVR_ATtiny13__
#define BUZZER1() {sbi(PORTB,3);cbi(PORTB,4);}
#define BUZZER0() {cbi(PORTB,3);sbi(PORTB,4);}
#elif defined __AVR_ATtiny2313__
#define BUZZER1() {sbi(PORTB,0);cbi(PORTB,1);}
#define BUZZER0() {cbi(PORTB,0);sbi(PORTB,1);}
#endif
#define BEEP_INTERVAL 0.08
#define BEEP_LENGTH 2500
#define nop() asm volatile ("nop;")
//globals
volatile unsigned int rand_cond=0;
volatile unsigned int rand_box=0;
//function prototypes
void beep(void);
void wait(unsigned int);
void tone(unsigned int, unsigned int);
#define _ms(x) x*45
//timer overflow interrupt. occurs each 0.5seconds.
#ifdef __AVR_ATtiny13__
ISR(TIM0_OVF_vect)
#elif defined __AVR_ATtiny2313__
ISR(TIMER0_OVF_vect)
#endif
{
rand_box++;
#ifdef __AVR_ATtiny13__
// alive flashing led on timerIT
if(rand_box&1) sbi(PORTB,0); else cbi(PORTB,0);
#endif
return;
}
int main(void)
{
#ifdef __AVR_ATtiny13__
DDRB = _BV(3) | _BV(4)|_BV(0); // output on pin 2&3 so no interaction w/SPI nor RESET
ACSR = _BV(ACD); //disable power to the analog comparator
TCCR0B=_BV(CS02) | _BV(CS00); // CLK_IO/1024
TIMSK0 = _BV(TOIE0); // Timer 0 Overflow Interrupt Enable
#elif defined __AVR_ATtiny2313__
DDRD = 0x00;
DDRB = _BV(1) | _BV(0);
ACSR=0x80;//disable power to the analog comparator
TCCR0B=0x05;
TIMSK = 0x02;
#else
// other types could be tested here
DDRD = 0x00;
DDRB = _BV(1) | _BV(0);
ACSR = _BV(ACD); //disable power to the analog comparator
TCCR0B=_BV(CS02) | _BV(CS00); // CLK_IO/1024
TIMSK = _BV(TOIE0); // Timer 0 Overflow Interrupt Enable
#endif
srand(SERIAL_NUMBER);
// wait(_ms(100));
beep();
wait(_ms(1000U));
int i,j;
//for(i=)
BEEP_INTERVAL 0.08
#define BEEP_LENGTH 2500
sei();
while(1)
{
if(rand_box==rand_cond)
{
rand_box=0;
#ifdef DEBUG
rand_cond=rand_box+60; //30sec
#else
rand_cond=rand()%(0xFFFF-1000)+1000;
#endif
beep();
}
}
}
void beep()
{
unsigned int temp;
for(temp=0;temp!=BEEP_LENGTH;temp++)//does the beeping on the piezo.
{
BUZZER0();
wait(_ms(BEEP_INTERVAL));
BUZZER1();
wait(_ms(BEEP_INTERVAL));
}
return;
}
void tone(unsigned int freq, unsigned int len)
{
while(len--)
{
BUZZER0();
wait(_ms(len));
BUZZER1();
wait(_ms(len));
}
}
void wait(unsigned int a)
{
unsigned int b,c;
#ifndef DEBUG_ONSCREEN
for(b=0;b!= a; b++)
for(c=0;c!= 5;c++)
nop();
#endif
return;
}




