Ein- Ausgabe beim Arduino

Fertige Geräte mit Bilden, Schaltungen, Programmen vorstellen.
Benutzeravatar
ingo46
Beiträge: 23
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von ingo46 »

Und so sieht das Gehäuse zusammengesteckt aus. Das Material ist Hartschaum-PVC 3mm.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Franz54
Beiträge: 19
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82377 Penzberg
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von Franz54 »

ingo46 hat geschrieben:
Mo 29. Jun 2020, 22:56
Wie schnell können Daten übertragen werden?
Das ist die Serial Schnittstelle. Ich glaube, ich habe mit 9600 gearbeitet. Geht sicher auch erheblich schneller. Aber man hat ja nur Daten, keine Grafiken oder sonst was großes. Man hat die Grafische Oberfläche ja voll und ganz auf dem Nextion. Was man über die Schnittstelle schiebt sind Daten die man aus dem Arduino auf dem Display ausgeben will, und die andere Richtung, Daten die man am Display eingibt und an den Arduino weitergibt. Das Problem war eigentlich zum Beispiel diese Scalen Grafisch zu erstellen, die ich hier gezeigt habe. Die Scala ist eine Grafik wie man will und der Zeiger ist ein Strich der sich wie ein Zeiger dreht. Ich finde es schade, dass es von Nextion keine Dateien gibt mit Bildern die man am Nextion nutzen kann. Das würde viel erleichtern, und dann auch viel mehr Leute zum Nextion bringen. Vielleicht auch ein paar fertige Display Seiten, mit Grafiken die man für seine Programme nutzen kann. Man kann ja beim Nextion so viele Bildschirmseiten vorbereiten wie man will, und die dann von Arduino aus auswählen. Man wählt also am Arduino dann nur noch eine Seite aus, die erscheint dann extrem schnell am Display, dort kann man dann zum Beispiel auf einer Daten - Eingabemaske irgend was eingeben, abschicken, und schon hat man die Daten am Arduino. Dann sagt der Arduino, dass jetzt eine andere Maske am Display ausgegeben wird, u.s.w.

Die Arbeit ist nur immer, diese Grafischen Bildschirmseiten erst mal zu estellen. Dann ist die Kommunikation mit dem Display nicht so wild.

Ich schlage mal vor, wir lassen das Nextion hier im Thema mal zuende gehen, und gehen auf dein Projekt. UNd wenn ich mit dem Nextion wieder was anfange, dann eröffne ich ein eigenes Nextion Thema.

Grüße
Franz :(iii):
Zuletzt geändert von Franz54 am Di 30. Jun 2020, 16:17, insgesamt 2-mal geändert.

Benutzeravatar
Franz54
Beiträge: 19
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82377 Penzberg
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von Franz54 »

ingo46 hat geschrieben:
Di 30. Jun 2020, 08:38
Und so sieht das Gehäuse zusammengesteckt aus. Das Material ist Hartschaum-PVC 3mm.
Ich schätze mal, mit dem Gehäuse fräsen ist man besser beraten als mit dem 3D Druck. Mir gehen eigentlich drei Maschinen ab. Eine 3D Fräse, eine Tischdrehbank und ein Schutzgas Schweißgerät. Naja o.k., vielleicht auch noch der 3D Drucker, denn manche Teile sind besser auszudrucken, als zu fräsen. Zahnräder zum Beispiel. Das zu meiner Elektronischen Ausrüstung, dann wäre ich gut aufgestellt. Und man würde mich wohl immer am Abend aus der Werkstatt zerren müßen, weil ich dann immer was zu tun hätte. :(oo): Das wäre dann der einzige Raum den ich benötige, noch Tisch, Bett und Kühlschrank rein, und alles ist gut :(V):

Bei Gehäusen werde ich wohl wie bisher auf fertige zurück greifen müßen, weil ich keine Fräse und keinen Drucker habe :sad: .....oder einen Fensterbrüstungs-Kabelkanal. :)

Benutzeravatar
ingo46
Beiträge: 23
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von ingo46 »

Meine Fräse (CNC-Portalfräse) war ein Bausatz, die Genauigkeit liegt bei 0,1 mm bei einer Tischgröße von 420 x 310 mm, maximal kann ich damit Alublech fräsen - aber es geht schnell. Es werden 2D Zeichnungen benötigt. (Preis lag bei ca 1200 €)

3D-Druck hingegen dauert sehr lange - 12 Stunden sind keine Seltenheit. Aber man das Objekt als 3D-Zeichnung erstellen! Die Genauigkeit liegt bei 0,5 mm. Den 3D-Drucker habe ich auch vor mehreren Jahren als Bausatz gekauft. (Preis lag bei ca 1500 €)

Schweißen, Drehen kann ich gar nicht - da brauche ich die Hilfe von Freunden (ich bin Mitglied in einem Modellbauverein!)

