Arduino – die neusten Beiträge

Wie weiße Linien auf Display bei Arduino UNO entfernen?

Ich habe mir das "LAFVIN 3.5 inch TFT LCD Touch Display Shield Module 480x320 SPI Serial ILI9488 with Touch Pen Compatible with Arduino" (Link Unten) gekauft und wollte es mit dem Arduino Uno ansteuern. Da ich in dem Bereich noch eher unerfahren bin und zu diesem speziellen Display keinerlei Daten online sind, habe ich ChatGPT gebeten einen Testcode dafür zu schreiben:

#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI(); // Verwende die Setup-Datei

void setup() {
 tft.init();
 tft.setRotation(1); // 0-3
 tft.fillScreen(TFT_BLACK);
 tft.setTextColor(TFT_WHITE, TFT_BLACK);
 tft.setTextSize(2);
 tft.setCursor(50, 100);
 tft.println("LAFVIN ILI9488 Test!");
 delay(2000);
 // Farbtest
 tft.fillScreen(TFT_RED);
 delay(500);
 tft.fillScreen(TFT_GREEN);
 delay(500);
 tft.fillScreen(TFT_BLUE);
 delay(500);
 tft.fillScreen(TFT_BLACK);
}

void loop() {
 tft.drawCircle(random(320), random(240), random(10, 30), TFT_YELLOW);
 delay(100);
}

Die KI meinte noch ich soll die User_Select.h-Datei in der TFT_eSPI-Librarie mit dem folgenden Text ersetzen:

#define ILI9488_DRIVER
#define TFT_CS  10
#define TFT_DC  9
#define TFT_RST 8
#define TFT_MOSI 11
#define TFT_SCLK 13
#define TFT_MISO 12
#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF
#define SPI_FREQUENCY 20000000

Der Sketch scheint zu funktionieren (macht was es soll etwas verblast im Hintergrund) allerdings sind im Vordergrund 2 weiße Linien, die sich über das ganze Display ziehen. Alles ist richtig verkabelt:

VCC -5V GND -GND CS- D10 RESET- D8 DC / RS- D9 SDI / MOSI-D11 SCK -D13 LED -5V (über 100Ω) T_CLK - D13 (geteilt) T_CS- D6 T_DIN - D11 (geteilt) T_DO -D12 T_IRQ -Nicht nötig SDO / MISO - D12

An der Hardware kann es auch nicht liegen, da es beim Neustart des Codes, das Display komplett grün färbt, ohne Linien.

Kann mir da jemand bitte helfen?

Link:

https://www.amazon.de/LAFVIN-3-5-inch-TFT-Compatible/dp/B0CQ86T4S9?crid=20WS4KEIOKM1W&dib=eyJ2IjoiMSJ9.J68Ud1C-2nuVCTfL1PxAptfxyB7uGufPDC4iW-x7GS-26tlMEMiJWmaDdIMuBL-Se6Eh-sHANAYNWQYHJhBrouXdfH1srpKN22RU_T9E7FIn-AA_DYVxtWLkYixHTD1oQY_8O0hoYSwvCIusxjze4ckHNoM2NzshzWsuIdxs0nqjFzmtI4-8U-1GqxbEJLwwUbOQ-Yw19sTBZWwVlOBFXWjHIw4QmAE-5DDASf0kEeLT7ktosacJVZEpZsTudJL-zTZzUi4sDUoopEOggP1cY-2F4R5JAbM9ulQB0ehxA3k.pRKfnBU0tCah9ij3m03vj538RU03jJpVmE7MyP249EU&dib_tag=se&keywords=arduino%2Bdisplay&qid=1747677201&refinements=p_36%3A-1700&rnid=82947031&sprefix=arduino%2Bdi%2Caps%2C108&sr=8-11&th=1

Bild zum Beitrag
programmieren, Arduino, C, C (Programmiersprache), Arduino Uno, Arduino IDE

Arduino Schrittmotor?

Hallo,

ich wollte mal aus Interesse einen Schrittmotor mit einem Microcontroller von Arduino Programmieren. Doch irgendwie klappt es nicht.

