Bikey Fahrradalarmanlage

Gute preisgünstige Fahrradalarmanlage gibt es nicht. Warum also nicht einfach eine Alarmanlage selber bauen? Rund 40 Euro kosten die Bauteile für ein System auf Basis eines Arduino Mini Pro, das man per RFID aktiviert oder abstellt.

Das Konzept

Bei der Suche nach Fahrradalarmanlagen findet man entweder billigen Plunder aus Fernost oder kompliziert zu installierende und bedienende Systeme für horrendes Geld. Meine Vorstellungen von einer Fahrradalarmanlage erfüllt keine der angebotenen Lösungen. Dabei sind meine Anforderungen nicht besonders hoch: Die kompakte und kostengünstige Alarmanlage sollte sicher sein, sich unkompliziert aktivieren und ausschalten lassen sowie eine akustische und optische Warnung ausgeben. Damit man nicht ständig Batterien wechseln oder Akkus laden muss, sollte sie energiesparend arbeiten. Da es nichts Vergleichbares gibt, kommt nur ein Eigenbau in Frage. Der Arduino Mini Pro bietet dazu mit seinen vielen Anschlussmöglichkeiten sowie üppigen Programmspeicher und dynamischen Speicher für Variablen die optimale Basis. Verschiedene Module für RFID, Lageerkennung und Signalausgabe sind reichlich vorhanden und lassen sich problemlos anschließen und kombinieren. Ein Name hat das Projekt auch: Bikey, eine Kombination aus Bike für Fahrrad und Key für Schlüssel.

Bikey Komponenten

Bikey Schaltplan

Power-Schalter und Stromversorgung

Um nicht unnötig Strom zu verbrauchen, muss Bikey nur dann eingeschaltet sein, wenn die Alarmanlage benötigt wird. Ein einfacher wasser- und staubdichter Wippschalter erledigt diesen Job.

Bikey Power-Schalter

Gespeist wird die Alarmanlage über eine Powerbank im Kreditkartenformat. Das preisgünstige Modell Amazon Basics verfügt mit 2000 mAh über genügend Kapazität, um einen Arduino Mini Pro und die restlichen Komponenten mit ausreichend Strom zu versorgen. Der Stromspender liefert eine Spannung von rund 5 Volt und hält im scharf geschaltetem Zustand etwa 26 Stunden durch. Reicht das nicht, muss man einen leistungsfähigeren Akku verwenden. Aufgeladen wird die Powerbank über eine nach außen geführte Micro-USB-Buchse.

Bikey Powerbank

Scharfschalten per RFID

Bikey schaltet man mit einen RFID-Tag über einen RFID-Reader scharf, den der Arduino Mini Pro über die SPI-Outputs 10 (SS), 11 (MOSI), 12 (MISO) und 13 (SCK) sowie 9 (RST) ansteuert.

Bikey RFID-Reader

Das verwendete RFID-Modul benötigt zwingend eine Spannung von 3,3 Volt, bei 5 Volt raucht das Modul auf. Ein zwischengeschalteter 3,3-V-Spannungsregler und zwei Sieb-Kondensatoren bringen die vorhanden 5 Volt Spannung auf das gewünschte Niveau.

Bikey Spannungswandler

Das Auslesen der individuellen ID eines RFID-Tags ist etwas trickreich, weil die vier Blöcke der ID einzeln ausgelesen werden müssen. Als Tags kommen ein RFID-Schlüsselanhänger und eine RFID-Karte zum Einsatz. Falls der Tag verloren oder kaputt geht, hat man immer noch die Karte in Reserve.

Bikey RFID-Tags

Ein Relais überbrückt beim Scharfschalten den manuellen Ein-Aus-Schalter. So kann ein Dieb die Anlage nicht einfach abschalten. Nach dem Entschärfen ist die Überbrückung wieder aufgehoben und die Alarmanlage kann über den Wippschalter vom Strom getrennt werden.

Bikey Relais-Modul

Betriebszustandsanzeige

Eine RGB-LED zeigt den Betriebszustand von Bikey an. Der Arduino Mini Pro steuert die drei Grundfarben der LED über die PWM-Outputs 3, 5 und 6. Nach dem Einschalten leuchtet die RGB-LED Blau und signalisiert, dass die Anlage bereit ist und scharfgeschaltet werden kann. Beim erfolgreichen Einlesen des RFID-Tags leuchtet die LED für ein paar Sekunden Grün.

Bikey RGB-LED

Ein einfacher Piezosummer gibt zeitgleich eine Quittungstonfolge als akustisches Feedback aus. Klappt die Erkennung nicht, leuchtet die RGB-LED Rot und der Pieper gibt eine Warntonfolge aus. Das vermeidet, dass man glaubt, man hätte die Fahrradalarmanlage aktiviert, obwohl es nicht geklappt hat. Beim Deaktivieren oder dem Unterbrechen eines ausgelösten Alarms arbeiten die Anzeige und die akustischen Quittungstöne nach dem gleichen Muster.

Bikey Piezo-Summer

Sensoren und Alarmauslösung

