2WD Plattform MINI ARDUMOWER

Achja, das Error Log zeigt mir immer wieder mal meist 2 Fehler gleichzeitig (Battery 2), kann ich dann löschen und beim nächsten Mal einschalten dann wieder (auch bei voller Batterie). Normal kommt der Fehler nicht während der Mini an ist, auch nicht wenn der Buzzer piepst.
 
Zuletzt bearbeitet:
Hallo,

Überwachst du die Batterie mit einem Stromsensor ?, wenn nicht musst du battmonitor = 0 setzen !


// ------ battery -------------------------------------
#if defined (ROBOT_ARDUMOWER)
batMonitor = 0; // monitor battery and charge voltage?
batSwitchOffIfBelow = 21.7; // switch off battery if below voltage (Volt)
batGoHomeIfBelow = 23.7; // drive home voltage (Volt)
startChargingIfBelow = 32.0; // start charging if battery Voltage is below (99999=disabled)
batFull = 29.4; // battery reference Voltage (fully charged) PLEASE ADJUST IF USING A DIFFERENT BATTERY VOLTAGE! FOR a 12V SYSTEM TO 14.4V
batFullCurrent = 0.1; // current flowing when battery is fully charged (amp), (-99999=disabled)
#else // ROBOT_MINI
batMonitor = 0; // monitor battery and charge voltage?
batSwitchOffIfBelow = 5.0; // switch off battery if below voltage (Volt)
batGoHomeIfBelow = 5.5; // drive home voltage (Volt)
startChargingIfBelow = 8.0; // start charging if battery Voltage is below (99999=disabled)
batFull = 8.0; // battery reference Voltage (fully charged) PLEASE ADJUST IF USING A DIFFERENT BATTERY VOLTAGE! FOR a 12V SYSTEM TO 14.4V
batFullCurrent = -99999; // current flowing when battery is fully charged (amp), (-99999=disabled)
#endif

chargingTimeout = 2147483647; // safety timer for charging (ms) 12600000 = 3.5hrs (2147483647=disabled)

#if defined (PCB_1_2) // PCB 1.2
batSwitchOffIfIdle = 0; // switch off battery if idle (minutes, 0=off)
batFactor = voltageDividerUges(47, 5.1, 1.0)*ADC2voltage(1)*10; // ADC to battery voltage factor *10
batChgFactor = voltageDividerUges(47, 5.1, 1.0)*ADC2voltage(1)*10; // ADC to battery voltage factor *10
chgFactor = ADC2voltage(1)*10; // ADC to charging current ampere factor (see mower.h for macros)
#elif defined (PCB_1_3) // PCB 1.3
batSwitchOffIfIdle = 8; // switch off battery if idle (minutes, 0=off)
batFactor = voltageDividerUges(100, 10, 1.0)*ADC2voltage(1)*10; // ADC to battery voltage factor *10
batChgFactor = voltageDividerUges(100, 10, 1.0)*ADC2voltage(1)*10; // ADC to battery voltage factor *10
chgFactor = ADC2voltage(1)*5; // ADC to charging current ampere factor (see mower.h for macros)
DiodeD9 = 0.36; // Spannungsabfall an der Diode D9 auf den 1.3 Board (Die Spannungsanzeige ist zu niedrig verursacht durch die Diode D9) **UZ**
#endif

batChargingCurrentMax = 1.6; // maximum current your charger can devliver
 
Hallo Thorsten,
habe es gerade nochmal ohne batMonitor versucht (alle sonstigen Einstellungen waren bei mir die gleichen). Jetzt kommt nach dem Einschalten nur noch ein langer Piepser. Soweit so gut.

Trotzdem habe ich beim linken Motor immer noch den Piepser an (solange er fährt und nicht volle Fahrt fährt). Also beim Test im seriellen Monitor langsam vorwärts piept es, schnell rückwärts nicht. Einen Nagelneuen L298N habe ich auch kurzerhand verbaut, hier das Selbe.

Gerade hatte ich noch ein Phänomen: Ich hatte ja schon oben erwähnt, dass manchmal der andere, nicht getestete Motor zuckt. Diesmal war es eindeutig - beim Motor Test über Bluetooth rechter Motor angelaufen, stoppt, linker Motor dreht weiter.