Ich benutze ein Nema 17 Schrittmotor mit a4988 Motor driver. Bis jetzt wollte ich den Schrittmotor nur mal schritt für schritt bewegen lassen, in dem ich ihn manuell mit dem a4988 fahren lasse. Also habe ich diesen wie folgt belegt:

Vmot: 12V

GND: GND

2B: Motor

2A: Motor

1B: Motor

1A: Motor

VDD: 5V von Arduino

GND: GND von Arduino

EN: Nichts

MS1: Nichts

MS2: Nichts

MS3: Nichts

Reset mit Sleep verbunden

Step: nichts

Dir: nichts

Jetzt habe ich mir gedacht, wenn ich das so anschließe, würde der Motor nichts machen und ich kann, wenn ich auf dem Step Pin 5v draufgebe den Motor einen Schritt, also 1,8 grad bewegen lassen. Also immer einen Impuls draufgebe und wenn ich 200 Impulse draufgebe, würde ich den Motor 360 grad drehen.

Was wirklich passiert: Der Motor rastet aus und vibriert und dreht sich manchmal, manchmal nicht und vibriert halt.

Ich verstehe nicht warum das so ist, eigentlich sollte er doch nichts machen, bis ich auf dem Step Pin einen Impuls draufgebe, dann sollte er 1,8 grad sich drehen und stehen bleiben, bis der nächste Impuls kommt.

Oder sehe ich das falsch?

Kann es sein, dass es billige Motor driver sind, die nicht richtig funktionieren? Ich meine, die waren schon sehr billig und es waren 6 dabei. Oder habe ich einen Fehler gemacht oder nicht richtig verstanden, wie ein Schrittmotor driver funktioniert?

Kann mir da jemand helfen?

Elektromotor, Arduino

Mosfet kaputt?

Ich schalte ein paar LEDs mit einem Mosfet. Dazu nutze ich eine 9V Blockbatterie. Ich verwende den Optokoppler, weil ich die LEDs mit einer eigenen Batterie betreiben möchte und den Microcrontroller dann deutlich leichter anschließen kann. Die Schaltung hatte ich fertig und sie funktionierte und dann habe ich an den LEDs rumgebastelt. Ich habe immer wieder kleinere Sachen geändert und es hat immer funktionert. Auf einmal haben die LEDs immer geleuchtet. In dem Moment, in dem sie tatächlich leuchten sollen, sind sie lediglich etwas heller geworden. Folgendes ist der Schaltplan:

Die LEDs habe ich folgendermaßen angeschlossen:

Insgesamt habe ich die Schaltung zweimal mit etwas anderen LEDs bei der zweiten Schaltung an der selben Batterie. Der Strom beim zweiten Kreis ist allerdings nur um wenige mA höher. Beide haben gleichzeitig aufgehört zu funktionieren.

Ich habe daraufhin anstelle der Mosfets einfache LEDs angeschlossen, um die Optokoppler zu testen. Sie machen genau das, was sie sollen. Danach habe ich die Mosfets wieder eingebaut und den Gate Source Widerstand überbrückt. Die LEDs sind minimal dunkler geworden, haben aber noch geleuchtet. Danach habe ich die Mosfets mit folgender Schaltung getestet:

Das Ergebnis ist das selbe. Die LED leuchtet. Wenn ich den Taster drücke, leuchtet sie etwas heller. Wenn ich den Widerstand überbrücke, leuchtet sie minimal dunkler. Die Mosfets sind im SOT23 Package und zum Testen habe ich die zwei an einen Pin Header gelötet. Ich habe einen neuen gelötet und erst in dieser Schaltung getestet und danach in der eigentlichen. In beiden sperrt der neue wieder zuverlässig.

Dass die anderen Mosfets kaputt sind, ist offensichtlich. Was ich mich frage ist, wie das passiert ist. Da beide gleichzeitig den Geist aufgegeben haben, glaube ich nicht, dass es Zufall war. Aber was an der Schaltung kann sie kaputt gemacht haben? Wie kann ich dafür sorgen, dass sie nicht wieder kaputt gehen, wenn ich neue benutze? Ich betreibe beide weit unter den maximalen Werten von Vds 30V Id 5,7A und Vgs 12V. Wieso sind die kaputt?