Vor mehr als 50 Jahren habe ich mal eine 3jährige Ausbildung als technischer Zeichner gemacht - deshalb sind Zeichnungen in 2D oder 3D kein Problem. Aber mit dem Fertigen mit Säge, Feile usw. habe ich meine Probleme - somit sind Fräse und 3D-Druck für mich ideal.

Ingo

Benutzeravatar
ingo46
Beiträge: 23
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von ingo46 »

Standartelement für die Eingabe ist bei mir ein Stick - ersetzt 5 Taster. So ein Stick kostet weniger als 2 €. Für die Befestigung habe ich eine kleine Platte gefräst, so dass eine Befestigung auf der Bodenplatte wie auf der Deckplatte des Gehäuses möglich ist. Durch Langlöcher ist auch eine Justierung in der x- und Y-Achse möglich. Die Abfrage erfolgt durch 'Digital-In' für die Z-Richtung und 2x 'Analog-In' für X und Y.
Die Verbindung zum Arduino erfolgt über Kabel an eine abgewinkelte Stiftleiste (auf entsprechende Anzahl von Stiften gekürzt).
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Franz54
Beiträge: 19
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82377 Penzberg
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von Franz54 »

Ja, das sind schon mal zwei wichtige Maschinchen die mir fehlen. Da noch ne Drehbank dazu, dann ist das wichtigste eigentlich klar. Schweißen ist nicht sooo wichtig.

Ich habe dir geantwortet wegen dem Code in den Beitrag setzen. Das geht mit button hier oben fünfter von links. Dieser "</>". Dann bekommst du das hier: [ code ] Und schreibst deinen Code hier dazwischen rein [ /code]

Schönen Abend
Franz

Benutzeravatar
ingo46
Beiträge: 23
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von ingo46 »

Anbindung an den Arduinio:

Code: Alles auswählen

// #define STICK_R   // reverse
// Geber Menue 1
const byte MX1 = A0;
const byte MY1 = A1;
const byte TASTER1 = 20; // Interrupt 1
// VCC
// GND

// INTERRUPTSTEUERUNG -----------------
pinMode(TASTER1, INPUT_PULLUP);
  
//  Taster Interrupt
attachInterrupt(digitalPinToInterrupt(TASTER1), Menue_Button, FALLING);

Bedienung:
Menüauswahl: Bewegung Y-Achse
Übernehmen ins Untermenü: Bewegung X-Achse
Untermenüauswahl: Bewegung Y-Achse
- Wertauswahl: Wert ändern: Bewegung X-Achse
- Programmwahl: Starten: Bewegung X-Achse

Mit der z-Achse (Stick-Taster) schalte ich von Menü auf Programm hin und her. Damit sind während des Programmlaufs Parameter zu verändern.

Die Stick-Steuerung übernimmt: stickgeber.h

Code: Alles auswählen

#ifndef STICKGEBER_H_
#define STICKGEBER_H_

boolean stick1 = 0;           // Stick Steuerung
int     pinold = 0;           // Stick zurücksetzen durch letzten Stick

// #######################################################################

int stick(int pin, int min, int max, int St_wert) // stick + - 1 vortlaufend
{  
      #ifdef STICK_R 
              if(analogRead(pin) > 700 )
              St_wert++;
              if(analogRead(pin) < 200 )
              St_wert--;
      #else
              if(analogRead(pin) > 700 )
              St_wert--;
              if(analogRead(pin) < 200 )
              St_wert++;
      #endif
  
            if(St_wert > max ) St_wert = max;
            if(St_wert < min ) St_wert = min;
                      
            return St_wert;
}

// -----------------------------------------------------------------------

int stickTast(int pin, int min, int max, int St_wert)
{    // INT um genau 1 verändern
  
     #ifdef STICK_R 
      if(analogRead(pin) > 700 && stick1 == 0)
        {
        St_wert++;
        stick1 = 1;   
        pinold = pin;   
        }
    
      if(analogRead(pin) < 200 && stick1 == 0)
        {
        St_wert--;
        stick1 = 1;
        pinold = pin;
        }
     #else 
      if(analogRead(pin) > 700  && stick1 == 0)
        {
        St_wert--;
        stick1 = 1;   
        pinold = pin;   
        }
    
      if(analogRead(pin) < 200  && stick1 == 0)
        {
         St_wert++;
         stick1 = 1;
         pinold = pin;
        }
     #endif
     
     if(analogRead(pin) <650 && analogRead(pin) >250 && pin == pinold)
     {        
        stick1 = 0;
     }

     if(St_wert > max ) St_wert = min;
     if(St_wert < min ) St_wert = max;

     return St_wert;
}

// -----------------------------------------------------------------------

