Digitales Schlüsselbrett

Hallo an alle :slight_smile: ich hoffe jemand kann mir helfen unzwar bin ich im Studium und habe dort eine Fach welches sich mit Arduino beschäftigt und wir sollten uns ein Projekt aussuchen als Abschlusspräsentation. Da ich leider eine vollkommende Niete darin bin hoffe ich das mir jemand helfen kann unzwar habe ich überlegt ein Schlüsselbrett zu bauen wo knöpfe verbaut sind und beim betätigen ertönt dann entweder ein Geräusch oder es fängt an zu vibrieren am Schlüsselbund. Ist das machbar für einen Anfänger oder eher zu schwierig ?

Vielen Dank im Vorraus :slight_smile:

Du bist nicht der Einzige, der hier Hilfe benötigt. Daher sollte dein Titel schon einen Hinweis darauf enthalten, wo du Hilfe brauchst. Also ändere das bitte.

Hallo
Zeige eine Skizze über den mechanischen Aufbau. Welche Bauteile werden verwendet?

Da der TO noch nichtmal Vorstellungen davon hat, was er machen will, dürfte er mit Sicherheit auch noch keinen mechanischen Aufbau haben, den er zeigen kann.

Gruß Tommy

Aha.

Wie "betätigt" man die Knöpfe an einem Schlüsselbrett?

Was für ein Studium?
Wann ist die Präsentation?

Was sind denn Sachen die du in deiner Freizeit gerne machst?
Einfach die 5 Sachen nennen die du am liebsten machst.

Ganz Egal ob das nun

  • Laternenstrümpfe stricken
  • auf die Rückseiten von Briefmarken Karomuster aufmalen
  • Kochen
  • Tango tanzen
  • oder was auch immer ist.

Das wäre doch gelacht wenn ich da nicht einen Aufhänger für ein hübsches Projekt finde.
Du musst einfach ein bisschen erzählen.

vgs

du willst also am Schlüsselbrett einen Funksender haben und am Schlüsselbund einen Empfänger.
Was soll der Arduino machen?
Such dir einen Fernsteuerungsbausatz + einzelne Empfänger und vergiss das mit dem Arduino. Das ist nichts für dich.

Also wenn es eben irgendein kleines Arduino-Projekt sein soll,

dann schlage ich vor:
statt original Arduino einen ESP32 und da kommt ein Demoprogramm drauf, dass ein Webinterface anzeigt. Auf dem Webinterface ist ein Schieberegler und ein Button drauf.

Mit dem Schiebregler kann man die Blinkfrequenz der Onboard-LED verändern und mit dem Button das Blinken ein und ausschalten.

Jetzt werden sich die meisten wundern - wie daas soll ein einfaches Progrämmchen sein?!?!?
Mit der richtigen library ESP-Dash ist das vergleichsweise einfach zu programmieren.

GUI-Elemente Schieberegler / Button definieren jeweils eine Zeile
Eventhandler definieren

Von dort aus diverse Anpassungen machen ist auch vergleichsweise einfach.
Also auf eine Taste drücken und im Programm wird ein Merker gesetzt "Schüssel hängt" / Schlüssel abgenommen und das wird dann auch im Webinterface angezeigt.

ESP-DASH erledigt zu 100% den HTML-Kram
Jetzt käme es darauf an wie viel Zeit Kate hat um dann wenigstens an der Oberfläche die
Funktion des Programms erklären zu können

Hier der entsprechende Demo-Code dazu

#include <Arduino.h>
#if defined(ESP8266)
  /* ESP8266 Dependencies */
  #include <ESP8266WiFi.h>
  #include <ESPAsyncTCP.h>
  #include <ESPAsyncWebServer.h>
  /* on ESP8266 LED is connected to Vdd => HIGH = LED off */
  #define  LEDStateOff HIGH 
#elif defined(ESP32)
  /* ESP32 Dependencies */
  #include <WiFi.h>
  #include <AsyncTCP.h>
  #include <ESPAsyncWebServer.h>
  #define  LEDStateOff LOW
#endif
#include <AsyncElegantOTA.h> // manual https://randomnerdtutorials.com/esp32-ota-over-the-air-arduino/
#include <ESPDash.h>




const char *ssid     = "";
const char *password = "";

unsigned long MyTestTimer = 0; // variables used with millis() MUST be of type unsigned long
const byte    OnBoard_LED = 2;

bool DoBlink = true;

unsigned long BlinkFreq = 500;
int Slider2Pos = 5;

AsyncWebServer MyServer(80);

ESPDash MyDashboard(&MyServer); 

//  Button Card Format - (Dashboard Instance, Card Type, descriptive Text)
Card MyButton(&MyDashboard, BUTTON_CARD, "Blink On / Off");

//  Slider Card Format - (Dashboard Instance, Card Type, descriptive Text, Card Symbol(optional), int min, int max)
Card MySlider1(&MyDashboard, SLIDER_CARD, "Blink-Period in Milliseconds", "", 50, 1000);
Card MySlider2(&MyDashboard, SLIDER_CARD, "2ndSlider", "Testtext", 0, 10);

void PrintFileNameDateTime() {
  Serial.println("Code running comes from file ");
  Serial.println(__FILE__);
  Serial.print("  compiled ");
  Serial.print(__DATE__);
  Serial.print(" ");
  Serial.println(__TIME__);  
}

boolean TimePeriodIsOver (unsigned long &expireTime, unsigned long TimePeriod) {
  unsigned long currentMillis  = millis();  
  if ( currentMillis - expireTime >= TimePeriod )
  {
    expireTime = currentMillis; // set new expireTime
    return true;                // more time than TimePeriod) has elapsed since last time if-condition was true
  } 
  else return false;            // not expired
}


