Proyecto de ascensor para la clase de tecnología
FunduinoÚltima actualización el
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
Calificar la guía