Bild zum Beitrag
Lampe, Elektronik, Batterie, Elektrik, Licht, Spannung, Arduino, Diode, Elektriker, Elektrizität, LED, Schaltung, Widerstand

DC Motor Treiber funktioniert nicht.?

Moin,

habe für ein Projekt, was ein Ferngesteuertes Auto involviert, einen DC Motor besorgt, den ich mit nem Arduino Uno programmieren wollte. Habe es mit zwei verschiedenen Treibern probiert, jedoch hat leider nichts geklappt. Egal welche Verbindung und welchen Code ich ausprobiert habe, der Motor hat sich nicht bewegt. Kaputt kann er jedoch allerdings nicht sein, wenn ich ihn direkt an den Akku den ich verwenden werde anschließe, dann dreht er sich. Die Treiber sowie der Arduino sind auch in Ordnung. Hat jemand Tipps bzw. wüsste was ich falsch mache?

Den Motor und die Treiber die ich ausprobiert habe findet ihr jeweils als Link unten.

Danke für die Antworten

Motor:

https://www.amazon.de/greartisan-Elektrische-Reduzierung-zentrisch-Durchmesser/dp/B072R5G5GR/ref=sr_1_7?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=U76NQGGOTCA5&dib=eyJ2IjoiMSJ9.Nn9ca6WnUxhBZaG6uyIuMOQd8us6GGk_SKYUQ8-pylYjFLAJC2GM8rj3KLGxwkXv0OlJw6u3uhfo5F9dap9_EA09tRPFJxa4ATV5DL_vU0aRtONnshrnaP5xxpXWUKzY9MBxi5VP6BRMzqyAjwrjhjW1kG_Ze_dGCwKwN2iAxW17R4BxCkQWkF8xFg6zHpGEKZab9Cc8h6Caqd09GftdwUtp1gBDFNxkwXI2SAkFLP9-OTGzU7ROQmXREvTSF3W3zvvcKLj3hxLX4GKASuivSlEJe_QmV0C945X8Ok2Wh6PW8AKjkjAmw7iImNSJiQDOVgFLPQEYX-iiS5pTRcSTMKJphLEgz03e0TH6yvaiVzCxgOcIMioS1DQf3LZraHo9RUTkuLiAMH08jBFb8bGNnRkdgmShf_uyqLm8fWMFTXGVwB6iqFXGQYOnsVTyTiWz.GVpdtfKctYa1yDZjYrJhq9xqMEdna86Fwl3B4zu0kOo&dib_tag=se&keywords=12v%2Bdc%2Bmotor%2Bartisan&qid=1741720756&sprefix=12v%2Bdc%2Bmotor%2Bartisan%2Caps%2C85&sr=8-7&th=1

Treiber 1:

https://www.amazon.de/BTS7960-Driver-Dealikee-Arduino-Current/dp/B09FLB44TV/ref=sr_1_7?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1YXOOXUQWIIXU&dib=eyJ2IjoiMSJ9.JU0S-u8ULi6ziih5WS752XxZJDyiJAaWfxpt3o_xQUJUEXeKZCYrhWJsH0cl_h1hUbzxwXWVqCcEViRNUO9Yir6_TvKQ9onbDn1Q9EP5Xsv29_kspVgxQUgQjsSgaUB5fk9dKdhnQa7iE60zPs_lgAtS8nHm55spg8xp9DI4Tk48_Y6MvDah2CujcRZK5grUUi6ZZpOD2YSe5uRywcbrg51HtoHgZfyut2vLcC96l4PIUsDn_kVRF4VByXiqwqEKD_McY4wbvefo05imLH7mZTmP6n_-jD6rrhdIixYpZTWAuzvZz9yKe6snngMfrBg9rAHy_6ymIFF7V66WfwMiA1kVuezOBd-wLrhn2dIJ3YxO1RknmuDuqvOzoVc85DN9L8TeutJJc5h0Qymb_WUJxCsUC3DPKa_H3MMc-n4yezxJpxOZ72zfdohmypBQB3RW.orwkKJavl0-FJ0OebjFfqrOpXTkGPNTHB9EZSBRcyno&dib_tag=se&keywords=motor+treiber+ln&qid=1741720777&sprefix=motor+treiber+ln%2Caps%2C91&sr=8-7