Ich glaube, es wird Zeit ein neues Shield zu bestellen und sicherheitshalber gleich noch einen Mega dazu. Ich melde mich, wenn alles da ist.

Gruß
Wolfgang
 
Zuletzt bearbeitet:
Beim Arduino IDE:
Welchen Programmer soll ich denn zum Hochladen des Codes verwenden? Ich glaube da habe ich was verstellt, da klappt nämlich nichts mehr! Timeout! Oder muss ich da vorher etwas löschen??? Hilfe! Sorry ich bin total neu in der Materie.

Desweiteren ist mir aufgefallen das bei der ArduRemote-App unter "Plot/Odometry 2D" die Linie nicht das anzeigt was der mini macht, schiebe ich den mini 1 meter geradeaus und drehe dann um 180grad, dann dreht er auf der Graphik um 360grad. Das liegt sicher an den Einstellungen, die sind aber übers Handy nur schwer machbar... Die Schieberegler sind da ziemlich doof! Wie kann ich das am PC ändern... Im Mower.ccp ändern und Hochladen?

Tante Edit hat den Text korrigiert.
 
Zuletzt bearbeitet:
Schuldigung: Ich meinte die Arduino IDE :cool:
Ich hab da jetzt ArduinoISP.org ausgewählt, den rechner und das Board ca 1000 mal gestartet und jetzt läuft es mit dem Upload.

Ich frage mich aber immer noch wie ich die Werte (z.B Ticks per cm) am PC einstellen kann... Gibt es da eine Möglichkeit oder muss ich das am Handy machen?
Ausserdem fährt der Mini immer gegen die Wand! er hält nicht an, wird auch nicht langsamer... Der Ultraschallsensor zeigt brauchbare Werte.
 
Zuletzt bearbeitet:
Hallo,

Ja natürlich alles was du in der App einstellen kannst, kannst du auch am PC einstellen. Das meiste findest du in der konfig Datei mover.cpp


Lösche bitte Mal deine Einstellungen im eprom und schau ob er sich besser verhält.


Was auch immer du mit deiner arduino ide gemacht hast .... Benutze bitte die richtigen board Einstellungen !
 
Wenn Du es gleich in die Firmware eintragen willst, dann in der mower.cpp (ab Zeile 187 bei mir). Für die Schieber habe ich einen Touchscreen-Stift genommen.

Gruß
Wolfgang
 
Ich hab die Distanzen bei der Sonareinstellung erhöht, nun fährt der Kleine so wie er soll.

Mir ist in der Firmware jedoch aufgefallen das ich irgendetwas falsch verstehe...
Ticks per cm sind hier in der letzten Zeile doch falsch berechnet, oder???

Ich habe 20 "Speichen" am Rad=40 Ticks?
Durchmesser vom Rad sind 7cm.

Ich rechne so: Ticks-pro Umdrehung/(d*PI) = 40 / (7 * 3,1415) =1,818 Ticks

Habe ich hier einen Denkfehler?

Code:
// ------ odometry ------------------------------------
  odometryUse                = 1;          // use odometry?

    #if defined (ROBOT_ARDUMOWER)
      odometryTicksPerRevolution = 1060;       // encoder ticks per one full resolution (without any divider)
        wheelDiameter              = 250;        // wheel diameter (mm)
        odometryWheelBaseCm        = 36;         // wheel-to-wheel distance (cm)
        odoLeftRightCorrection     = true;       // left-right correction for straight lines?
  #else  // ROBOT_MINI   
        odometryTicksPerRevolution = 40;      // encoder ticks per one full resolution
        wheelDiameter              = 70;        // wheel diameter (mm)
        odometryWheelBaseCm        = 13;         // wheel-to-wheel distance (cm)
        odoLeftRightCorrection     = true;          // left-right correction for straight lines?
    #endif
    
  #if defined (PCB_1_3)
        #define DIVIDER_DIP_SWITCH  2             //  sets used PCB odometry divider (2=DIV/2, 4=DIV/4, 8=DIV/8, etc.)
        odometryTicksPerRevolution /= DIVIDER_DIP_SWITCH;        // encoder ticks per one full resolution
  #endif
  odometryTicksPerCm         = ((float)odometryTicksPerRevolution) / (((float)wheelDiameter)/10.0) / (2*3.1415);    // computes encoder ticks per cm (do not change)


