Poti bringt in unterer hälfte Arduino zum Absturz

Guten Tag alle zusammen,

Wir sollen in der Uni ein Projekt machen, wo etwas dosiert werden soll. Der Poti soll zum einstellen des Zielgewichtes benutzt werden.

Der Poti hängt an GND und V 5V sowie mit dem Mittleren Pin an A5. Die Kabel sind am Poti festgelötet. Zusätzlich zu dem Poti hängen noch ein Button (an A0) und an den Digitalen Pins noch LCD Display, Wägemesszellen Driver und Schrittmotor Driver. Alle GND und V sind auf einer Platine verlötet die dann mit dem Arduino verbunden ist. Der Arduino wird aktuell noch über USB versorgt.

Wie dem Titel zu entnehmen bringt das von mir verwendete Potentiometer (4,7kOhm, linear) meinen Arduino Uno unter dem Wert von 532 (gemessen: 2,4V) zum "Absturz", d.h. es geht nix mehr. Wenn ich ihn wieder hoch drehe, geht alles ganz normal weiter.
Ich habe schon mehrere Foreneinträge dazu gelesen und auch schon die Probleme der Personen eliminiert. Der Widerstand zwischen linken und rechten Pin beträgt ~4,2 kOhm, der Mittlere Pin verläuft linear von 0 Ohm bis ~4,1 kOhm und die Spannung verläuft auch konstant.

Mein Code für das einlesen ist:

while (KnopfStatus==0)
{
  int sensorValue = analogRead(A5);                    //Poti wird eingelesen
  delay(2);                                            //hatte mal was davon gelesen, dass das dem Kondensator helfen soll
  zielGewicht = (sensorValue* (250 / 1023.0));         //Umrechnung auch eine Skala von 250 (g)
  Serial.println(sensorValue);                         //einfach zur Überprüfung
  Serial.println(zielGewicht);
  lcd.setCursor(0,0);
  lcd.print("Zielgewicht:");
  lcd.setCursor(0,1);
  lcd.print(zielGewicht);
  delay(10);                                            //um Display flackern zu verhindern

  if(digitalRead(A0)==HIGH)                             //Abfrage des Button Status um die Schleife zu verlassen
  {
    KnopfStatus=1;
    delay(500);
  }
}

Ich bin mittlerweile relativ ratlos... könnte es an zu vielen Abnehmern liegen? Aber die Stromstärke sollte weiter unten ja geringer werden...

Danke schonmal für Hinweise und Lösungen!

Code bis zur untestbarkeit verstümmelt.
Natürlich auch wohl die Fehlerursache gleich mit abgeschnitten.

Meine Glaskugel schreit: I2C

Da sagt meine Glaskugel: Aua!

1 Like

Was genau heißt "Absturz" ?
Bootet der Uno danach ? Oder was passiert genau ?

Hallo mrgerberus

Nehme ein Ohmmeter und messe das Poti spannungsfrei durch.
An Uni´s soll es eine Häufung von defekten Potis in den Laboren geben :slight_smile:

Da neue Benutzer keine Anhänge hochladen dürfen, wollte ich die Übersichtlichkeit verbessern.

Deine Glaskugel hat recht. Was hat denn I2C für einen Einfluss auf ein Poti?

Was ist denn an den 1023 falsch? :*(

Hier aber gerne der ganze Code:

#include <HX711.h>
#include <LiquidCrystal_I2C.h>
#include <Stepper.h>

#define DOUT  7
#define CLK  8
#define calibration_factor -2265

const int stepPin = 10;
const int dirPin = 11;

int KnopfStatus = 0;

HX711 scale;

long Gewicht = 0;

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()

{

lcd.init();

lcd.backlight();

pinMode(A0,INPUT);

Serial.begin(9600);

scale.begin(DOUT, CLK);

scale.set_scale();

scale.set_scale(calibration_factor);

scale.tare();

 if (scale.is_ready()) 
 {
    long reading = scale.read();
    Serial.print("HX711 reading: ");
    Serial.println(reading);
  } 
  else 
  {
    Serial.println("HX711 not found.");
  }

pinMode(10, OUTPUT);  
 
pinMode(11, OUTPUT); 

digitalWrite(10, LOW);

digitalWrite(11, LOW);

}

void loop() 
{

digitalWrite(dirPin, HIGH);

int sensorValue = analogRead(A5);
int zielGewicht = sensorValue * (510 / 1023.0);

lcd.clear();

while (KnopfStatus==0)
{
  int sensorValue = analogRead(A5);                    //Poti wird eingelesen
  delay(2);                                            //hatte mal was davon gelesen, dass das dem Kondensator helfen soll
  zielGewicht = (sensorValue* (250 / 1023.0));         //Umrechnung auch eine Skala von 250 (g)
  Serial.println(sensorValue);                         //einfach zur Überprüfung
  Serial.println(zielGewicht);
  lcd.setCursor(0,0);
  lcd.print("Zielgewicht:");
  lcd.setCursor(0,1);
  lcd.print(zielGewicht);
  delay(10);                                            //um Display flackern zu verhindern

  if(digitalRead(A0)==HIGH)                             //Abfrage des Button Status um die Schleife zu verlassen
  {
    KnopfStatus=1;
    delay(500);
  }
}
Serial.println(KnopfStatus);

    long reading = scale.read();
    Serial.print("HX711 reading: ");
    Serial.println(reading);
    
if (reading<-250000)
{}

else
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Becher not Found");
  Serial.println("Becher not Found");
  KnopfStatus=0;
  delay(2000);
}

scale.tare();

while (KnopfStatus==1)
{
  Gewicht = (long) scale.get_units(10);
  Serial.println(Gewicht);
  
  while (zielGewicht>Gewicht)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Gewicht");
    lcd.setCursor(0,1);
    lcd.print(Gewicht);
    lcd.setCursor(4,1);
    lcd.print("/");
    lcd.setCursor(5,1);
    lcd.print(zielGewicht);
    Gewicht = (long) scale.get_units(10);

    for(int i=0; i<=400; i++)
    {
    digitalWrite(stepPin, HIGH);
    delay(2);         
    digitalWrite(stepPin, LOW);
    delay(2); 
    }
    
  }

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Fertig");
  
    if(digitalRead(A0)==HIGH)
  {
    KnopfStatus=0;
    delay(5000);
  }
}
}