Treiber 2:

https://www.amazon.de/HOMSFOU-Schrittmotortreiber-Motortreiberchip-Servomotortreiberplatine-Controllerplatine/dp/B0CRHZM8XV/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1YXOOXUQWIIXU&dib=eyJ2IjoiMSJ9.JU0S-u8ULi6ziih5WS752XxZJDyiJAaWfxpt3o_xQUJUEXeKZCYrhWJsH0cl_h1hUbzxwXWVqCcEViRNUO9Yir6_TvKQ9onbDn1Q9EP5Xsv29_kspVgxQUgQjsSgaUB5fk9dKdhnQa7iE60zPs_lgAtS8nHm55spg8xp9DI4Tk48_Y6MvDah2CujcRZK5grUUi6ZZpOD2YSe5uRywcbrg51HtoHgZfyut2vLcC96l4PIUsDn_kVRF4VByXiqwqEKD_McY4wbvefo05imLH7mZTmP6n_-jD6rrhdIixYpZTWAuzvZz9yKe6snngMfrBg9rAHy_6ymIFF7V66WfwMiA1kVuezOBd-wLrhn2dIJ3YxO1RknmuDuqvOzoVc85DN9L8TeutJJc5h0Qymb_WUJxCsUC3DPKa_H3MMc-n4yezxJpxOZ72zfdohmypBQB3RW.orwkKJavl0-FJ0OebjFfqrOpXTkGPNTHB9EZSBRcyno&dib_tag=se&keywords=motor%2Btreiber%2Bln&qid=1741720777&sprefix=motor%2Btreiber%2Bln%2Caps%2C91&sr=8-3&th=1

PC, Computer, Technik, bauen, programmieren, Arduino, Code, Handwerker, Mechanik, RC, Robotik

Wie messe ich das aktuelle Drehmoment, das an einem Gleichstrommotor wirkt?

Hallo zusammen

Ich möchte gerne einen Motorregler mit einem Gleichstrommotor machen. Man kann sich vorstellen, dass sich am Motor eine Seiltrommel befindet und es wird am Seil gezogen. Das Ziel ist es die Kraft, welche am Seil wirkt, zu regeln. Es gibt 3 Zustände:

- Am Seil wird fest gezogen und der Motor muss abwickeln um die Kraft beizubehalten

- Das Seil wird fest gehalten, aber es bewegt sich nicht. Der Motor dreht zwar nicht, aber es wirkt ein Gegenmoment um die Kraft im Seil zu erhalten.

- Am Seil wird zu wenig gezogen und der Motor wickelt das Seil auf, um die Kraft im Seil zu erhalten.

Nun möchte ich das realisieren. Meine Regelgrösse ist ja das Motordrehmoment. Im Fall 1 und 3 kann man das ja berechnen, in dem man die Drehzahl und die Leistung oder den Strom am Motor misst (können das Motorsteuergeräte?). Dann wäre die Formel ja F = R×I² / (w×r). w ist omega, die Winkelgeschwindigkeit und r der Radius der Seiltrommel. So könnte man ja den Stromregeln und somit auch F regeln. Bei einem Regelkreis würde es ja durch die positive oder negative Stellgrösse automatisch ein auf- oder abwickeln geben. Wie sieht das aber nun im Fall aus, wenn das Seil sich nicht bewegt? (Fall 2). Dann wäre Omegs ja 0 und man würde durch 0 teilen. Aber man kann ja auch dann ein Drehmoment auf den Motor geben, das entgegen haltet. Wie rechnet man in diesem Fall das Bremsmoment des Motors (Gegenmoment) aus, wenn der Motor gar nicht dreht? Und für Fall 1 und 3, misst ein Motordrive / shield den Strom, damit man den zum regeln nutzen kann? Würde das dann mit einem Arduino und einem PID Regler regeln. Die Drehzahl und Winkelgeschwindigkeit könnte ich über einen Encoder ermitteln.

Leistung, Elektronik, Strom, Elektromotor, Kraft, Elektrotechnik, Wissenschaft, Spannung, Motor, Arduino, Automation, Elektrizität, Engineering, Ingenieur, Mechatronik, Physik, Regelung, Widerstand, Drehmoment