Sobald die Anlage scharfgeschaltet ist, wird die Lage des Fahrrads im Raum über einen kombinierten Lage-Beschleunigungssensor ermittelt. Angeschlossen ist der Sensor an den beiden I2C-Bus-Anschlüssen A4 (SDA) und A5 (SCL). Darüber liest der Arduino Mini Pro die Rohdaten der Lage im dreidimensionalen Raum mehrfach aus und bildet Mittelwerte. Diese gemittelten X-, Y- und Z-Koordinaten dienen dann als Referenz. Danach liest der Arduino Mini Pro kontinuierlich die Werte des Lagesensors aus. Macht sich jemand am Fahrrad zu schaffen und verändert die Lage auch nur minimal, dann ändern sich die Werte. Übersteigt einer oder mehrere davon die Referenzwerte deutlich, dann löst der Alarm aus.

Bikey Lage-Beschleunigungssensor

Eine 5-V-Sirene gibt ein akustisches Signal mit einem Schallpegel von etwa 110 dB(A) aus. Das ist recht laut und reicht zur Abschreckung aus.

Bikey Signal-LED

Neben dem Sirenenton signalisiert eine sehr helle 10-mm-Blitz-LED mit ihrem Blinken zusätzlich einen Entwendungsversuchs des Fahrrads. Der Alarm dauert 30 Sekunden. Die Zeit orientiert sich damit an der Alarmdauer herkömmlicher Kfz-Alarmanlagen. Ist der Alarm beendet, bildet der Arduino Mini Pro neue X-, Y- und Z-Referenzwerte. Bewegt ein Dieb das Fahrrad erneut, dann löst der Alarm noch einmal aus. Eine aktive Alarmierung kann ausschließlich mit den registrierten RFID-Tags deaktiviert werden, falls man die Anlage mal versehentlich selbst ausgelöst hat.

Bikey Sirene

Einige Diebe versuchen, Fahrradalarmanlagen vorab mit Kältespray außer Gefecht zu setzen. Der Lage-Beschleunigungssenor enthält ein Temperatur-Modul. Der Arduino Mini Pro misst darüber kontinuierlich die Temperatur. Fällt sie ungewöhnlich schnell ab, dann löst der Alarm ebenfalls aus.

Das Gehäuse und Befestigung am Fahrrad

Eine Fahrradalarmanlage sollte so positioniert sein, dass man sie nicht sofort sieht. Das soll vermeiden, dass ein Dieb sie nicht vorab entfernt oder zerstört. Bei einem Fahrrad ist das kaum möglich. Prinzipiell kommt nur ein Einbau in den Rahmen in Frage. Der Rahmen fällt aber bei vielen Fahrrädern recht schmal aus. Da die Bauteile von Bikey aber etwas größer sind, habe ich darauf verzichtet. Das Verstecken ist ohnehin nicht ganz so wichtig, denn die Alarmanlage löst auch dann aus, wenn jemand versucht, sie zu entfernen.

Bikey Gehäuse

Ein einfaches Kunststoffgehäuse nimmt die einzelnen Komponenten von Bikey auf, die aus Platzgründen mit Heißkleber fixiert sind. Müssen Teile ausgetauscht werden, kann man sie einfach durch Erwärmen des Heißklebers wieder lösen.

Bikey Innenansicht

Für die Sirene, die Signal-LED, die Status-LED und den Schalter fräst man entsprechende Aussparungen in das Gehäuse ein. Damit die Sirene nicht so einfach mit einen Schraubenzieher zerstört werden kann, besitzt sie eine Schutzabdeckung, die den Schall nach außen lässt.

Bikey Außenansicht

Die Befestigung am Fahrrad erfolgt über eine Getränkehalterung für das Sattelrohr. Eine Spezialschraube verhindert, dass ein Dieb den Halter mit Standardwerkzeug abschraubt.

Bikey Fahrradhalterung

Bauteilliste der Fahrradalarmanlage Bikey

Um Bikey nachzubauen, benötigt man ein paar Bauteile. Die gibt es teuer oder billig. Um den geringen Preispunkt zu erreichen, habe ich mich für die günstige Variante entschieden und viele Teile von einem China-Versand bestellt. Die anderen Bauteile gibt es beim Elektronikhändler des Vertrauens.

  • 1 x Arduino Mini Pro (5 V)
  • 1 x RFID-Modul RC522 mit RFID-Schlüsselanhänger und RFID-Karte
  • 1 x kombinierter Lage- und Bewegungssensor mit Temperatur-Modul GY-521 mit MPU-6050
  • 1 x 1-Kanal-Relais-Modul
  • 1 x RGB-LED 3 mm
  • 1 x Blitz-LED 10 mm
  • 4 x Widerstände je nach verwendeten LEDs
  • 1 x Piezo-Summer (5 V)
  • 1 x Sirene (5 V)
  • 1 x Spannungsregler 3,3 V
  • 1 x Kondensator 100 nF
  • 1 x Kondensator 10 uF
  • 1 x Wippschalter (wasser- und staubdicht)
  • 1 x Powerbank Amazon Basic 5 V / 2000 mAh
  • 2 x Micro-USB-Buchse
  • 1 x Gehäuse
  • 1 x Halterung für Sattelstütze
  • Steckerleisten, Kabel, Schrumpfschlauch

Arduino-Sketch Bikey

Hat man Bikey wie oben beschrieben verdrahtet, dann überträgt man mit der Arduino-Software und einem USB-TTL-Adapter den folgenden Sketch auf den Arduino Mini Pro.

Bikey USB-TTL-Adapter