float stickTastF(int pin, float min, float max, float St_wert, float wert)
{    // FLOAT_WERT genau um wert verändern
  
     #ifdef STICK_R 
      if(analogRead(pin) > 700 && St_wert < max && stick1 == 0)
        {
        St_wert+=wert;
        stick1 = 1;   
        pinold = pin;   
        }
    
      if(analogRead(pin) < 200 && St_wert > min && stick1 == 0)
        {
        St_wert-=wert;
        stick1 = 1;
        pinold = pin;
        }
     #else
      if(analogRead(pin) > 700 && wert > min && stick1 == 0)
        {
        St_wert-=wert;
        stick1 = 1;   
        pinold = pin;   
      }
    
      if(analogRead(pin) < 200 && wert < max && stick1 == 0)
        {
        St_wert+=wert;
        stick1 = 1;
        pinold = pin;
        }
     #endif
     
     if(analogRead(pin) <650 && analogRead(pin) >250 && pin == pinold)
     {        
        stick1 = 0;
     }

     return St_wert;
}

// #######################################################################

#endif /* ALARMS_H_ */
Durch Auslösen des Interrupts durch TASTER1 wird die Funktion Menue_Button() und das Hautmenü aufgerufen:

Code: Alles auswählen

void Menue_Button()
{
     //zurück Hauptmenue
     
    if((menuebutton_old + 500) < millis()) 
    {      
      menue_ein =! menue_ein;                 // Hauptmenue oder Untermenue
      startbit = 0;                           // TFT nur beim ersten Aufruf Beschreiben 
      if (PROG_ein == 1)                      // Programm-Modus wieder ausschalten
      {
        PROG_ein = 0 ; 
        menue_ein = 0 ;
      } 
      menuebutton_old = millis();      
    }  
}


Benutzeravatar
ingo46
Beiträge: 23
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von ingo46 »

Durch das TFT sind ja die Pins 22-53 belegt - sie werden zwar nicht alle benutzt, aber man kommt nicht dran. Für manche Anwendungen benötigt man jedoch viele digitale Ausgänge. Mein Ampelprojekt für eine Modellbahn war zunächst für einen Nano konzipiert. Da gibts nicht viele Ausgänge. Es mussten aber 12 Ampeln (= 36 LEDs) gesteuert werden. Somit habe ich folge Lösung gefunden.

Ausgabe über ein Shiftregister:

Code: Alles auswählen

// Einstellungen Schieberegister

// Anzahl der Ausgänge (in 8er Schritten)
int anzSh = 36;  

// verbunden mit SH_CP (pin 11) des 74HC595
#define shiftPin 12
// verbunden mit ST_CP (pin 12)des 74HC595
#define storePin 11
// verbunden mit DS (pin 14) des 74HC595
#define dataPin  10
mit der dazugehörigen Ausgabe:

Code: Alles auswählen

void SHIFTOUT() {
  int e = anzSh-1;
  int i;
     
  digitalWrite(storePin, LOW);
  
  for (i=e; i > -1; i--) {
    digitalWrite(shiftPin, LOW);
    digitalWrite(dataPin, OUT[i]);
    digitalWrite(shiftPin, HIGH);
  }
  digitalWrite(storePin, HIGH);

}

Benutzeravatar
ingo46
Beiträge: 23
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von ingo46 »

Benötige ich zusätzliche oder einfach nur höher auflösende Analoge Eingänge (von 10 Bit auf 16 Bit) entsprechend einer Auflösung von 0.1875 mV je Bit, so verwende ich den ADS1115 von Adafruit. Ein Modul hat vier analoge Eingänge. Es können 4 Module unter I2C eingelesen werden. Die Genauigkeit des anlogen Eingangs des Arduinos ist nicht hoch, die letzten Bits ändern sich stark.

Code: Alles auswählen

#include <Adafruit_ADS1015.h>     // Hardware-specific library ADS1015/ADS1115

Adafruit_ADS1115 ads0 (0x48);
Adafruit_ADS1115 ads1 (0x49);
Einlesefunktion:

Code: Alles auswählen

void lese_sensoren()
{
   int16_t adc0, adc1, adc2, adc3, adc4, adc5, adc6, adc7;

   adc0 = ads0.readADC_SingleEnded(0); 
   adc1 = ads0.readADC_SingleEnded(1);
   ...
   adc4 = ads1.readADC_SingleEnded(0);
   ...
   adc7 = ads1.readADC_SingleEnded(3);
 }
 
Zuletzt geändert von ingo46 am Sa 4. Jul 2020, 12:28, insgesamt 1-mal geändert.

Benutzeravatar
ingo46
Beiträge: 23
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Ein- Ausgabe beim Arduino

Beitrag von ingo46 »

Manchmal muss der Arduino auch große Lasten steuern, z.B. belaste ich einen Lipo-Akku mit bis zu ca. 2000 Watt. Ein Solid-State-Relais (SSR-40DD) kann direkt mit dem Arduino verbunden werden.

Ein SSR-40DD bekommt man ab ca. 6 €. Steuerspannung 3-32 Volt. Schaltspannung 5-60 Volt. Schaltstrom bis 40 A.

Für Volllast sind 6 Panels notwendig!!! Wird ganz schön heiß und hell!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten

Zurück zu „Fertige Projekte Vorstellen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast