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

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Onderdelen en Benodigdheden

Arduino Nano R3×1

Over dit Project

Beschrijving

Ik wilde het! Ik was jaloers op mijn vriend Taggi's grote auto die de snelheid op de voorruit projecteert. Ik moest het hebben, en natuurlijk zelf bouwen!

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Software-oogpunt

Bij het ontwerpen van de schakeling was het meest lastige en verwarrende deel de verbinding van de 7-segment displays met de BCD-decoders omdat de getallen "gespiegeld" zijn (gemirrored).

Er zijn 3 knoppen: + en - voor helderheid verhogen/verlagen en S/H om te schakelen tussen Snelheid in km/u en Koers in graden; bij Koers brandt ook de rode LED, wat "graden" van de kompas (1-360°) betekent tijdens rijden. Het is geen elektronische kompas, het is een GPS en je moet rijden om de juiste richtingsinformatie te krijgen. De helderheid wordt na een minuut opgeslagen in EEPROM geheugen. Helderheid wordt gewijzigd op zowel displays als LED via PWM-pinnen.

Een belangrijk deel van de code is het verzamelen van data van de GPS, voornamelijk snelheid en richting, uit elke NMEA-zin. Zelfs met de String-klasse, voornamelijk voor seriële NMEA-zin manipulatie, is de hele verwerkingsstroom stabiel en robuust; het gebruikt "serialEvent()" om één keer per seconde data van de GPS te ontvangen, roept dan "nmeaExtractData()" aan en checkt ten slotte het datapakket met "nmea0183_checksum()" om de dataintegriteit te garanderen. Als je een ander merk/model GPS gebruikt, zorg dat de zinnen dezelfde structuur hebben of je moet hier wijzigingen aanbrengen. Bijvoorbeeld EM406A gebruikt "$GPRMC" packet ID, BT220 gebruikt "$GNRMC"... slechts een kleine naamwijziging... Een nuttige link kan helpen met checksum-test: https://nmeachecksum.eqth.net - Hier een voorbeeld van een complete NMEA-zin, het bevat: id, tijd, geldigheid, breedtegraad, lengtegraad, snelheid, ware koers, datum, variatie en checksum.

$GNRMC, 095836.000, A, 4551.9676, N, 01328.7118, E, 2.09, 341.84, 280519,, *08

De sketch zorgt ervoor dat de latch voor elke enkele display BCD-decoder één voor één ingeschakeld wordt, de code op de binaire 4-bits bus gezet wordt, de latch uitgeschakeld wordt, en zo door wanneer de waarde verandert. Linker niet-significante nullen worden uitgeblust (niet getoond).

VOOR het laden van een nieuwe sketch NAAR de MCU onthoud de Jumper te verwijderen: deze is verbonden met de Rx-pin van Arduino en tijdens het laden is het zeker in conflict met GPS Tx. Na het laden van de software, plaats de Jumper terug om de normale functionaliteit te herstellen.

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Onderdelenlijst

  • 1 x MCU Arduino Nano
  • 3 x 5161as zeven-segment displays, common cathode, rood
  • 1 x Beitian BN-220 seriële TTL GPS (1 Hz GNRMC zinnen)
  • 1 x Jumper
  • 3 x knoppen (normaal open) + 3 x condensators
  • 22 x 1/4W 220 ohm weerstanden
  • 1 x 3mm LED, rood
  • 2 x 100n condensators
  • 3 x 14511 BCD decoders + latch
  • 1 x USB "B" female
  • 1 x strip lijn 2x mannelijke pinnen (voor Jumper)
  • 1 x strip lijn 4x mannelijke pinnen gebogen naar 90° (voor GPS)
  • 1 x pigtail kabel GPS naar 4 pinnen op bord
  • 22 x strip lijn mannelijke pinnen om twee PCB's in een stack te verbinden
  • 1 x stuk dubbelzijdig tape om GPS op PCB te plakken
  • 6 x gedraaide strip lijn 5x vrouwelijke pinnen (voor displays)
  • 50 x koperen 0.6mm nietjes
  • 8 x M3 schroeven
  • 4 x M3 vrouwelijke standoffs 20mm hoog
  • 1 x plastic doos + deksel (kijk naar mijn 3D-bestanden klaar voor printen, hieronder)