Eventuell reagiert der Lage-Beschleunigungssensor etwas anders, sodass man im Detail kleine Anpassungen am Code bei den Offset-Werten vornehmen muss.

#include "SPI.h"
#include "Wire.h"
#include "MFRC522.h"
#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);

const int MPU_addr=0x68;
const byte schalterbruecke=4;
const byte ledrot=6;
const byte ledgruen=5;
const byte ledblau=3;
const byte ledblitz=7;
const byte signalgeber=2;
const byte sirene=8;
const long maxalarmdauer=30000;
const float offsetmin=0.01;
const float offsetmax=1.99;
byte anhaenger_uid0=0;
byte anhaenger_uid1=0;
byte anhaenger_uid2=0;
byte anhaenger_uid3=0;
byte fehleingabe=0;
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
unsigned long letzteledblitzmillis=0;
unsigned long ledblitzintervall=300;
unsigned long letztesirenemillis=0;
unsigned long sireneintervall=1500;
float durchschnitt_acx=0;    
float durchschnitt_acy=0;
float durchschnitt_acz=0;
float durchschnitt_tmp=0;
float durchschnitt_gyx=0;
float durchschnitt_gyy=0;
float durchschnitt_gyz=0;
float letzte_temperatur=0;
boolean erster_start=true;
boolean scharf=false;
boolean alarm_verlassen=false;
boolean alarmaktiv=false;
boolean ledblitzzustand=LOW;
boolean sirenezustand=LOW;


void setup()
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode(schalterbruecke,OUTPUT);
  pinMode(ledrot,OUTPUT);
  pinMode(ledgruen,OUTPUT);
  pinMode(ledblau,OUTPUT);
  pinMode(ledblitz,OUTPUT);
  pinMode(signalgeber,OUTPUT);
  pinMode(sirene,OUTPUT);
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);
}


void led_schalten(byte rotanteil, byte gruenanteil, byte blauanteil)
{
  analogWrite(ledrot,rotanteil);
  analogWrite(ledgruen,gruenanteil);
  analogWrite(ledblau,blauanteil);
}


void ausgangsbewegungsdaten_setzen()
{
  byte i=0;
  durchschnitt_acx=0;    
  durchschnitt_acy=0;
  durchschnitt_acz=0;
  durchschnitt_tmp=0;
  durchschnitt_gyx=0;
  durchschnitt_gyy=0;
  durchschnitt_gyz=0;
  for (i=0; i<10; i++) 
    {
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x3B);
      Wire.endTransmission(false);
      Wire.requestFrom(MPU_addr,14,true);
      AcX=Wire.read()<<8|Wire.read(); 
      durchschnitt_acx=durchschnitt_acx+AcX;    
      AcY=Wire.read()<<8|Wire.read(); 
      durchschnitt_acy=durchschnitt_acy+AcY;
      AcZ=Wire.read()<<8|Wire.read();  
      durchschnitt_acz=durchschnitt_acz+AcZ;
      Tmp=Wire.read()<<8|Wire.read();  
      durchschnitt_tmp=durchschnitt_tmp+(Tmp/340.00+36.53);
      GyX=Wire.read()<<8|Wire.read();  
      durchschnitt_gyx=durchschnitt_gyx+GyX;
      GyY=Wire.read()<<8|Wire.read(); 
      durchschnitt_gyy=durchschnitt_gyy+GyY;
      GyZ=Wire.read()<<8|Wire.read();
      durchschnitt_gyz=durchschnitt_gyz+GyZ;
      delay(333);
    }
  durchschnitt_acx=durchschnitt_acx/10;
  durchschnitt_acy=durchschnitt_acy/10;
  durchschnitt_acz=durchschnitt_acz/10;
  durchschnitt_tmp=durchschnitt_tmp/10; 
  durchschnitt_gyx=durchschnitt_gyx/10;
  durchschnitt_gyy=durchschnitt_gyy/10;
  durchschnitt_gyz=durchschnitt_gyz/10;
  letzte_temperatur=durchschnitt_tmp;   
}