void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
  static unsigned long MyBlinkTimer;
  pinMode(IO_Pin, OUTPUT);
  
  if ( TimePeriodIsOver(MyBlinkTimer,BlinkPeriod) ) {
    digitalWrite(IO_Pin,!digitalRead(IO_Pin) ); 
  }
}


void setup(){
  Serial.begin(115200);
  delay(200);
  Serial.println("Setup-Start");
  PrintFileNameDateTime();

  pinMode(OnBoard_LED, OUTPUT);
  digitalWrite(OnBoard_LED, LOW);
  
  Serial.print("Trying to connect to WiFi..");
  Serial.print(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.print("connected \r\n type this IP-Adress into your browser ");
  Serial.println(WiFi.localIP() );
  Serial.println("to see the ESP-Dash-Board");

  // Attach Button Callback this function gets executed every time the Button is clicked 
  MyButton.attachCallback([&](bool MyButtonState){
    DoBlink = MyButtonState;
    Serial.println("Button Triggered: " + String((MyButtonState)?"true":"false"));
    MyButton.update(MyButtonState); //Make sure we update our button's value and send update to dashboard */
    MyDashboard.sendUpdates();
  });

  // Attach Slider Callback this function gets executed every time the slider is adjusted to a new value
  MySlider1.attachCallback([&](int MySliderValue){
    BlinkFreq = MySliderValue;
    Serial.println("MySlider1 Triggered: " + String(MySliderValue));
    MySlider1.update(MySliderValue); // Make sure we update our slider's value and send update to dashboard */
    MyDashboard.sendUpdates();
  });

  MySlider2.attachCallback([&](int MySliderValue){
    Serial.println("slider2 Triggered: " + String(MySliderValue));
    Slider2Pos = MySliderValue;
    MySlider2.update(MySliderValue);
    MyDashboard.sendUpdates();
  });

  AsyncElegantOTA.begin(&MyServer);   // Start ElegantOTA
  MyServer.begin();                   // Start server
  MyButton.update(DoBlink); 
  
  MySlider1.update( int(500) );
  MyDashboard.sendUpdates();
}

void loop() {
  AsyncElegantOTA.loop(); // this line enables the OTA-updating
  if (DoBlink) {
    BlinkHeartBeatLED(OnBoard_LED,BlinkFreq / 2); // half and half On/Off
  }
  else {
    digitalWrite(OnBoard_LED,LEDStateOff); 
  }

  if ( TimePeriodIsOver(MyTestTimer,1000) ) {
    Slider2Pos++;
    if (Slider2Pos > 10) {
      Slider2Pos = 0;
    }
    MySlider2.update( int(Slider2Pos) ); // your code can change the sliders value too
    MyDashboard.sendUpdates();
  }  
}

vgs

1 Like

Bin im Industrie Design Studium.

Hab nicht viele Hobbys aber zeichnen/malen und Fotographieren und mein Auto ist mein Hobby :sweat_smile:

Hast du deinen Titel mal angepasst ?
Aber so dringend scheint es ja nicht zu sein.

Besser ?

Ok.....was ist mit den vielen anderen Fragen.

OK Industrie-Design.
Schreibe mal noch etwas über die sonstigen Inhalte die man in einem Industrie-Design-Studium so macht. Einfach die Fächer/Vorlesungen aufzählen.
Zeichnen/Malen da würde mir einfallen ein mit Beleuchtungseffekten animiertes Bild.

Ein Schild bei dem durch Ein-/ Ausschalten von LEDs zwei unterschiedliche Worte angezeigt werden können oder zwei Symbole verschiedene angezeigt werden.

Digitales Schlüsselbrett: Da würde ich mir jetzt darunter vorstellen
Mithilfe eines Fingerabdrucksensors die Zuordnung zu einer RFID-Karte managen und auf Basis des Fingerabdrucks die Zutrittsberechtigungen der RFID-Karte konfigurieren.

Aber das ist 10 Nummern zu groß für so ein Projekt.
Ich möchte an dieser Stelle auch eine Warnung aussprechen:
Du hast den Thread als gelöst markiert.

Wenn man glaubt mit dem Beispielcode den ich gepostest habe sei alles in einem halben Tag fertig. Das täuscht gewaltig. Es bedarf dann doch 20 bis 50 Stunden Arbeitseinsatz um selbst dieses Projekt so weit zu verstehen, das man es anpassen und dann präsentieren kann.

Daher sind die Fragen

  • wann ist Fertigstellungsdatum ?
  • investierbare Zeit pro Woche?
  • Wie viel Vorwissen zu Programmierung?
  • Wie viel Vorwissen zu Elektronik?

schon sehr wichtig.

vgs

Da kann man nur hoffen, dass der TO bei seiner Abschlussarbeit auch die Quelle mit angibt, sonst geht das Ganze nach hinten los.
Und vermutlich ist es auch nicht so wichtig, ob es überhaupt funktioniert.

Etwas Funktionierendes lässt sich leichter präsentieren.
Aber bewertet wird natürlich die Präsentation, nicht die Funktion.

Sinnvoll ist das Ganze schon:
Wenn man einen Schlüssel sucht, geht man zum Schlüsselbrett. Wenn er dort nicht ist, braucht man dort einen Taster, der einem beim Weitersuchen hilft.

Genaugenommen braucht man für jeden Schlüsselbund einen eigenen Taster und an jedem Schlüsselbund einen Empfänger (also n+1 Arduinos: n mit einem lauten Piepser und einen mit n Tastern).

Ich würde zur Kommunikation ESP mit WLAN nehmen. Das macht mehr daher als eine Funkfernsteuerung.

alles schon erledigt:

Schlüsselfinder.

Und wie verbinde ich das jetzt mit dem Arduino ? :wink:

Einen Arduino draufkleben??

2 Likes