PCB (Geprinte Schakelprinten)

Ik gebruikte twee dubbelzijdige PCB's, daarom worden er ongeveer 50 doorvoernieten of pinnen gebruikt om routes voor de hele schakeling op te lossen. Er zijn ook 5 uitlijningsgaten om eerst te maken. Ik ontwierp op elke PCB deze 5 uitlijningspunten. In de download-sectie heb je alle PCB-bestanden, componenten- en soldeerzijdes, gespiegeld, voor downloaden en printen via een laserprinter op "gele" of "blauwe" velletjes; deze keer gebruikte ik de blauwe, maar de gele zijn ook goed en de prijs is lager. Ik moet zeggen dat de blauwe velletjes beter zijn... Bij printen onthoud om toner-besparingsinstellingen uit te zetten, gebruik in plaats daarvan 1200 dpi resolutie voor diep echt zwart resultaat. Het toner-transferproces van magic velletjes naar PCB wordt gedaan met een strijkijzer... Er zijn tutorials op het net die laten zien hoe een goede PCB te produceren, maar onthoud deze belangrijke punten: reinig perfect en borstel het koper lichtjes met een keukenschuim, 5 minuten strijkijzeren, water thermische schok, twee-zijdige uitlijning via 5 gaten (ik gebruikte 5 pinnen op een groot wit LED-oppervlak om gaten te zien), bescherm de andere zijde tijdens het etsproces. Het printen van de componentenzijde maakt het project ook "professioneel" :-)

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

NOTITIES: De foto's zijn genomen voor de allerlaatste versie, wat betekent dat een paar details anders kunnen zijn: bijv. de rare groene draad rondom de PCB's in de finale verdwijnt, of de Jumper is verplaatst van PCB #1 naar PCB #2. Je moet de GPS instellen op 9600 bps snelheid, 1Hz GNRMC NMEA zin alleen; dit kan met de eigen setup-software. Ten slotte, voor je de USB female connector solderd, plak een klein stukje isolatietape eronder om ongewenst contact met een koperlijn aan de componentenzijde, net eronder, te voorkomen.

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Bij de eerste keer voeding aanzetten zul je ontdekken dat de getallen "onleesbaar" zijn, omdat het gemaakt is om ernaar te kijken gereflecteerd op de voorruit (spiegel). Monteer het in de auto voor het bestuurdersstoel, vind een comfortabele plek en bevestig het. Ik raad aan om de USB voedingskabel na de contactstand aan te sluiten zodat het aan/uit gaat bij motor aan/uit. Dat is alles dames en heren!

Nieuws en Verbeteringen

  • 25.03.2021: om het project af te ronden heb ik twee 3D .STL modellen voorbereid op deze link: https://grabcad.com/library/car-hud-1 waar je bestanden kunt downloaden voor een gevormde doos en zijn dekselpaneel voor dit project om te printen met een 3D-printer.
  • 20.07.2021: er is een V2 (versie twee) van de software beschikbaar die samen met twee draden en één weerstand hoogteinformatie op het display geeft als duizend meters (bijv. 0.89 = 890m), druk nog een keer op de S/H knop! Instructies: 1) stel GPS in om ook $GNGGA NMEA zin uit te geven via eigen software; 2) knip de huidige verbinding tussen d5 Arduino PWM-pin en de rest van de schakeling, verbind het met de centrale display decimaalpunt-pin met een 220ohm weerstand; 3) verbind d13 Arduino digitale pin met de schakeling waar d5 verbonden was; kijk naar de foto's hieronder; 4) installeer V2 sketch op je Arduino Nano.
  • 01.11.2021: versie V2.2 is klaar voor je. Wat is er nieuw? Over hoogte (al aanwezig met V2) toont de HUD de volledige waarde tot 999m, vanaf 1000m toont het waarden in duizenden, bijv. 1.24 (1240m) of 2.02 (2020m). Ik voegde een LDR fotoweerstand GL5539, een 10kOhm weerstand en 2 draden toe. Kijk naar de foto's hieronder voor V2.2 aanpassingen en installeer V2.2 sketch op je Arduino. De LDR-sensor past helderheid automatisch aan (3 niveaus) afhankelijk van het lichtniveau (dag, bewolkt of nacht). Knoppen (+) en (-) werken nog steeds om helderheid handmatig aan te passen, ze hebben prioriteit; om terug te gaan naar automatisch druk je (+) en (-) knoppen tegelijkertijd even in. De interne EEPROM om helderheidsniveau op te slaan wordt niet meer gebruikt. Doe eerst de V2 aanpassingen!

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Als je rijdt, rijd dan gewoon. Rij veilig!

