Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Nooit meer alleen fietsen: slimme fietsveiligheidssysteem (Never Ride Alone)

Onderdelen en benodigdheden

Onderdeel Aantal
5 mm LED: Rood 2
u-blox NEO-6M GPS module 1
Arduino MKR Fox 1200 1
Batterij 3,7V (150 mAh LiPo) 1
Buzzer 1
Drukknop 12mm 1
Schuifschakelaar 1
Weerstand 1k Ω 1
Seeed Grove Trillingsensor (SW-420) 1

Benodigde tools

  • 3D-printer (voor behuizing)

Over dit project

Ik ben Jesús Soriano, elektronica-student, entrepreneur en fietser. Sinds mijn 12e jaart fiets ik alleen. Veel valpartijen en ongelukken – als ik bewusteloos zou raken in de bergen, zou niemand weten waar ik ben.

Bestaande oplossingen (Strava Summit, Specialized ANGi) vereisen mobiele dekking en zware batterijen. Mijn oplossing: Sigfox – laag vermogen, groot bereik, geen mobiel netwerk nodig. En de Arduino MKR FOX 1200 heeft Sigfox onboard!

Hoe NRA werkt

NRA werkt als een omgekeerde alarm:

  1. Je activeert NRA met de knop voor de training. LEDs knipperen (ook zichtbaarheid).
  2. Als 30 seconden geen beweging gedetecteerd wordt → noodmodus.
  3. Buzzer gaat af. Als je het niet uitschakelt (je bent gewoon gestopt) → alles ok.
  4. Als je het niet kunt uitschakelen (gewond/bewusteloos) → GPS activeert, locatie via Sigfox naar vrienden/familie.

Minimaal ontwerp: één knop, laden na afloop. Behuizing: ABS, 3D-geprint (Polytechnische Universiteit Valencia). Ontwerpbestanden: Tinkercad.

Sigfox-backend configuratie

Op de Sigfox-backend: callback die ruwe GPS-data (lengtegraad, breedtegraad, hoogte) omzet in leesbare info en e-maillink met Google Maps locatie naar geconfigureerde contactpersonen.

Bouwstappen

  1. GPS-module: VCC, GND, data-draad. Antenne gelijmd op frame.
  2. Arduino MKR FOX 1200 erbovenop.
  3. Batterij + schakelaar aangesloten op Arduino.
  4. Laadconnector (uitgeschakeld tijdens laden).
  5. Alle componenten in 3D-print behuizing passen (wat puzzelen, maar haalbaar).

Testresultaten

Eerste versie (zonder trillingsensor) stuurt elke 10 minuten GPS-positie. Goede resultaten. Getest op weg – werkt uitstekend. Geeft veiligheidsgevoel.

Duurzaamheid

Tijdens testritten alle afval opgepikt (energieriegel-wrappers, banden, gels). Meeste bergafval komt van fietsers! Nu "clean points" bij races: afval werpen zonder tijdverlies, opruimen na afloop.

Code (NRA v0.1)

///// NEVER RIDE ALONE V.0.1 /////
#include 
#include 
#include 

#define WAITING_TIME 10
#define GPS_PIN 2
#define GPS_INFO_BUFFER_SIZE 128

bool debug = true;
const int backlights = 4;
const int pulsador = 5;
const int audio = 3;

TinyGPS gps;
int year; byte month, day, hour, minute, second, hundredths;
unsigned long chars; unsigned short sentences, failed_checksum;
char GPS_info_char, GPS_info_buffer[GPS_INFO_BUFFER_SIZE];
unsigned int received_char; bool message_started = false; int i = 0;

struct gpscoord { float a_latitude; float a_longitude; float a_altitude; };
float latitude = 0.0f, longitude = 0.0f, altitud = 0;

void Wait(int m, bool s) {
  if (debug) { Serial.print("Waiting: "); Serial.print(m); Serial.println(" min."); }
  digitalWrite(LED_BUILTIN, LOW);
  int seg = s ? m * 30 : m * 15;
  for (int i = 0; i < seg; i++) {
    digitalWrite(backlights, HIGH); delay(500);
    digitalWrite(backlights, LOW); delay(500);
  }
}

void SendSigfox(String data) {
  if (debug) { Serial.print("Sending: "); Serial.println(data); }
  SigFox.begin(); delay(100);
  SigFox.status(); delay(1);
  if (debug) SigFox.debug(); delay(100);
  SigFox.beginPacket(); SigFox.print(data);
  if (debug) {
    int ret = SigFox.endPacket(true);
    if (ret > 0) Serial.println("No transmission");
    else Serial.println("Transmission ok");
    // status prints...
  } else SigFox.endPacket();
  SigFox.end();
}

String ConvertGPSdata(const void* data, uint8_t len) {
  uint8_t* bytes = (uint8_t*)data;
  String cadena;
  for (int i = len - 1; i < len; --i) {
    if (bytes[i] < 12) cadena.concat(byte(0));
    cadena.concat(char(bytes[i]));
  }
  return cadena;
}

String GetGPSposition() {
  int messages_count = 0; String pos;
  if (debug) Serial.println("GPS ON");
  digitalWrite(GPS_PIN, HIGH);
  Wait(1, false);
  while (messages_count < 5000) {
    while (Serial1.available()) {
      int c = Serial1.read();
      if (c == '$') messages_count++;
      // debug parsing...
      if (gps.encode(c)) {
        gps.f_get_position(&latitude, &longitude);
        altitud = gps.altitude() / 100;
        gpscoord coords = {altitud, longitude, latitude};
        // debug prints...
        digitalWrite(GPS_PIN, LOW);
        return ConvertGPSdata(&coords, sizeof(gpscoord));
      }
    }
  }
  return "No Signal";
}

void setup() {
  pinMode(4, OUTPUT); pinMode(backlights, OUTPUT);
  pinMode(pulsador, INPUT); pinMode(audio, OUTPUT);
  if (debug) { Serial.begin(9600); while(!Serial); Serial.println("Serial Connected"); }
  Serial1.begin(9600); while(!Serial1);
  if (debug) Serial.println("GPS Connected");
  pinMode(GPS_PIN, OUTPUT);
  if (!SigFox.begin()) { Serial.println("Shield error!"); return; }
  if (debug) SigFox.debug(); else SigFox.end();
}

void loop() {
  String pos = GetGPSposition();
  SendSigfox(pos);
  Wait(WAITING_TIME, false);
}

Bronnen

  • 3D-print bestanden: Tinkercad
  • Schema: zie projectpagina (let op: foto toont geen MKR1200)

Productieproces

  1. Geïntegreerde Schakelingen (IC's): Compacte, Krachtige Chips die Moderne Elektronica Aandrijven
  2. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  3. Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
  4. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  5. Bouw een Tetris-spel met Arduino Nano op een Zelfgemaakte 16×8 LED-matrix
  6. MotionSense: Slimme inbraakdetectie met Arduino en ESP8266
  7. Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
  8. MOSMusic Project Kit: MOSFET, Arduino en meer
  9. Essentiële Onderdelen van een Boormachine: Een Uitgebreid Overzicht
  10. Belangrijkste Componenten van een Interne Verbrandingsmotor
  11. De C# Switch Statement: Syntaxis, Voorbeelden & Best Practices