boolean alarm_notwendig()
{
  boolean accelerationx_ungleich=false;
  boolean accelerationy_ungleich=false;
  boolean accelerationz_ungleich=false;
  boolean gyrox_ungleich=false;
  boolean gyroy_ungleich=false;
  boolean gyroz_ungleich=false;
  boolean temperature_ungleich=false;
  
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true);
  AcX=Wire.read()<<8|Wire.read();   
  AcY=Wire.read()<<8|Wire.read(); 
  AcZ=Wire.read()<<8|Wire.read();
  Tmp=Wire.read()<<8|Wire.read();
  GyX=Wire.read()<<8|Wire.read();  
  GyY=Wire.read()<<8|Wire.read(); 
  GyZ=Wire.read()<<8|Wire.read();
  if (GyX >= 0)
    {
      if ((GyX < (durchschnitt_gyx*offsetmin)) || (GyX > (durchschnitt_gyx*offsetmax)))
        {
          gyrox_ungleich=true;
        }
      else
        {
          gyrox_ungleich=false;
        }
    }
  else
    {
      if ((GyX > (durchschnitt_gyx*offsetmin)) || (GyX < (durchschnitt_gyx*offsetmax)))
        {
          gyrox_ungleich=true;
        }
      else
        {
          gyrox_ungleich=false;
        }        
    }
  if (GyY >= 0)
    {      
      if ((GyY < (durchschnitt_gyy*offsetmin)) || (GyY > (durchschnitt_gyy*offsetmax)))
        {
          gyroy_ungleich=true;
        }
      else
        {
          gyroy_ungleich=false;
        }
    }
  else
    {
      if ((GyY > (durchschnitt_gyy*offsetmin)) || (GyY < (durchschnitt_gyy*offsetmax)))
        {
          gyroy_ungleich=true;
        }
      else
        {
          gyroy_ungleich=false;
        } 
    }
  if (GyZ >= 0)
    {       
      if ((GyZ < (durchschnitt_gyz*offsetmin)) || (GyZ > (durchschnitt_gyz*offsetmax)))
        {
          gyroz_ungleich=true;
        }
      else
        {
          gyroz_ungleich=false;
        }
    }
  else
    {
      if ((GyZ > (durchschnitt_gyz*offsetmin)) || (GyZ < (durchschnitt_gyz*offsetmax)))
        {
          gyroz_ungleich=true;
        }
      else
        {
          gyroz_ungleich=false;
        }  
    }
  if ((Tmp/340.00+36.53) < (letzte_temperatur-3))
    {   
      letzte_temperatur=Tmp/340.00+36.53;
      temperature_ungleich=true;
    }
  else
    {
      letzte_temperatur=Tmp/340.00+36.53;
      temperature_ungleich=false;
    }

  if ((gyrox_ungleich) || (gyroy_ungleich) || (gyroz_ungleich))
    {
      return(true);
    }
  else
    {

      return(false);
    }
}