Code

Car-HUD Arduino sketch Arduino

/* Deze sketch fungeert als auto voorruit HUD (head up display), door Marco Zonca, 10/2020
   Arduino Nano als CPU, GPS BT-220 nmea elke 1 sec, 3 x knoppen, 3 x zeven-segment displays common cathode,
   3 x 14511 BCD latch decoder, MPU EEPROM geheugen (1 byte) en veel weerstanden;
   WAARSCHUWING: =======
   Voor software-update los RX-pin op Arduino (TX van GPS) via de JUMPER */
#include <Wire.h>
#include <EEPROM.h>

String inputString = "";
String nm_time = "00:00:00";
String nm_validity = "V";
String nm_latitude = "dd°mm.mmmm'N";
String nm_longitude = "ddd°mm.mmmm'E";
String nm_knots = "0.0kn";
float nmf_knots = 0.0;
float nmf_kmh = 0.0;
int nmi_kmh = 0;
String nm_truecourse = "360";
float nmf_truecourse = 360;
String nm_date = "dd/mm/yyyy";
int nmi_truecourse = 0;
byte kCent = 0;
byte kDeci = 0;
byte kUnit = 0;
byte tCent = 0;
byte tDeci = 0;
byte tUnit = 0;
byte brightness = 120;
byte latch_off = HIGH;
byte latch_on = LOW;
int n=0;
unsigned long lastmemcheck = 0;
unsigned long memcheck = 60000; // check om "brightness" waarde in EEPROM op te slaan elke 60 seconden
bool stringComplete = false;
bool isKMH=true;
bool ret = false;

const int disp001 = 2; // eenheden display latch
const int disp010 = 8; // tientallen display latch
const int disp100 = 12; // honderdtallen display latch
const int disp001dim = 9; // eenheden display dimmer/uit pin
const int disp010dim = 10; // tientallen display dimmer/uit pin
const int disp100dim = 11; // honderdtallen display dimmer/uit pin
const int button_kt = 14; // kmh/ware koers knop
const int button_more = 15; // helderheid + knop
const int button_less = 16; // helderheid - knop
const int degreesLED = 3; // graden LED
const int bit_3 = 7; // bit 3
const int bit_2 = 6; // bit 2
const int bit_1 = 5; // bit 1
const int bit_0 = 4; // bit 0
const int dly = 10; // latch delay ms
const byte off = 0; // hetzelfde als brightness=0
const int addr = 0; // EEPROM adres voor helderheidswaarde
const byte numbers[10][4] = {{0,0,0,0},{1,0,0,0},{0,1,0,0},{1,1,0,0},{0,0,1,0},
  {1,0,1,0},{0,1,1,0},{1,1,1,0},{0,0,0,1},{1,0,0,1}}; // bits 0,1,2,3

