Wer anklopft, dem wird aufgetan. So das Motto dieser Kiste. Wird auf den Deckel geklopft, erkennt das der Arduino über ein angeschlossenes Mikrofon und erteilt dem Servo das PWM Signal zum Öffnen der Kiste.
Leider sind die Bilder aus einem Video, weil meine SD Karte nicht mehr lesbar war. Die Bilder waren futsch und die Kiste schon weitergegeben.
Aber die sich selbst öffnende Kiste ist ja auch nicht schwer zu bauen. Ich habe eine fertige Holzkiste verwendet und alle benötigten Teile darin eingebaut. Oben sitzt der Servo mit einer Aluschiene am Servoarm. Das Mikrofon habe ich komplett fertig gekauft, denn für 4 Euro mache ich mir nicht die Mühe das selber zu bauen. Darunter der Arduino und die Batterie, die jetzt gerade noch außerhalb der Kiste sitzt.
Amico Replacement High Quality Arduino Mikrofon Ton Erkennung Sensor Module 5VDC
Das Soundmodul bekommt Spannung und der Analoge Ausgang wird mit dem Analogen PIN 0 des Arduino verbunden. Dieser Eingang wird nun vom Programm ständig überprüft. Ist der Eingang größer als 20, dann läuft 155 Mal ein Programm ab, das bei jedem Durchgang den Servo um 1° weiter öffnet. Natürlich könnte man den Servo auch einfach auf 155° auffahren lassen, aber das wäre nicht schön. Nach 5000 Mills schließt sich die Kiste auf die gleiche Weise wieder, nur das eben rückwärts gezählt wird. Der Servo liegt an Pin 9 an.
Servo Kistenöffner Code
Damit der Deckel auch wirklich schön aufgeht, habe ich an der Lauffläche des Servo noch etwas Plastik von einer Eisdose angebracht.
Hier der Code in der Arduino IDE
#include
int _ABVAR_1_klatsch = 0 ;
int _ABVAR_2_zaehler = 0 ;
Servo servo_pin_9;
int _ABVAR_3_a;
int _ABVAR_4_a;
void setup()
{
servo_pin_9.attach(9);
pinMode( 4 , OUTPUT);
Serial.begin(9600);
_ABVAR_1_klatsch = 0 ;
_ABVAR_2_zaehler = 0 ;
servo_pin_9.write( 0 );
}
void loop()
{
_ABVAR_1_klatsch = analogRead(0) ;
if (( ( _ABVAR_1_klatsch ) > ( 20 ) ))
{
for (_ABVAR_3_a=1; _ABVAR_3_a<= ( 155 ); ++_ABVAR_3_a )
{
digitalWrite( 4 , HIGH );
_ABVAR_2_zaehler = ( _ABVAR_2_zaehler + 1 ) ;
servo_pin_9.write( _ABVAR_2_zaehler );
delay( 30 );
Serial.print(_ABVAR_2_zaehler);
Serial.println();
}
delay( 5000 );
for (_ABVAR_4_a=1; _ABVAR_4_a<= ( 155 ); ++_ABVAR_4_a )
{
digitalWrite( 4 , HIGH );
_ABVAR_2_zaehler = ( _ABVAR_2_zaehler - 1 ) ;
servo_pin_9.write( _ABVAR_2_zaehler );
delay( 25 );
Serial.print(_ABVAR_2_zaehler);
Serial.println();
}
_ABVAR_2_zaehler = 2 ;
delay( 100 );
servo_pin_9.write( _ABVAR_2_zaehler );
delay( 2000 );
digitalWrite( 4 , LOW );
}
delayMicroseconds( 1 );
}