void loop()
{
  if (erster_start)
    {
      digitalWrite(schalterbruecke,HIGH);
      led_schalten(0,0,255);
      erster_start=false;
    }
  if (!mfrc522.PICC_IsNewCardPresent())
    {
      if (scharf)
        {
          if (alarm_notwendig())
            {
              unsigned long alarmdauer=millis();
              while (((millis()-alarmdauer) < maxalarmdauer) && (!alarm_verlassen))
                {
                  if (mfrc522.PICC_IsNewCardPresent())
                    {
                      if (mfrc522.PICC_ReadCardSerial())
                        {
                          for (byte i=0; i ledblitzintervall) 
                    {
                      letzteledblitzmillis=millis();
                      ledblitzzustand=!ledblitzzustand;
                      digitalWrite(ledblitz,ledblitzzustand);
                    }  
                  if ((millis()-letztesirenemillis) > sireneintervall) 
                    {
                      letztesirenemillis=millis();
                      sirenezustand=!sirenezustand;
                      digitalWrite(sirene,sirenezustand);
                    }
                }
              if (alarm_verlassen)
                {    
                  alarm_verlassen=false;
                  ledblitzzustand=false;
                  digitalWrite(ledblitz,ledblitzzustand);
                  sirenezustand=false;
                  digitalWrite(sirene,sirenezustand);
                  scharf=false;
                  digitalWrite(schalterbruecke,HIGH);
                  led_schalten(0,0,255);
                  digitalWrite(signalgeber,HIGH);
                  delay(300);
                  digitalWrite(signalgeber,LOW);
                  delay(100);
                  digitalWrite(signalgeber,HIGH);
                  delay(300);
                  digitalWrite(signalgeber,LOW); 
                  ausgangsbewegungsdaten_setzen();
                } 
              else
                {
                  alarm_verlassen=false;
                  ledblitzzustand=false;
                  digitalWrite(ledblitz,ledblitzzustand);
                  sirenezustand=false;
                  digitalWrite(sirene,sirenezustand);
                  scharf=true;
                  digitalWrite(schalterbruecke,LOW);
                  led_schalten(0,255,0);
                  digitalWrite(signalgeber,HIGH);
                  delay(300);
                  digitalWrite(signalgeber,LOW);
                  delay(100);
                  digitalWrite(signalgeber,HIGH);
                  delay(300);
                  digitalWrite(signalgeber,LOW); 
                  ausgangsbewegungsdaten_setzen(); 
                  led_schalten(0,0,0);                 
                }
            } 
        }
      return;
    }
  if (!mfrc522.PICC_ReadCardSerial())
    {
      return;
    }
  for (byte i=0; i < mfrc522.uid.size; i++)
    {
      switch(i) 
        {
          case 0: anhaenger_uid0=mfrc522.uid.uidByte[i]; break;
          case 1: anhaenger_uid1=mfrc522.uid.uidByte[i]; break;
          case 2: anhaenger_uid2=mfrc522.uid.uidByte[i]; break;
          case 3: anhaenger_uid3=mfrc522.uid.uidByte[i]; break;
          default: break;
        }
    }
  if (fehleingabe<=5)
    {  
      if (((anhaenger_uid0==164) && (anhaenger_uid1==103) && (anhaenger_uid2==158) && (anhaenger_uid3==187)) || ((anhaenger_uid0==67) && (anhaenger_uid1==144) && (anhaenger_uid2==215) && (anhaenger_uid3==0)))
        {
          fehleingabe=0;
          digitalWrite(signalgeber,HIGH);
          delay(300);
          digitalWrite(signalgeber,LOW);
          delay(100);
          digitalWrite(signalgeber,HIGH);
          delay(300);
          digitalWrite(signalgeber,LOW);    
          if (!scharf)
            {
              scharf=true;
              digitalWrite(schalterbruecke,LOW);
              led_schalten(0,255,0);
              ausgangsbewegungsdaten_setzen();
            }
          else
            {
              scharf=false;
              digitalWrite(schalterbruecke,HIGH);
              led_schalten(0,0,255);
              delay(3000);
            }
          led_schalten(0,0,0);
        }
      else
        {
          fehleingabe++;
          led_schalten(255,0,0);
          digitalWrite(signalgeber,HIGH);
          delay(1000);
          digitalWrite(signalgeber,LOW); 
          delay(3000);
          led_schalten(255,0,0);
        }
    } 
  else   
    {
      fehleingabe=0;
      led_schalten(255,0,0);
      digitalWrite(signalgeber,HIGH);
      delay(1000);
      digitalWrite(signalgeber,LOW);
      delay(1000);
      digitalWrite(signalgeber,HIGH);
      delay(1000);
      digitalWrite(signalgeber,LOW); 
      delay(15000);
      led_schalten(255,0,0);
    }
}

Fazit

Bikey ist in wenigen Stunden aufgebaut. Die Elektronik ist schnell verdrahtet, das Gehäuse ohne großen Aufwand mit Löchern versehen und der Arduino-Sketch flott programmiert.

Bikey Fahrradbefestigung

Wer Bikey nachbauen und Verbesserungsvorschläge zum Sketch machen möchte, der kann das gerne per Kommentar unter dem Artikel tun. Vielleicht wird die Fahrradalarmanlage dann noch etwas sicherer. Das Gewissen beruhigt sie aber jetzt auch schon ganz gut.

59 Kommentare

  1. Hallo, cooles Projekt und schöne Bauanleitung. Was ist das für ein Bewegungssensor?

  2. Author

    Hi Stephan,

    das ist ein GY-521 mit MPU-6050 Sensor für Beschleunigung und Gyro.

    Viele Grüße
    Oliver

  3. Interessantes System. Jetzt muss das nur noch „versteckbar“ werden. Ist zu offensichtlich am Fahrrad zu sehen. Vielleicht hat einer eine Idee, wie man es kleiner bauen kann.

    1. Hi!

      Im Camping-Zubehör gibt es Nachbauten von Getränke~ und anderen Dosen als Mini-Tresor. Sofern das von den größten Maßen her passt evtl. eine Option – Evtl. kann man ja auch bei bereits existiereden Alarm-Anlagen für Motorräder „peepen/pimpen“. Wenn es denn um eine Vandalismus-sichere Lösung geht…

      Wenn es ums unsichtbar/unauffällig machen, könnte ja auch eine Akku-A
      trappe vom e-Bike herhalten (sichere, verdeckte Anbringung) oder eine Rahmen-Dreiecktasche. MMn sollte die Absicherung von aussen schon erkennbar sein, aber so, dass sie keine „Spassvögel/Tester“ anlockt. Rahmenaufkleber?

      Coole DIY-Anleitung 10³-Dank!

    2. Author

      Hallo zusammen,

      momentan bin ich dabei, mir ein Gehäuse zu konstruieren, dass sich nahtlos in das Rahmendesign des Fahrrads einfügt. Ich werde mir das Gehäuse dann in ABS ausdrucken, sobald mein 3D-Drucker da ist. Wird leider wohl noch zwei Wochen dauern… Ich werde dann darüber berichten.

      1. Hi Oliver, Top-Projekt und eine tolle Beschreibung. Nur mal aus Neugier: Welchen 3D-Drucker hast du dir bestellt? Bin gerade auf der Suche nach einem Einsteigermodell und suche schon eine ganze Weile. Ich wollte aber nicht mehr als 400 ausgeben. Sollte halt nicht so sein, dass ich erst lange rumbauen muss, bis das Teil ordentlich läuft. Bin gespannt, für was du dich entschieden hast.

        1. Author

          Hallo Joni,

          es ist ein Creality CR-10. Bei Gearbest gab es ihn vor ein paar Tagen für knapp 340 Euro. Mir war wichtig, dass der Printer eine gute Druckqualität liefert und nicht allzu viele Modifikationen benötigt, um zu funktionieren. Dazu kommt der Sicherheitsaspekt. Die beliebten günstigen Drucker wie Anet A8 oder Tevo Tarantula besitzen beispielsweise Netzteile, die den Benutzer unter Strom setzen können. Der CR-10 soll ein sehr gut abgesichertes Netzteil besitzen. Das ist auch nicht ganz unwichtig, wenn man bedenkt, dass so ein Drucker einige Stunden am Stück druckt. Ich berichte, wenn ich ihn habe.

          Im Web findest du massenhaft Unboxings und Tests zum CR-10. Auf YouTube kann man den Drucker in action sehen und einen Eindruck von der Druckqualität bekommen.

          1. Danke für den Tip. Ich habe mir ein paar Videos zum Drucker angesehen. Sieht ja vielversprechend aus, ist für mich aber noch etwas zu teuer.

  4. Ja, super Projekt.
    Wie funktioniert das mit dem Spannungswandler 5V –> 3,3V.
    Was sind das für Bauteile?

    1. Author

      Hi Konrad,

      ein Festspannungsregler sorgt dafür, dass die Spannungsdifferenz zwischen Eingangsspannung und erforderlicher Ausgangsspannung unabhängig vom fließenden Strom an ihm abfällt und konstant ausfällt. Über die Ansteuerung eines internen Leistungstransistors wird der Strom erhöht oder verringert und darüber die gewünschte Ausgangsspannung erzielt. Da der RFID-Leser 3,3 Volt benötigt, der Arduino Mini Pro aber nur 5 Volt Ausgangsspannung liefert, muss die Spannung runtergeregelt werden. Einen passenden Spannungsregler findest du beispielsweise bei Conrad (https://www.conrad.de/de/spannungsregler-linear-stmicroelectronics-ld1117v33c-to-220ab-positiv-fest-800-ma-1184974.html). In dem Datenblatt (http://www.produktinfo.conrad.com/datenblaetter/1100000-1199999/001184974-da-01-en-IC_REG_LDO_3_3V_LD1117V33C_TO_220_3_STM.pdf) ist auch eine passende Schaltung mit zwei Tantal-Kondensatoren von 10 uF und 100 nF angegeben, damit der Regler stabil arbeiten kann. Die Kondensatoren bekommst du ebenfalls bei Conrad.

      Viele Grüße
      Oliver

      1. Super, danke. Solche Spannungsregler habe ich noch gesucht.
        Warum bruacht man noch die Kondensatoren? Ginge es nicht auch ohne?

        1. Author

          Die Kondensatoren sorgen dafür, dass die Schaltung nicht anfängt zu schwingen. Deshalb: nie ohne.

          1. Danke, jetzt hab ich es verstanden.

  5. Um die Sicherheit zu erhöhen könnte man einen Lichtsensor und einen Druckschalter in das Gehäuse ein setzen. So könnte sichergestellt werdend das niemand unbefugt das Gehäuse öffnet oder versucht per Endoskop vorzugehen. Weiterhin könnte man unter die Halterung einen Kupferlackdraht ziehen. Dieser müsste dann überwacht werden und bei Unterbrechung Alarm auslösen.

    1. Hi Rolf, brauchst du ja eigentlich nicht. Wenn die Fahrradalarmanlage nur geringfügig wackelt, dann geht sie schon los. Also auch dann, wenn jemand sie versucht aufzuschrauben.

  6. Vielen Dank für deine detaillierte und aufwendige Beschreibung.
    LG,
    ARo

  7. Hallo Oliver, ein tolles Projekt welches ich gern nachbauen würde…gibt es dafür
    auch einen Anschlussplan für die einzelnen Komponenten?

    LG
    Willi

    1. Author

      Hallo Willi,

      bisher habe ich keinen Anschlussplan angefertigt. Ich versuche, in den nächsten Tagen einen zu erstellen. Ich baue ihn dann hier ein und schicke dir eine Mail.

      Viele Grüße
      Oliver

  8. Hallo Oliver,

    vielen Dank für den Anschlussplan!

    Viele Grüße
    Willi

  9. Wie sind die Erfahrungen mit dem selbstgedruckten Gehäuse?

    1. Author

      Hallo Dieter,

      ich habe den Drucker erst seit zwei Wochen und habe mich erstmal an den Entwurf einfacher Teile mit Autodesk Fusion 360 gemacht. Das Gehäuse für Bikey dürfte etwas komplexer werden, denn es soll sich auch in die Rahmenform integrieren. Es kann also noch ein wenig dauern, bis ich das Gehäuse fertig habe.

      Viele Grüße
      Oliver

  10. Kann man das nicht irgendwie in das Sattelrohr verbauen? Ich finde den Standbydauer des Gerätes mit 26 Stunden viel zu kurz.
    Wenn ich das richtig verstehe hat die verwendete Powerbank 10Wh und das verwendete Relais verbraucht 0,36W = 27,8 Stunden. Ich könnte mir vorstellen, das man das mit einem Transistor bedeutend stromsparender gestalten könnte.
    Dann könnte man sich noch angucken wieviel der RFID-Reader im Dauerstandby an strom verbraucht und das ggf. mit einem Reedkontakt und einem Neodymmagnet dann nur bei Bedarf anschalten (oder während das Gerät bewegt wird).

  11. Hallo,
    sehr interesantes Projekt. Hat schon jemand darüber nachgedacht, alternativ oder zusätzlich zum optischen und akustischen Alarm über ein GSM-Modul einen Alarmruf / eine SMS an eine vorprogrammierte Telefonnummer zu senden?
    Wahrscheinlich geht das auf die Akkulaufzeit?
    Wie steht es um Manipulationsgefahr durch einen herbeigeführten Kurzschluss mittels eingespritzter Flüssigkeit?
    Viele Grüße
    Frank

  12. Danke für die tolle Anleitung! Funktioniert perfekt! Etwas Finetuning war bei der Empfindlichkeitseinstellung notwendig. Ich habe das ganze in ein kompaktes wasserdichtes zylinderförmiges Gehäuse gepackt.

    Gruß
    Kalle

    1. Hallo Kalle,

      wäre schön, wenn du vielleicht ein paar Fotos davon zeigen könntest, auch deine Montage am Fahrrad.
      Ich bin am überlegen wie ich das bei mir am besten realisieren könnte und bin da noch für alle Anregungen offen (…und noch komplett in der Anfangsphase, Teile ordern…)

      LG,
      Thomas

  13. Klasse Projekt. Ich denke seit zig Jahren darüber nach, was eine Alarmanlage können sollte (und hatte schon welche in Betrieb). Was mir noch fehlt:
    – Alarm geht nicht sofort an, sondern es erfolgt zuerst eine Warnmeldung „Hände weg, sonst Alarm“ (sinngemäß); oder der Signalgeber wird zuerst mit nur wenig Spannung betrieben bzw. leiser gestellt; und/oder der Ton ist am Anfang nur sehr kurz (1/10-1/20 s) und wird dann bei fortdauernder Lageänderung länger bis zu einer halben Sekunde / pulsierend
    – Alarm lässt sich so einstellen, dass er sofort deaktiviert wird, sobald die Lageänderung aufhört
    – Verzögerung einstellbar von 3-10 Sekunden (damit nicht Nachbarn genervt werden, nur weil mal jemand das Rad berührt hat)
    – Wenn der Alarm deaktiviert wird, sollte das Ganze ausgeschaltet werden, damit kein Strom verbraucht wird; erst ein Drücken des Tasters aktiviert den Alarm wieder

  14. Bei eBay gibt es auch Arduino nano Clones, die die USB-Schnittstelle für die Programmierung gleich mitbringen. Zudem haben die auch den 3V Ausgang, damit es den Lagesensor nicht himmelt. Für die Selbsthalteschaltung mit Relais stelle ich mir die Frage, ob es nicht eine stromsparende Variante mit Halbleiter oder Reed-Relais gibt. Wenn das ganze dann in ein optimiertes Gehäuse kommt, wird das eine runde Sache….

  15. Hallo Herr Bünte,
    meine Versuche, den Sketch für die Fahrradalarm-Anlage, auf den „Mini“ zu brennen, scheiterten bislang an der Menge der Fehlermeldungen. Leider behersche ich nicht das Programmieren und somit wäre das Projekt ein Fall
    für die „Tonne“. Vielleicht erlaub es ihre Zeit, nochmals einen Blick auf
    den Sketch zu werfen. Sollten sich Korrekturen notwendig machen bitte ich um einen Hinweis. Danke

    1. Author

      Hallo Jürgen,

      die Anlage wurde schon ein paar Mal erfolgreich nachgebaut und mit dem Sketch betrieben. Es wird ein Arduino Mini Pro benötigt, kein normaler Mini. Für mich hören sich viele Fehlermeldungen aber danach an, dass die notwendigen Funktionsbibliotheken nicht in die Arduino IDE eingebunden wurden.

      Viele Grüße
      Oliver

      1. Hallo Oliver, Dank für die schnelle Antwort. Hier die Fehlermeldung „zu Fuß“:

        error tray `\273`in program ….Gleiches noch für
        die Zeilen 277 und 357.

        Wo klemmt`s, bei mir oder?
        Danke für deine Bemühungen.
        Jürgen

        1. Author

          Hallo Jürgen,

          du meinst vermutlich „error: stray …“. Vermutlich hast du den Code von der Webseite direkt in die Arduino IDE kopiert. In den Zeilen mit den Fehlern könnten noch irgendwelche Steuerzeichen enthalten sein. Einfach in einem Texteditor, der solche Zeichen anzeigen kann, entfernen und wieder in die IDE kopieren. Dann sollte es mit dem Sketch klappen.

          Viele Grüße
          Oliver

          1. Hallo Oliver, danke für den Hinweis (also bin ich der „Fehler“)

  16. Hallo Oliver,
    Die realisierte Fahrradalarmanlage „leuchte“. Wie kriege ich die UID vom Chip
    ins System? Danke
    Jürgen

    1. Author

      Hallo Jürgen,

      du kannst in den Zeilen ab 252 jeweils den UID-Teil in der Konsole ausgeben lassen, indem du Serial.println(anhaenger_uidx); (x steht jeweils für 0 bis 4) an die passenden Stellen einfügst. In Zeile 259 fügst du dann die so ermittelten UID-Teile ein, in die if-Abfrage ein.

      Viele Grüße
      Oliver

      1. Hallo Oliver, danke für deine Info.
        Bin sehr erfreut über deine Hilfe.
        Wünsch ein angenehmes Pfingstfest.
        Grüße…. Jürgen

  17. Hallo Oliver,die Chip UiD konnte ausgelesen werden (20;FF;5C;83).Leider
    waren weitere Versuche,zum Einfügen in den Sketch, erfolglos.Danke im Voraus.
    Jürgen

    1. Author

      Hallo Jürgen,

      ja, das sind die Hexadezimal-Werte. In der if-Abfrage in Zeile 259 müssen aber die Werte dezimal eingetragen werden. Statt sie händisch auszurechnen, kannst du auch einfach die Ausgabe wie folgt ändern: Serial.println(anhaenger_uidx, DEC); Dann sollten sofort die Dezimal-Werte in der Konsole ausgegeben werden.

      Viele Grüße
      Oliver

      1. Hallo Oliver, hab die HEX umgerechnet in Dec (32;255;92;131).Allerdings werden in der Zeile
        259 if….8 Werte erwartet (4×100 und 4×200
        sind dort eingetragen).Und nun? Danke für deine Antwort……Jürgen

  18. Hallo Oliver,
    muß nun nochmals um deine Hilfe bitten.Nach dem Eintrag
    der Dezimalwerte, sowohl des Cips, als auch der Karte, in die if-Zeile, werden beide Teile nicht erkannt (rote LED) leuchtet.
    Welchen Fehler mache ich ? Danke….Jürgen

    1. Author

      Hallo Jürgen,

      da kann ich dir leider nicht helfen, weil es auch eine Hardware-Sache sein kann.

      Viele Grüße
      Oliver

  19. Hallo Oliver,
    danke für deine bisherige Hilfe
    Jürgen

  20. Hi Oliver,

    tolles Projekt! Ich wuerde es gerne nachbauen.

    Kannst Du bitte auflisten, welche Bauteile Du exakt verwendet hast? So als eine Art Einkaufsliste?
    Ich bin nicht so tief in der Materie. Das Zusammenbauen und den Sketch selbst anpassen wuerde ich mir dann wieder selbst zutrauen.

    Gruesse

    Tom

    1. Author

      Hallo Tom,

      prinzipiell steht alles in der Liste. LEDs, Widerstände, Piezo-Summer müssen nach Bedarf gekauft werden. Denn die Vorwiderstände müssen den Specs der LEDs entsprechend berechnet werden. Bei der Sirene muss man gegebenenfalls schauen, was gerade angeboten wird (Spannung und Stromaufnahme beachten). Die Sirene, die ich verwendet habe, gibt es beispielsweise momentan nicht mehr.

      Ich rate davon ab, irgendetwas zusammenbasteln zu wollen, wenn man nicht genau weißt, was man tut. Das sorgt nur für Frust, wenn man dann ein Problem nicht selbst lösen kann oder irgendetwas abraucht.

      Viele Grüße
      Oliver

      1. Hi Oliver,

        danke fuer die Antwort! 🙂
        Das krieg ich dann schon hin.

        Ich weiss zwar (noch) nicht genau was ich tue (bin beruflich SW-Entwickler und kein Elektroniker) aber „learning by doing“ ist auch ganz nett. Es ist noch kein Meister vom Himmel gefallen… aber ich moechte mich ja weiterbilden und das Erfolgserlebnis ist dann um so groesser 😉

        Sonnige Gruesse
        Tom

  21. Vielen Dank für den interessanten Beitrag. Ich fange gerade an, ArDuino zu lernen. Ich suche im Moment Projekte, die nicht zu kompliziert sind. Die Alarmanlage für Fahrrad finde ich toll! Ich habe gelesen, dass Du mit dem Gehäuse noch gearbeitet hast. Gibt es neues Update dafür?

    1. Author

      Hi Fabian,

      ich habe mittlerweile eine neue Version am Start. Die Authentifizierung erfolgt dann nicht über RFID sondern über ein über Bluetooth-gekoppeltes Smartphone. Die Software ist aber noch nicht optimal… Für die ältere Version habe ich kein Gehäuse mehr entworfen.

      Viele Grüße
      Oliver

  22. Hallo Oliver,

    Ein wirklich tolles Projekt.

    Mich würde interessieren wie ich denn die Empfindlichkeit noch verändern kann?
    Habe bereits an den Offset Werten rumgeschraubt, jedoch ohne Erfolg.
    Hätte es gerne deutlich unempfindlicher.

    Viele Grüße
    Stephan

    1. Author

      Hallo Stephan,

      mit der Änderung von offsetmin und offsetmax lässt sich die Empfindlichkeit bis zu einem gewissen Grad einstellen. Eine andere Möglichkeit sehe ich leider nicht. Ich hoffe, du findest noch die richtige Einstellung.

      Beste Grüße
      Oliver

      1. Danke für die schnelle Antwort.
        In welche Richtung sollte den welcher Wert gehen um die Empfindlichkeit zu minimieren?
        offsetmin +/- und um wieviel am besten
        offsetmax +/-
        und um wieviel maximal

        Gruß
        Stephan

  23. offsetmin und offsetmax sind als Faktoren für die Durchschnittswerte verwendet worden. Bei Durchschnittswerten nahe 0 führt das zu keinen brauchbaren Empfindlichkeiten. Ein Offset sollte deshalb nicht als Faktor, sondern zum Durchschnittswert addiert bzw. subtrahiert werden (z.B. 700).
    Damit läßt sich die Empfindlichkeit besser einstellen.

  24. Super Sache, was ihr da entwickelt habt. Vielleicht kann man so ein Ding in das Sattelrohr einbauen.
    Es gibt eine Alarmanlage für das Sattelrohr, aber leider mit GSM.
    Was ich gut finde ist, dass die Alarmanlage nur bei Nutzung strom verbraucht.

  25. Hi, super projekt.
    Wollte mich grad dran machen das Ganze mal nachzubauen,
    kann es sein dass beim SourceCode der letzte Teil abgeschnitten wurde?
    Bzw gibts den sonst wo runterzuladen?
    Danke, lg Thomas

    1. Author

      Hallo Thomas,

      danke dir! Code ist gefixt und sollte jetzt komplett sichtbar sein.

      Viele Grüße
      Oliver

      1. Perfekt.
        Vielen Dank für die schnelle Rückmeldung und Behebung.
        Ich werde dann bei Gelegenheit mal über den Fortschritt berichten.
        lg Thomas

  26. Hallo Herr Bünte,
    wollt gerne ihr Projekt nachbauen ,aber der Arduino Pro Mini ist nicht mehr erhältlich kann man auch einen No-Name Arduino kaufen ?
    Lg. Fritz

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert