Projet d'ascenseur
FunduinoDernière mise à jour le
Ein Aufzugmodell aus Aluminiumprofilen aufbauen und programmieren
Das Aufzugprojekt im Unterricht
Alle Bauteile sichten und sortieren
Das obere Querprofil vorbereiten
1 / 3
Die Basis aufbauen
1 / 7
Motor und Lichtschranken montieren
1 / 5
Den Motor oben am Rahmen anbringen
1 / 4
Gondel und Seil einsetzen
1 / 4
Bodenplatte und Schrittmotortreiber
1 / 3
Aufgaben mit Standardmaterialien
Aufgaben mit Erweiterungsmaterialien
Beispielprogramm: vier Etagen mit OLED-Anzeige
Vier Etagen mit Tastern, Lichtschranken und OLED-Anzeige
#include <Stepper.h> // Hinzufügen der Programmbibliothek.
int SPU = 2048; // Schritte pro Umdrehung.
Stepper Motor(SPU, 11,9,10,8); // Der Schrittmotor erhält die Bezeichnung "Motor" und es wird angegeben an welchen Pins der Motor angeschlossen ist.
int T1=22, T2=2, T3=3, T4=4, S1=17, S2=16, S3=15, S4=14;// Pins für Taster und Sensoren festlegen
int sT1=0, sT2=0, sT3=0, sT4=0, sS1=0, sS2=0, sS3=0, sS4=0;//Statusvariablen für Taster und Sensoren festlegen
int EtageSoll=0, EtageIst=0;// Eingabespeicher für Taster und Sensoren festlegen
int F=0; // Variable für den Fahrmodus oder Pausemodus
int EtageAlt=0;
int EtageSollAlt=0;
//OLED initialisieren
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;
void setup() //Hier beginnt das Setup.
{
Serial.begin(9600);
Motor.setSpeed(6); // Angabe der Geschwindigkeit in Umdrehungen pro Minute.
pinMode (T1, INPUT);
pinMode (T2, INPUT);
pinMode (T3, INPUT);
pinMode (T4, INPUT);
pinMode (S1, INPUT);
pinMode (S2, INPUT);
pinMode (S3, INPUT);
pinMode (S4, INPUT);
//OLED Setup
Wire.begin();
Wire.setClock(400000L);
oled.begin(&Adafruit128x64, I2C_ADDRESS);
oled.setFont(Verdana12); // Auswahl der Schriftart
oled.clear(); //Löschen der aktuellen Displayanzeige
oled.println("TESTFAHRT"); //Text in der ersten Zeile. "Println" sorgt dabei für einen Zeilensprung.
oled.println("Aufzug faehrt"); // Text in der zweiten Zeile. "Println" sorgt dabei für einen Zeilensprung.
oled.print("zum Startpunkt"); // Text in der dritten Zeile.
delay (2000);
// Aufzug in Ausgangsposition fahren
for (int i = 0; i <= 1; i++)
{
Motor.step(-1);
sS1 = digitalRead(S1);
if (sS1!=1) i=0;
Serial.println(sS1);
}
EtageIst=0;
EtageSoll=0;
delay(1000);
Serial.println("Setup beendet");
oled.clear();
oled.println("Betriebsbereit");
oled.print("Etage: ");
oled.println(EtageIst);
oled.print("Ziel: ");
oled.print(EtageSoll);
}
void loop()
{
// Eingabe
Serial.print("Warte auf Etagenauswahl ");
sT1 = digitalRead(T1); if (sT1==1) EtageSoll=0;
sT2 = digitalRead(T2); if (sT2==1) EtageSoll=1;
sT3 = digitalRead(T3); if (sT3==1) EtageSoll=2;
sT4 = digitalRead(T4); if (sT4==1) EtageSoll=3;
// Vor dem auslesen der neuen Position wird die alte Position gespeichert umd Änderungen detektieren zu können
//Auslesen der aktuellen Aufzugposition
sS1 = digitalRead(S1); if (sS1==1) EtageIst=0;
sS2 = digitalRead(S2); if (sS2==1) EtageIst=1;
sS3 = digitalRead(S3); if (sS3==1) EtageIst=2;
sS4 = digitalRead(S4); if (sS4==1) EtageIst=3;
Serial.print(sT1);
Serial.print(EtageSoll);
Serial.println(EtageIst);
//Fahrmodus
if (EtageSoll-EtageIst >0) Motor.step(8); // Wenn der Wert über 0 ist (Etage ist höher als Aufzugsposition), dann fahre hoch.
if (EtageSoll-EtageIst <0) Motor.step(-8); // Wenn der Wert unter 0 ist (Etage ist tiefer als Aufzugsposition), dann fahre runter.
//Display Ansteuerung
if (EtageAlt!=EtageIst || EtageSoll!=EtageSollAlt) // Wenn der Aufzug fährt und zwischenzeitlich andere Etagen erreicht, ODER wenn die Etagenwahl geändert wurde, wird das Display aktualisiert mit den neuen Werten
{
oled.clear();
oled.println("Betriebsbereit");
oled.print("Etage: ");
oled.println(EtageIst);
oled.print("Ziel: ");
oled.print(EtageSoll);
}
EtageAlt=EtageIst;
EtageSollAlt=EtageSoll;
}
Die ältere Version V1.0
1 / 2
Évaluer le guide