AlphaBot: Ultraschall Notbremse

Aus HSHL Mechatronik
Version vom 28. April 2022, 15:28 Uhr von Ulrich Schneider (Diskussion | Beiträge) (→‎Quelltext)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Autor: Prof. Dr.-Ing. Schneider

Inhalt des siebten Termins

  • Wir haben die Servoansteuerung wiederholt.
  • Wir haben den Ultraschall-Sensor mittig ausgerichtet.
  • Wir haben Abstandswerte gemessen.
  • Wir sind vorwärts gefahren und haben 20 cm eine Notbremsung gemacht.
Abb. 1: Programmablaufplan
Abb. 1: Programmablaufplan


Quelltext

// Bibliotheken einbinden 
#include "AlphaBot.h"         
#include <Servo.h>

// Instanzen erzeugen
AlphaBot Alf = AlphaBot();               // Instanz des AlphaBot erzeugen
Servo AlfServo;                          // Servo Instanz

// KONSTANTEN deklarieren
const int TRIG = 11;                     // US Trigger an D11
const int ECHO = 12;                     // US Echo an D12
const int nServoPort = 9;                // Der Servo liegt auf D9


void initUltraschall()
{
  pinMode(TRIG, OUTPUT);                  // Ultraschall Trigger als Ausgang deklarieren 
  pinMode(ECHO, INPUT);                   // Ultraschall Echo als Eingang deklarieren  
}

float messeUSAbstand()                    // Abstand in cm
{
  float fUSAbstand = 0;                   // Rückgabewert initialisieren
  float fSignalLaufzeit=0;                // Messwert der Signallaufzeit           

  digitalWrite(TRIG, LOW);                // setze Trigger auf LOW für 2μs
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);               // setze Trigger auf HIGH für mind. 10 us
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);                // setze Trigger auf LOW
  fSignalLaufzeit = pulseIn(ECHO, HIGH);  // Messung der Signallaufzeit des Impulses
  
  fUSAbstand = fSignalLaufzeit/58;        // Umrechnung Laufzeit in s in Abstand in cm            
  //Y m =(X s * 344)/ 2; 
  //X s =( 2 * Y m)/ 344;
  //X s = 0.0058 * Y m;
  //cm = us /58
  return fUSAbstand;                      // Rückgabewert
}  

void setup()                      // Einmalige Systeminitialisierung
{
  initUltraschall();              // US initialisieren
  AlfServo.attach(nServoPort);    // Servo verbinden
  Serial.begin(9600);             // Serieller Monitor mit 9600 Baud
  AlfServo.write(90);             // Der Servo soll sich an die Mitte drehen 
  delay(15);                      // Drehung abwarten
  Alf.MotorRun(80,80);            // Alf fährt vorwärts; Leistung 100
}

void loop()                       // Main Schleife
{
  float USAbstand =0;
  USAbstand = messeUSAbstand();   // US Abstand messen 
  Serial.println(USAbstand);
  if (USAbstand<20){
    Serial.println("Notbremse");
    Alf.Brake();                  // Anhalten
  } 
}

Hausaufgaben bis zum 8. Termin

  • Suche mit dem Ultraschall den Bereich 0°-180° vor dem AlphaBot ab.
  • Fahre auf das nächstgelegene Ziel im Sichtbereich zu.
  • Stoppe 10 cm vor dem Ziel.

Musterlösung


→ zurück zum Hauptartikel: Projekt Alf