Ich habe da noch das Timer-Modul erworben - Da soll man einen Widerstand rausschmeißen und einen überbrücken, da eine Batterie und kein Akku am Modul verbaut ist.
Das bekomme ich wohl hin, jedoch weiß ich nicht welchen Pin ich wo auf dem Board auflegen muss... Wo kann man das herauslesen??? Das muss doch irgendwo im Code zu finden sein, oder?

Entschuldigt die vielen Fragen - Manchmal mag es wirr erscheinen, ich bin halt ganz neu in der Materie.
LG Stefan aus dem Nördlichsten Bundesland ;-)
 
Zuletzt bearbeitet:
Hallo Stefan,
(ohne dass ich in den Code gesehen habe, vielleicht gibt es einen Tick für die positive und einen Tick für die negative Flanke.

Ich habe die RTC ja noch nicht angeschlossen, habe aber im Ardumower Wiki folgendes gefunden:
https://wiki.ardumower.de/index.php?title=PCB_1.2_(English)#Realtime_clock_.28RTC.29

Wiring

The RTC module is connected on the I2C bus of the Arduino Mega (in parallel with any other I2C modules).

DS1307 Module SDA — Arduino SDA Pin
DS1307 Module SCL — Arduino SCL Pin
DS1307 Module VCC (+5V) — Arduino VCC (+5V)
DS1307 Module GND — Arduino GND
Note

If you experience communication problems when using multiple I2C modules on one I2C bus, it is recommended to reduce the length of the cables.

Hoffe das hilft.

Gruß
Wolfgang

[/QUOTE]
 
Ja, das hilft! Ich sollte mehr im Wiki lesen.

Aber zu den Ticks pro cm... Das Ergebnis der Formel liefert einen falschen Wert!
Der Umfang eines Rades misst ca 21cm. (d * PI). Dann muss doch der "Wert pro cm" mal 21 ziemlich genau 40 sein wenn einmal rum gleich 40 Ticks bedeuten. Da kommt aber nur 20 bei raus!
Wie verhält sich denn dein Mini auf der 2D Odometry Karte, hast du das mal beobachtet?
Zeigt die Linie das was der Mini auch tatsächlich zurücklegt? Bei mir kommt das mittlerweile ziemlich gut hin... Auch die Winkel stimmen in etwa. (90grad Kurve)
Ich habe allerdings die Formel geändert und die Wheelbase auf 13cm geändert (den Wert habe ich gemessen!).
 
Hallo Stefan,
leider hatte ich in den letzten Tagen wenig Zeit (Kirschernte, Unkraut spriest, Wein ausgeizen). Heute hatte ich mir kurz die Berechnung odometryTicksPerCm angesehehen und mir ist aufgefallen, dass hier durch (2*3.14) geteilt wird. Bin gerade auch unsicher, wo die 2 herkommt (40/2=20 Ticks???). Muss das Morgen nochmal ansehen.

Mein Mini ist gerade demonitiert. Bei mir auf der Arbeit gibt es ein elektronisches Mikroskop. Mit dessen Hilfe hat mein Kollege mir bestätigt, dass mein Ardu Mega defekt ist - ein Kondensator neben der USB-Buchse durchgebrannt, Messung ergab auch bei ihm 0 Ohm - also Kurzschluss. Und das, obwohl ich Vorkehrungen getroffen habe und Folie auf den USB-Port geklebt habe, damit die 5V Jumper-Lötstelle des Sensor Shield nicht an die USB-Buchse kommt. Auch das Sensor Shield sieht nicht gut aus.

Neue Hardware ist bestellt und da ich davon ausgehe, dass mein Motor-Problem damit gelöst ist (Thorsten hat ja gesagt - wenn ich es nach meiner Anleitung gemacht habe, müsste es auch funktionieren ;)), kann ich dann vielleicht auch endlich die Auto-Funktionen ausprobieren.