void setup() {
  Serial.begin(9600);
  Wire.begin();
  inputString.reserve(200);
  brightness = EEPROM.read(addr);
  if (brightness > 250 || brightness < 10) {
    brightness=120;
  } // vermijd gekke waarden bij 1e EEPROM read
  pinMode(disp001, OUTPUT);
  pinMode(disp010, OUTPUT);
  pinMode(disp100, OUTPUT);
  pinMode(degreesLED, OUTPUT);
  pinMode(button_kt, INPUT_PULLUP);
  pinMode(button_less, INPUT_PULLUP);
  pinMode(button_more, INPUT_PULLUP);
  pinMode(bit_3, OUTPUT);
  pinMode(bit_2, OUTPUT);
  pinMode(bit_1, OUTPUT);
  pinMode(bit_0, OUTPUT);
  analogWrite(disp001dim, off); // uit en displays nul
  analogWrite(disp010dim, off);
  analogWrite(disp100dim, off);
  analogWrite(degreesLED, off);
  setBusNr(0);
  digitalWrite(disp001, latch_on);
  digitalWrite(disp010, latch_on);
  digitalWrite(disp100, latch_on);
  delay(dly);
  digitalWrite(disp001, latch_off);
  digitalWrite(disp010, latch_off);
  digitalWrite(disp100, latch_off);
  analogWrite(disp001dim, brightness); // displays aan
  analogWrite(disp010dim, brightness);
  analogWrite(disp100dim, brightness);
}

void loop() {
  // GPS NMEA ------------------
  if (stringComplete == true) {
    // ontvangen nmea zin via seriële poort RX
    ret = nmeaExtractData();
    inputString = "";
    stringComplete = false;
    if (ret == true) {
      kCent=nmi_kmh/100;
      n=nmi_kmh-(kCent*100);
      kDeci=n/10;
      n=nmi_kmh-(kCent*100)-(kDeci*10);
      kUnit=n;
      tCent=nmi_truecourse/100;
      n=nmi_truecourse-(tCent*100);
      tDeci=n/10;
      n=nmi_truecourse-(tCent*100)-(tDeci*10);
      tUnit=n;
      display();
    }
  }
  if (millis() > (lastmemcheck+memcheck)) {
    // in geheugen helderheidswaarde zetten (gewijzigd)
    EEPROM.update(addr,brightness);
    lastmemcheck=millis();
  }
  checkButtons();
}

void display() {
  if (isKMH == true) {
    // snelheid in km/u (isKMH=true)
    analogWrite(degreesLED, off);
    setBusNr(kUnit);
    digitalWrite(disp001, latch_on);
    delay(dly);
    digitalWrite(disp001, latch_off);
    if (kDeci > 0 || kCent > 0) {
      // zet tientallen uit als tientallen=0 (en honderdtallen=0)
      setBusNr(kDeci);
      digitalWrite(disp010, latch_on);
      delay(dly);
      digitalWrite(disp010, latch_off);
      analogWrite(disp010dim, brightness);
    } else {
      analogWrite(disp010dim, off);
    }
    if (kCent > 0) {
      // zet honderdtallen uit als=0
      setBusNr(kCent);
      digitalWrite(disp100, latch_on);
      delay(dly);
      digitalWrite(disp100, latch_off);
      analogWrite(disp100dim, brightness);
    } else {
      analogWrite(disp100dim, off);
    }
  } else {
    // ware peiling in graden (isKMH=false)
    analogWrite(degreesLED, brightness);
    setBusNr(tUnit);
    digitalWrite(disp001, latch_on);
    delay(dly);
    digitalWrite(disp001, latch_off);
    if (tDeci > 0 || tCent > 0) {
      setBusNr(tDeci);
      digitalWrite(disp010, latch_on);
      delay(dly);
      digitalWrite(disp010, latch_off);
      analogWrite(disp010dim, brightness);
    } else {
      analogWrite(disp010dim, off);
    }
    if (tCent > 0) {
      setBusNr(tCent);
      digitalWrite(disp100, latch_on);
      delay(dly);
      digitalWrite(disp100, latch_off);
      analogWrite(disp100dim, brightness);
    } else {
      analogWrite(disp100dim, off);
    }
  }
}

