Arduino-Schranke mit Zähler für den Modellbau-Parkour

Harald betreibt eine Modellbau-Halle in Österreich und möchte gern eine Schranke für Modellbau-LKWs haben, die automatisch öffnet und die Öffnungen zählt. Da bin ich dabei und ich hoffe, dass dieses Projekt auch für euch spannend ist. Wir verwenden zwei Infrarot-Entfernungssensoren. Je nach Typ können sie Objekte in einem bestimmten Abstandsbereich wahrnehmen und senden ein analoges Signal. Ein Servomotor bildet den Antrieb der Schranke, dazu kommt eine Segmentanzeige, die die Anzahl der Öffnungen ab Reset anzeigt. Bauteile Sharp Infrarot-Entfernungssensor Segment-Anzeige Servo-Motor Schaltung Die Entfernungssensoren sind mit den analogen Pins 0 und 1 des Arduino-Boards verbunden, die Segmentanzeige mit den Pins D2 und D3. Der Servo erhält seine Steuersignale über den Pin D9. Funktionsweise Wird einer der beiden Infrarot-Entfernungssensoren unterbrochen, öffnet sich die Schranke und der Zähler wird um eins erhöht. Sind beide Entfernungssensoren wieder frei, läuft eine einstellbare Wartezeit ab, danach schließt sich die Schranke wieder. Code Arduino-Schranke Achtung, du benötigst die folgenden Libraries: MobaTools von MicroBahner TM1637Display #include <TM1637Display.h> // Bibliothek für das Zähler-Modul #include <MobaTools.h> // Bibliothek um den Servo langsam fahren zu lassen const int servoPin = 9; // Anschluss für den Servo const int lichtschranke1Pin = 0; // Anschluss der ersten Lichtschranke const int lichtschranke2Pin = 1; // Anschluss der zweiten Lichtschranke int thresholdLS1 = 400; // über diesem Wert gilt die Lichtschranke als durchbrochen int thresholdLS2 = 400; // über diesem Wert gilt die Lichtschranke als durchbrochen int servoSpeedOeffnen = 50; // Geschwindigkeit des Servos beim Öffnen der Schranke int servoSpeedSchliessen = 10; // Geschwindigkeit des Servos beim Schließen der Schranke int servoPositionOffen = 120; // Position des Servos bei geöffneter Schranke int servoPositionGeschlossen = 20; // Position des Servos bei geöffneter Schranke int wartezeit = 1000; // so lange bleibt die Schranke oben, nachdem alle Objekte den Schrankenbereich verlassen haben int myCounter = 0; // speichert die Öffnungen int myState = 3; // speichert den Programmzustand (State maschine) int myLastState = 3; // speichert den Zustand des letzten Durchlaufes des Loops long schrankenTimer = 0; // Timer für das Schließen der Schranke MoToServo schrankenServo; // Servo-Objekt TM1637Display display(2, 3); // Segmentanzeige an D2 und D3 void setup() { Serial.begin(115200); // Start der seriellen Kommunikation display.setBrightness(0x0c); // Helligkeit des Displays einstellen display.clear(); schrankenServo.attach(servoPin); // Servo an Pin 9 schrankenServo.setSpeed( 9 ); // Geschwindigkeit des Servos } void loop() { if ((analogRead(lichtschranke1Pin) >= thresholdLS1) || (analogRead(lichtschranke2Pin) >= thresholdLS2)) { // wenn eine der Lichtschranken ausgelöst ist myState = 1; // Schließe die Schranke if (myState!=myLastState) myCounter++; // wenn die Lichtschranken vorher nicht ausgelöst waren, erhöhe die Zählervariable } else { // sonst if (myState == 1) { // wenn der aktuelle Zustand == 1 ist myState = 2; // Ändere den Zustand auf 2 (Wartezeit vor dem Schließen der Schranke) schrankenTimer = millis(); // Starte den Schranken-Timer (für die Wartezeit nötig) } } switch (myState) { case 1: // Öffnen schrankenServo.setSpeed(servoSpeedOeffnen); // Geschwindigkeit des Servos schrankenServo.write(servoPositionOffen); // Servo in Öffnungsposition bringen break; case 2: // Zeitverzögerung nach Verlassen des Schrankenbereiches if (schrankenTimer + wartezeit < millis()) { // wenn Wartezeit abgelaufen ist myState = 3; // gehe in den Schließ-Zustand } break; case 3: // Schließen schrankenServo.setSpeed(servoSpeedSchliessen); // Geschwindigkeit des Servos schrankenServo.write(servoPositionGeschlossen); // Servo in Schließposition bringen break; } display.showNumberDecEx(myCounter, 0, true, 4, 0); // Zeige die Anzahl der Öffnungen auf dem Display an myLastState=myState; // Zustandsspeicherung für den nächsten Druchlauf des Loops delay(20); // kurze Wartezeit /* Serialle Ausgabe zum Einstellen der Lichtschranken und zur Fehlersuche */ Serial.print("LS1: "); Serial.print(analogRead(lichtschranke1Pin)); Serial.print("\t LS2: "); Serial.print(analogRead(lichtschranke2Pin)); Serial.print("\t myState: "); Serial.println(myState); } Der Beitrag Arduino-Schranke mit Zähler für den Modellbau-Parkour erschien zuerst auf Arduino Tutorial.

zum Artikel gehen

Sende a message from arduino nano to raspberry pi via 433 mhz rf module

I want to make a data transfer circuit using Arduino nano and Raspberry Pi. It will be done using 433 mhz rf module. If the password sent by Arduino is correct, Raspberry Pi will respond with a message stating the correct password... (Budget: $10 - $11 US

zum Artikel gehen

Erfahrung Hodis Modellbau Ecke

Hallo zusammen, Ich kenne diese Seite https://www.hodis-modellbau-ecke.de/ Kennt jemand den Shop und Erfahrungen damit. Ich wollte mir was kaufen bin aber unsicher. Danke und Grüße

zum Artikel gehen

Mit Arduino Bewegungs- und Orientierungssensoren in Systeme integrieren

Entwickler müssen ihre Systeme zunehmend mit Orientierungs- und Bewegungsfunktionen ausstatten, sind aber unsicher, wo sie anfangen sollen. Ein Arduino könnte dabei helfen.

zum Artikel gehen

heise+ | Spracherkennung mit Arduino nano connect realisieren

Spracherkennung mit einem Arduino, das war bislang mangels Rechenpower unvereinbar. Doch der Nano RP2040 connect soll das packen. Wir zeigen, wie es geht.

zum Artikel gehen

Wokwi: Web-Simulator, etwa für Raspberry Pi Pico, Arduino und ESP32

Mit dem Online-Simulator Wokwi lassen sich Mikrocontroller-Projekte mit Raspberry Pi Pico, Arduino, ESP32 und weiteren Boards sowie Sensoren im Web-Browser simulieren.

zum Artikel gehen