Ampel mit dem Beschleu­ni­gungs­sen­sor ADXL335 schalten

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Der ADXL335 ist ein 3-Ach­sen Beschleu­ni­gungs­sen­sor. Er hat neben der Span­nungs­ver­sor­gung und dem GND-Anschluss drei ana­lo­ge Aus­gän­ge für die Erfas­sung der Beschleu­ni­gung in der x-, y- und z-Richtung.

Der Beschleu­ni­gungs­sen­sor wur­de auf auf einem Holz­stück befes­tigt und die Ach­sen ent­spre­chend beschriftet.

x-Achse
y-Achse
z-Achse

Benö­tig­te Bauteile:

  • 3 LEDs (rot, gelb, grün)
  • 3 Wider­stän­de 220 Ω
  • Lei­tungs­dräh­te
  • Beschleu­ni­gungs­sen­sor ADXL335

Beach­te die ➨Vor­wi­der­stän­de ver­schie­de­ner LEDs

Baue die Schal­tung auf:
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Die ermit­tel­ten Wer­te der jewei­li­gen Ach­sen sol­len im Seri­el­len Moni­tor und im Seri­el­len Plot­ter dar­ge­stellt wer­den. Eine Sei­te liegt dann oben, wenn der Wert des ana­lo­gen Ein­gangs über 400 liegt.

Das zum Seri­el­len Plot­ter gehö­ri­ge Programm:

void setup() 
{
  Serial.begin(9600);
}
 
void loop() 
{
  int xAchse = analogRead(A0);
  int yAchse = analogRead(A1);
  int zAchse = analogRead(A2);

  // Werte schreiben
  Serial.print("x-Achse:");
  Serial.print(xAchse);
  Serial.print(",");

  Serial.print("y-Achse>:");
  Serial.print(yAchse);
  Serial.print(",");

  Serial.print("z-Achse:");
  Serial.print(zAchse);
  Serial.println(",");
 
  delay(200);
}

Eine Ampel soll „per Hand“ geschal­tet werden:

Der Sen­sor zeigt auf die ...

  • x-Ach­se Ampel ist rot
  • y-Ach­se Ampel zeigt gelb oder rot-gelb
  • z-Ach­se die grü­ne LED leuchtet

Natür­lich ist noch das Pro­blem zu lösen, dass nach rot rot-gelb folgt und nach grün nur die gel­be LED leuch­tet. Der Sta­tus einer bool­schen Varia­ble ent­schei­det dar­über, wel­cher Fall eintritt.

Die LEDs wer­den mit enum definiert:

enum Ampel
{  
  // Startwert festlegen
  ROT = 5,
  GELB,
  GRUEN
};

/*   wenn der Sensor zur y-Achse zeigt  
  letztes Signal rot  -> ROTGELB = true  
  -> Ampel zeigt rot und gelb  letztes Signal grün -> ROTGELB = false
  -> Ampel zeigt nur gelb 
*/
bool ROTGELB = true;

Der set­up-Teil:

void setup()
{
  for (int i = ROT; i <= GRUEN; i ++)
  {
    pinMode(i, OUTPUT);
  }
  Serial.begin(9600);
}

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  // analoge Eingänge lesen
  int xAchse = analogRead(A0);
  int yAchse = analogRead(A1);
  int zAchse = analogRead(A2);

  // Sensor zeigt auf die x-Achse -> Ampel rot, ROTGELB = true
  if (xAchse > 400)
  {
    digitalWrite(GELB, LOW);
    digitalWrite(GRUEN, LOW);
    digitalWrite(ROT, HIGH);
    ROTGELB = true;
  }

  // Sensor zeigt auf die y-Achse
  // wenn ROTGELB = false -> nur die gelbe LED leuchtet
  if (yAchse > 400 & !ROTGELB)
  {
    digitalWrite(GRUEN, LOW);
    digitalWrite(ROT, LOW);
    digitalWrite(GELB, HIGH);
  }

  // wenn ROTGELB = true -> die rote und die gelbe LED leuchten
  if (yAchse > 400 & ROTGELB)
  {
    digitalWrite(GRUEN, LOW);
    digitalWrite(ROT, HIGH);
    digitalWrite(GELB, HIGH);
  }

  /* 
    Sensor zeigt auf die z-Achse
    ROTGELB muss auf false gesetzt werden, 
    damit bei Aktivierung des y-Achse nur die gelbe LED leuchtet
  */
  if (zAchse > 400 )
  {
    digitalWrite(ROT, LOW);
    digitalWrite(GELB, LOW);
    digitalWrite(GRUEN, HIGH);
    ROTGELB = false; 
  }

  delay(20);
}

Startseite
Suchen
Aufgaben A-Z
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 8. Okt 2023 @ 15:47