void checkButtons(){
  if (digitalRead(button_kt) == LOW) {
    if (isKMH == true) {
      isKMH=false;
    } else {
      isKMH=true;
    }
    delay(250);
  }
  if (digitalRead(button_more) == LOW) {
    if (brightness <= 240) {
      brightness=brightness+10;
    }
    analogWrite(disp001dim, brightness);
    analogWrite(disp010dim, brightness);
    analogWrite(disp100dim, brightness);
    delay(100);
  }
  if (digitalRead(button_less) == LOW) {
    if (brightness >= 20) {
      brightness=brightness-10;
    }
    analogWrite(disp001dim, brightness);
    analogWrite(disp010dim, brightness);
    analogWrite(disp100dim, brightness);
    delay(100);
  }
}

void setBusNr(int number) {
  // zet 4 bits bus
  for (byte b=0; b<=3; b++) {
    if (numbers[number][b]==0) {
      if (b==0) {digitalWrite(bit_0, LOW);}
      if (b==1) {digitalWrite(bit_1, LOW);}
      if (b==2) {digitalWrite(bit_2, LOW);}
      if (b==3) {digitalWrite(bit_3, LOW);}
    } else {
      if (b==0) {digitalWrite(bit_0, HIGH);}
      if (b==1) {digitalWrite(bit_1, HIGH);}
      if (b==2) {digitalWrite(bit_2, HIGH);}
      if (b==3) {digitalWrite(bit_3, HIGH);}
    }
  }
}

// haal data uit nmea inputString
bool nmeaExtractData() {
  int d=0;
  int s=0;
  int y=0;
  int z=0;
  float t=0;
  bool ret = false;
  // true als nmea zin = $GNRMC en geldige CHKSUM
  if ((inputString.substring(0,6) == "$GNRMC") && (inputString.substring(inputString.length()-4,inputString.length()-2) == nmea0183_checksum(inputString))) {
    y=0;
    for (s = 1; s < 11; s++) {
      y=inputString.indexOf(",",y);
      switch (s) {
        case 1: //-----------------------tijd
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nm_time=inputString.substring(y+1,y+2+1)+":"+inputString.substring(y+1+2,y+4+1)+":"+inputString.substring(y+1+4,y+6+1);
          }
          y=z;
          break;
        case 2: //-----------------------geldigheid
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nm_validity=inputString.substring(y+1,y+1+1);
          }
          y=z;
          break;
        case 3: //-----------------------breedtegraad
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nm_latitude=inputString.substring(y+1,y+2+1)+"°"+inputString.substring(y+1+2,y+10+1)+"'";
          }
          y=z;
          break;
        case 4: //-----------------------noord/zuid
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nm_latitude=nm_latitude + inputString.substring(y+1,y+1+1);
          }
          y=z;
          break;
        case 5: //-----------------------lengtegraad
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nm_longitude=inputString.substring(y+1,y+3+1)+"°"+inputString.substring(y+1+3,y+11+1)+"'";
          }
          y=z;
          break;
        case 6: //-----------------------oost/west
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nm_longitude=nm_longitude + inputString.substring(y+1,y+1+1);
          }
          y=z;
          break;
        case 7: //-----------------------snelheid knopen
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nmf_knots=inputString.substring(y+1,z).toFloat();
            t=roundOneDec(nmf_knots);
            nm_knots=String(t,1)+"kn";
            nmf_kmh=roundTwoDec(nmf_knots * 1.852);
            nmi_kmh=roundZeroDec(nmf_knots * 1.852);
          }
          y=z;
          break;
        case 8: //-----------------------ware koers
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nmf_truecourse=inputString.substring(y+1,z).toFloat();
            t=roundZeroDec(nmf_truecourse);
            nmi_truecourse=t;
            d=t;
            nm_truecourse=d;
          }
          y=z;
          break;
        case 9: //-----------------------datum
          z=inputString.indexOf(",",y+1);
          if (z>(y+1)) {
            nm_date=inputString.substring(y+1,y+2+1)+"/"+inputString.substring(y+1+2,y+4+1)+"/20"+inputString.substring(y+1+4,y+6+1);
          }
          y=z;
          break;
        case 10: // statements n.u.
          break;
        default: // statements n.u.
          break;
      }
    }
    ret=true;
  }
  return ret;
}