Also zu 90% hängt es sich einfach nur auf (Dann geht aber auch meistens nix mehr und es ist ein Neustart erforderlich) und zu 10% geht es einfach aus, wie als wäre ein kurzer drinne.

combie meint daß Du I2C verwenden könntest und dieser Bus das Pin A5 verwendet.
Grüße Uwe

1 Like

Wie bereits gesagt, das habe ich schon gemacht... Der Widerstand zwischen Masse und der Mitte ist linear von 0 bis ~4 kOhm und der Widerstand zwischen den beiden äußeren Pins ist immer konstant, unabhängig von der Drehposition.

Poti falsch angechlossen? Evtl. drehst du die 5V damit gegen GND. Ab einer bestimmten Spannung will er dann nicht mehr.
Bitte genauere Angaben machen und, wenn du Bilder hochladen kannst, bitte mach davon ausführlich Gebrauch.

1 Like

Adafruit DS3502 I2C Digitaler 10K Potentiometer Breakout

Ist z.B. so etwas gemeint? Wenn ja, wie schließt man da dann das Poti an?

Und damit hat combies Glaskugel recht.
An Pin A5 liegt der I2C-Bus, da darf dann nicht noch ein Poti dran liegen.

@mrgerberus nimm für das Poti einen anderen analogen Pin.

Das könnte natürlich sein... Ich werde das morgen gleich mal umlöten... Macht das was, wenn ich das falschrum anlöte? natürlich außer, dass die Drehrichtung verändert ist?
Meines (beschränkten) Wissens nach, ist das doch einfach nur eine Spule mit beweglichen Kontakt, der durch die Drehbewegung verschoben wird oder?

Bilder von der Schaltung helfen da nicht weiter... Wir haben als Vorgabe eine echt kleine Box bekommen und da sehe ich selbst durch den Kabelsalat auf den ersten Blick nicht mehr durch.

Pin auf A4 gelegt, ausprobiert, selbes Problem. Es ist hört immer noch bei analogRead(A4)=53x auf.

Auch A4 ist I2C.
Du sollst mal die Grundlagen lernen. Dazu gehört auch das Pinout vom Uno.

1 Like

Ja, das ist das selbe Problem!

Wieviel Werte liefert der ADC?

Okay gut. Auf die Idee muss man erstmal kommen...

Jetzt noch ne Erklärung, wieso der obere Bereich ging, aber unten nicht :thinking:

Vielen Dank auf alle Fälle! :blush:

Wieviel Werte liefert der ADC?

1023?

von 0 bis 1023 sind doch alle Zahlen von 2^10 in Binär... 1024 sollte also nicht möglich sein.
Oder habe ich nen Denkfehler?

Bis zu einem gewissen Bereich (ca. 1,5k) arbeitet das Poti als Pullup Widerstand und den braucht I2C auch. Darunter wird es kritisch und kommt zum Problem....wie du siehst.
Und auf GND gezogen, mag der Bus überhaupt nicht.

1 Like

Besserer Eklährungsversuch:
Du hast das Potentiometer zusammen mit den Pullupwiderstand des I2C Busses eine Spannungsteiler der die HIGH Spannung des Busses auf enen niedrigeren Potential setzt. Also der HIGH Pegel wird nicht mehr die Versorgungsspannung 5V sein sondern Weniger. Ab ca 3V in, Deinem Fall wahrscheinlich näher bei 2,6V) erkennt der ATmega328 den High Spannungspegel nicht mehr als HIGH und darum funktioniert der I2C BUs nicht mehr und blockiert den Controller.
Grüße Uwe

1 Like

Von 0 bis 1023 sind genau 1024 verschiedenen Zahlen.

Tipp:
Das fällt einem leichter, wenn man die Doku liest!