An dieser Stelle auch Danke an Thorsten für seine Unterstützung hier, durch die ich hier ein wenig entspannter sein kann.

Für das PDF muss ich noch ein paar Bilder machen und einfügen. Auch fehlt noch eine Liste der Einzelteile und noch ein paar Hinweise (wie z.B., dass man aufpassen muss, dass die Lötstelle des Sensor Shield nicht auf die USB-Buchse kommen darf 😝😝😝).

Gruß aus dem Süden an den Norden und dem Rest der Welt
Wolfgang
 
Ich habe die Lötstellen mit ner Feile runter gefeilt und 3 lagen Isoband zwischengeklebt. Ohne scharfe Kanten hält es hoffentlich!
Meine Formel sieht so aus :
odometryTicksPerCm = ((float)odometryTicksPerRevolution) / ((((float)wheelDiameter)/10.0) * 3.1415);
 
Ich habe mir schon überlegt, ob ich nach entfernen des überstehenden Fußes am Sensor Shield einen Tropfen Heißkleber drauf mache. Meine Isolierband hatte jedenfalls ein Loch.

Deine Formel ist richtig.

Gruß
Wolfgang
 
Wie sieht es eigentlich mit Encodermotoren aus. Hat da wer Erfahrungen? Wie klappt der Anschluss? Hat das mal wer versucht?
 
Hallo Stefan,
da der Mini ja dieselbe Hardware wie der Große benutzen kann, kannst Du mit ein paar Änderungen in der Firmware und geigneter Hardware alles anschließen. Was hast Du denn für Motoren, bzw. Encoder?
 
ES IST SOWEIT: Das Handbuch zum Ardumower Mini ist fertig

Ich würde mich sehr über ein Feedback freuen

Liebe Grüße aus Pforzheim
Wolfgang

EDIT: Bitte Post von Thorsten unten lesen und beachten...
EDIT: Habe die fehlenden Infos ergänzt und als Revision B hier angehängt.
EDIT: Es gibt nicht nur eine Revision des deutschen Handbuchs.... I finally finished the first English booklet for the Ardumower Mini!
 

Anhänge

  • Ardumower Mini Handbuch 202009RevC.pdf
    5,5 MB · Aufrufe: 116
  • Ardumower Mini Handbuch 202009RevC_en.pdf
    5,5 MB · Aufrufe: 152
Zuletzt bearbeitet:
Hallo,

WOW sehr gut geschrieben!

Mir sind zwei Kleinlichkeiten aufgefallen:

1. Wenn du den Battery Monitor verwändest musst du zwangsläufig einen Stromsensor dafür haben:
ZB: INA169 Analog DC Current Sensor Breakout - 60V 2,5A / 5A Marotronics
also
#else // ROBOT_MINI
batMonitor = 0; // monitor battery and charge voltage?


2.

Ich habe den mini mit der 1.0a9-Azurit laufen.

Wenn ihr die Version benutzen wollt müsst ihr zusätzlich noch die Zeilen auskommentieren:

// motors------------------------------------------------------------------------------------------------
#if defined (DRIVER_MC33926)
//case SEN_MOTOR_MOW: return ADCMan.read(pinMotorMowSense); break;
//case SEN_MOTOR_RIGHT: checkMotorFault(); return ADCMan.read(pinMotorRightSense); break;
//case SEN_MOTOR_LEFT: checkMotorFault(); return ADCMan.read(pinMotorLeftSense); break;
//case SEN_MOTOR_MOW_RPM: break; // not used - rpm is upated via interrupt
#endif

oder du musst den Motortreiber Modifizieren:

1594886806734.png


1594887043840.png


VG
Thorsten
 
Hallo Thorsten,
beim Schreiben hatte ich noch an Deine Infos gedacht - und hab sie dann doch wieder vergessen....

Aber vielen Dank für den Tipp mit dem Motortreiber. Sind das alles 10 Ohm oder 10 k/MOhm Widerstände? Eine Anzeige für den Mini würde mir schon gefallen. Darf ich Deinen Schaltplan ins Handbuch übernehmen?

Gruß
Wolfgang
 
Oben