/* SerialEvent gebeurt wanneer er nieuwe data binnenkomt op de hardware seriële RX.
   Deze routine loopt tussen elke keer dat loop() draait, dus het gebruik van delay
   in loop kan de reactie vertragen. Meerdere bytes data kunnen beschikbaar zijn. */
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    // als het binnenkomende teken een newline is, zet een vlag zodat de main loop
    // er iets mee kan doen
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

// bereken checksum van nmea zin
String nmea0183_checksum(String nmea_data) {
  int crc = 0;
  String chSumString = "";
  int i;
  // negeer eerste $ teken, checksum in zin
  for (i = 1; i < (nmea_data.length()-5); i++) {
    // verwijder -5 als geen "*" + cksum + cr + lf aanwezig zijn
    crc ^= nmea_data[i];
  }
  chSumString = String(crc,HEX);
  if (chSumString.length()==1) {
    chSumString="0"+chSumString.substring(0,1);
  }
  chSumString.toUpperCase();
  return chSumString;
}

// rond af op nul decimalen
float roundZeroDec(float f) {
  float y, d;
  y = f*1;
  d = y - (int)y;
  y = (float)(int)(f*1)/1;
  if (d >= 0.5) {
    y += 1;
  } else {
    if (d < -0.5) {
      y -= 1;
    }
  }
  return y;
}

// rond af op één decimaal
float roundOneDec(float f) {
  float y, d;
  y = f*10;
  d = y - (int)y;
  y = (float)(int)(f*10)/10;
  if (d >= 0.5) {
    y += 0.1;
  } else {
    if (d < -0.5) {
      y -= 0.1;
    }
  }
  return y;
}

// rond af op twee decimalen
float roundTwoDec(float f) {
  float y, d;
  y = f*100;
  d = y - (int)y;
  y = (float)(int)(f*100)/100;
  if (d >= 0.5) {
    y += 0.01;
  } else {
    if (d < -0.5) {
      y -= 0.01;
    }
  }
  return y;
}

Schema's

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Auto HUD: Real-time Snelheid & Kompas op Voorruit Projectie

Productieproces

  1. Autonome Donkey Car: TensorFlow MobileNetV2 AI voor Afvalopruiming
  2. Real-time Bewegingsplanning voor Autonome Voertuigen in Stedelijke Omgevingen: Een Geschaalde Prototype-studie
  3. De juiste turbocompressor kiezen voor uw auto: een praktische gids
  4. Waarom Mijn Auto Olie Lekt Wanneer Hij Geparkeerd Staat: Veelvoorkomende Oorzaken Uitgelegd
  5. Productdata-uitwisseling: De Sleuteluitdaging voor Automotive Fabrikanten
  6. De optimale motorkabel selecteren voor variabele-snelheidsaandrijvingen (VSD's)
  7. Twister Snelheidsdraaibanken: Geavanceerde Polijsten & Ontgraten met 50% Meer Vermogen & Regeneratieve Controle
  8. FBL-1233 hellingbed draaibank: Precisie, snelheid en veelzijdigheid voor hoog-volume & korte-serie productie
  9. Mobiliteit Revolutioneren: Binnen Arrow Electronics' Semi-Autonome Motorcar voor Gehandicapte Bestuurders
  10. Hoe 5G Connected Cars Transformeert: Snelheid, Veiligheid en Slimme Features
  11. Veiligheid Eerst: Hoe Europeanen Toekomstige Connected Cars Bekijken