Interrupt im Programmablaufplan?

Hey, ich muss gerade für NWT einen PAP zeichnen.in dem Programm kommt auch der interrupt- Befehl vor. Ich weiß aber nicht wie genau ich ihn in den PAP einbauen soll. Der Interrupt-Befehl kommt im setup vor fällt er dann also unter start, so wie die ganzen Deklaration zum Beispiel auch? Wie würdet ihr das machen? Wohin geht der Pfeil dann nieder zurück vom unterprogramm?
meine Idee war diese hier (grobe Skizze, Befehle sind noch nicht eingetragen):

Das Programm hierzu ist übrigens das:

int warteZeit = 500;     
int versagtZeit = 0;
int tasterStatus;
int tasterPin = 2;
int Pin;
int Signal = 0;
int startZeit = 500;
int LED1 = 4;
int LED2 = 5;
int LED3 = 6;
int LED4 = 7;
int LED5 = 8;
int DurchgangsZaehler = 0;

void setup() {
 pinMode(tasterPin, INPUT_PULLUP);         
 pinMode(LED1, OUTPUT);                    
 pinMode(LED2, OUTPUT);
 pinMode(LED3, OUTPUT);
 pinMode(LED4, OUTPUT);
 pinMode(LED5, OUTPUT);
 Serial.begin(9600);                       
 attachInterrupt(digitalPinToInterrupt(tasterPin), tempo, FALLING);     
}

void loop() {
  for ( Pin = LED1; Pin < LED5; Pin++) {  
   digitalWrite(Pin, HIGH);                    
   delay(warteZeit);                         
   digitalWrite(Pin, LOW);                     
   if (Signal == 1) {                       
    for (DurchgangsZaehler = 0; DurchgangsZaehler < 3; DurchgangsZaehler++) { 
     digitalWrite(LED1, HIGH);                
     digitalWrite(LED2, HIGH);
     digitalWrite(LED3, HIGH);
     digitalWrite(LED4, HIGH);
     digitalWrite(LED5, HIGH);
     delay(200);                              
     digitalWrite(LED1, LOW);                
     digitalWrite(LED2, LOW);
     digitalWrite(LED3, LOW);
     digitalWrite(LED4, LOW);
     digitalWrite(LED5, LOW);
     delay(200);                              
    }

    Signal = 0;                              
    warteZeit=startZeit;                       
  }
 }
 for ( Pin = LED5; Pin > LED1; Pin--) {                         
 digitalWrite(Pin,HIGH);
delay(warteZeit);                                                                                      digitalWrite(Pin, LOW);                                       
    if (Signal == 1) {                                          
   for (DurchgangsZaehler = 0; DurchgangsZaehler < 3; DurchgangsZaehler++) {  
     digitalWrite(LED1, HIGH);                                   
     digitalWrite(LED2, HIGH);
     digitalWrite(LED3, HIGH);
     digitalWrite(LED4, HIGH);
     digitalWrite(LED5, HIGH);
     delay(200);                                                
     digitalWrite(LED1, LOW);                                    
     digitalWrite(LED2, LOW);
     digitalWrite(LED3, LOW);
     digitalWrite(LED4, LOW);
     digitalWrite(LED5, LOW);
     delay(200);                                                 
   }
   Signal = 0;                                                   
   warteZeit=startZeit;                                         
  }
 }
 Serial.print("Wartezeit=");                                   
 Serial.println(warteZeit);
}
void tempo() {                                                  
if (digitalRead(tasterPin) == 0 && Pin == 6) {                  
   warteZeit = warteZeit - 50;                                  
   Serial.print("Richtig gedrückt, Wartezeit beträgt nun ");   
   Serial.print(warteZeit);
   Serial.println(" Millisekunden");
 }
 else {                                                       
   Signal = 1;                                                 
}
}

Danke schonmal, falls ihr trotz dieser langen Frage antwortet

Bild zum Beitrag
Cplusplus, Arduino, NWT, Programmiersprache, C (Programmiersprache), PAP, nwt-projekt, Arduino Uno, Arduino IDE

Meistgelesene Beiträge zum Thema Arduino