Due Portierung (Achtung: nur experimentell)

Der Sender hat nun eine Strom-Regelung bekommen (über die Feedback- und PWM-Pins des MC-Motortreibers).

Die Verdrahtung wurde aktualisiert (ganz unten auf der Seite): http://www.ardumower.de/index.php/de/anleitungen/2013-11-23-19-50-19/induktion
Änderungen:
Motortreiber M1PWM_nD2 o-- Arduino Nano PWM
Motortreiber M1nSF o-- Arduino Nano Fault
Motortreiber M1FB o-- Arduino Nano Feedback
Motortreiber EN o-- Arduino Nano Enable
Motortreiber SLEW o-- VDD (via Jumper)


Anbei der Sender-Code mit Strom-Regelung.

Sven hat berichtet dass die neue Schleifenvariante nun mit diesem Sender bei ihm (mit 5 bzw. 60 Meter) läuft...
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/sender5_pwm.zip/
 
Zuletzt bearbeitet von einem Moderator:
Hi

The URL www.ardumower.de/index.php/de/anleitunge...3-19-50-19/induktion

gives a 404 error.

Please have you a good URL for the experimental wiring?

thanks

Patrick
 
@Patrick: did you click on it, or did you copy&paste? ;) - If you click on it, it should work...

Alternatively, click on on the German flag at the top left, and choose "Ardumower Themen->Sensoren->Induktionsschleife". The wiring is at the bottom of that page...
 
Der Ardumower Developer Code ist nun immer aktuell unter Google Code zu erreichen (https://code.google.com/p/ardumower/source/checkout). Dort entwickeln wir den Code weiter und erstellen ab und zu gezippte Versionen für die Download-Seite (Stable-Builds).

Den aktuellen Code kann man dort jederzeit einsehen.

Die Passwörter für ein SVN-Checkout findet man dort wenn man unter "Members" auf sein eigenes Account klickt und dann auf "Settings".

Für Windows ist ein SVN-Programm wie z.B. Tortoise SVN empfehlenswert (plug&play).
 
Moin Alexander,

ist der IMU-Code schon einigermaßen auf MEGAs lauffähig?
(Würde den kleinen Kerl gerne umstöpseln ;-)

Liebe Grüße, Heiner
 
Frage an Alexander:

Mainboard:
Ich bau gerade die Elektronik für das neue Gehäuse neu auf und
frage mich natürlich wie ich es so gestalten kann, das es nachher
mit der neuen Schleifenvariante keine Probleme gibt.
Den Nano für IMU habe ich noch auf der zentralen Platine drauf und
den Nano für die "alte" Schleifenauswertung wollte ich sepperat setzen.

Oder soll ich warten bis die neue Version spruchreif ist ?

Sender:
Die alte Endstufe kann man doch brücken und hätte somit max 4A
Dauerleistung. Wenn man dann noch ein Stromsensor in die Schleife
setzt, hätte man doch fast alles wie bei der neuen Endstufe.
Ich frage nur weil ich dann nicht alles neu kaufen müßte und die
alten Teile verwenden könnte. Softwaremäßig müßte bei der neuen
Sendersoftware fast nichts geändert werden (außer Fault)
 
Wir feilen noch an einigen Details, z.B. kommt es noch zu Störungen im Zusammenhang mit dem Ardumower-Chassis (wo Spule und Getriebemotor sehr nahe sitzen).

Den Sender kann man im Prinzip mit dem alten Motortreiber und einem Stromsensor aufbauen, wir haben dies allerdings (noch) nicht ausprobiert - es wäre ein Versuch wert...

Nachtrag: der FAULT Pin wird nicht wirklich benötigt - beim MC-Treiber könnte er auch nur ausgwertet werden wenn ohne PWM (also ohne Stromregelung) gearbeitet würde...
 
if ( (dutyPWM == 255) && (digitalRead(pinFault) == LOW) ) {
duty = 0;
analogWrite(pinPWM, duty);
fault();

Muß diese Zeile auskommentiert werden ?
 
Hi,

da auch ich mir einen Mover baue, wollte ich die neue Version testen.

Erste Fehlermeldung :

gps.cpp:1:17: fatal error: GPS.h: No such file or directory
#include "GPS.h"

unter Linux ist die Groß/Kleinschreibung wichtig
also
#include "gps.h"


Zweite Fehlermeldung:

fix_fft.cpp:52:7: error: 'prog_int8_t' does not name a type
const prog_int8_t Sinewave[N_WAVE] PROGMEM = {
^
In file included from fix_fft.cpp:1:0:
fix_fft.cpp: In function 'int8_t SIN8(int16_t)':
fix_fft.cpp:100:29: error: 'Sinewave' was not declared in this scope
return pgm_read_byte_near(Sinewave+n);
^
fix_fft.cpp: In function 'int8_t COS8(int16_t)':
fix_fft.cpp:106:29: error: 'Sinewave' was not declared in this scope
return pgm_read_byte_near(Sinewave+n);

und da hab ich keinen Plan

Stefan
 
@stefan:

Stefan schrieb:
Hi,

da auch ich mir einen Mover baue, wollte ich die neue Version testen...

Ich gehe mal davon aus, dass Du mit der Version aus dem SVN testest (https://code.google.com/p/ardumower/source/checkout)-

Probier mal folgendes (http://forum.arduino.cc/index.php?topic=165518.0):

const int8_t PROGMEM Sinewave[N_WAVE] = ...

Falls das geht, bitte kurz Nachricht und ich ändere ich den Code ab.

Unter Windows kompiliert es übrings :)
 
Zuletzt bearbeitet von einem Moderator:
Unter Windows funktioniert auch die Serielle Konsole besser :(

Da läuft er durch. Dafür kommt jetzt :


Code:
pfod.cpp: In function 'void sendMotorMenu(boolean)':
pfod.cpp:184:66: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a02", F("Current max"), motorCurrentMax, "", 1, 255);       
                                                                  ^
pfod.cpp:185:73: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a03", F("Sense zero l"), motorSenseLeftZero, "", 1, 600, 0);       
                                                                         ^
pfod.cpp:186:74: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a04", F("Sense zero r"), motorSenseRightZero, "", 1, 600, 0);           
                                                                          ^
pfod.cpp:191:62: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a06", F("Speed max"), motorSpeedMax, "", 1, 255);    
                                                              ^
pfod.cpp:192:60: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a11", F("Accel"), motorAccel, "", 0.001, 0.05);    
                                                            ^
pfod.cpp:193:70: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a07", F("Roll time max"), motorRollTimeMax, "", 1, 8000);     
                                                                      ^
pfod.cpp:194:69: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a08", F("Reverse time"), motorReverseTime, "", 1, 8000);     
                                                                     ^
pfod.cpp:195:72: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a09", F("Forw time max"), motorForwTimeMax, "", 10, 80000);       
                                                                        ^
pfod.cpp:196:83: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a12", F("Bidir speed ratio 1"), motorBiDirSpeedRatio1, "", 0.01, 1.0);       
                                                                                   ^
pfod.cpp:197:83: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("a13", F("Bidir speed ratio 2"), motorBiDirSpeedRatio2, "", 0.01, 1.0);       
                                                                                   ^
pfod.cpp: In function 'void sendMowMenu(boolean)':
pfod.cpp:235:69: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("o02", F("Current max"), motorMowCurrentMax, "", 1, 255);         
                                                                     ^
pfod.cpp:236:70: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("o03", F("Sense zero"), motorMowSenseZero, "", 1, 600, 0);        
                                                                      ^
pfod.cpp:239:65: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("o05", F("Speed max"), motorMowSpeedMax, "", 1, 255);       
                                                                 ^
pfod.cpp:244:59: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("o08", F("RPM set"), motorMowRPM, "", 1, 8000);     
                                                           ^
pfod.cpp: In function 'void sendSonarMenu(boolean)':
pfod.cpp:303:71: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("d03", F("Trigger below"), sonarTriggerBelow, "", 1, 3000);       
                                                                       ^
pfod.cpp: In function 'void sendPerimeterMenu(boolean)':
pfod.cpp:321:78: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("e05", F("Track roll time"), perimeterTrackRollTime, "", 1, 8000);       
                                                                              ^
pfod.cpp:322:76: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("e06", F("Track rev time"), perimeterTrackRevTime, "", 1, 8000);         
                                                                            ^
pfod.cpp:323:58: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendPIDSlider("e07", F("Track"), perimeterPid, 0.1, 100);  
                                                          ^
pfod.cpp: In function 'void sendImuMenu(boolean)':
pfod.cpp:368:52: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendPIDSlider("g05", F("Dir"), imuDirPid, 0.1, 20);
                                                    ^
pfod.cpp:369:54: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendPIDSlider("g06", F("Roll"), imuRollPid, 0.1, 30);    
                                                      ^
pfod.cpp: In function 'void sendBatteryMenu(boolean)':
pfod.cpp:402:73: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("j02", F("Go home if below"), batGoHomeIfBelow, "", 0.1, 30);  
                                                                         ^
pfod.cpp:403:79: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("j03", F("Switch off if below"), batSwitchOffIfBelow, "", 0.1, 30);  
                                                                               ^
pfod.cpp:409:74: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("j05", F("Charge sense zero"), chgSenseZero, "", 1, 600, 400);       
                                                                          ^
pfod.cpp:410:64: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("j06", F("Battery factor"), batFactor, "", 0.1, 20);     
                                                                ^
pfod.cpp:411:63: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("j07", F("Charge factor"), chgFactor, "", 0.1, 20);     
                                                               ^
pfod.cpp: In function 'void sendStationMenu(boolean)':
pfod.cpp:427:67: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("k00", F("Reverse time"), stationRevTime, "", 1, 8000);     
                                                                   ^
pfod.cpp:428:65: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("k01", F("Roll time"), stationRollTime, "", 1, 8000);       
                                                                 ^
pfod.cpp:429:65: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("k02", F("Forw time"), stationForwTime, "", 1, 8000);         
                                                                 ^
pfod.cpp: In function 'void sendOdometryMenu(boolean)':
pfod.cpp:448:71: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("l01", F("Ticks per cm"), odometryTicksPerCm, "", 0.1, 30);       
                                                                       ^
pfod.cpp:449:73: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("l02", F("Wheel base cm"), odometryWheelBaseCm, "", 0.1, 50);         
                                                                         ^
pfod.cpp: In function 'void sendTimerDetailMenu(int, boolean)':
pfod.cpp:496:87: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("p1"+sidx, F("Start hour "), timer[timerIdx].startTime.hour, "", 1, 23, 0);       
                                                                                       ^
pfod.cpp:497:91: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("p2"+sidx, F("Start minute "), timer[timerIdx].startTime.minute, "", 1, 59, 0);         
                                                                                           ^
pfod.cpp:498:85: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("p3"+sidx, F("Stop hour "), timer[timerIdx].stopTime.hour, "", 1, 23, 0);       
                                                                                     ^
pfod.cpp:499:89: error: could not convert '(const __FlashStringHelper*)({...})' from 'const __FlashStringHelper*' to 'String'
   sendSlider("p4"+sidx, F("Stop minute "), timer[timerIdx].stopTime.minute, "", 1, 59, 0);             
                                                                                         ^
pfod.cpp:493:7: warning: unused variable 'startm' [-Wunused-variable]
   int startm = time2minutes(timer[timerIdx].startTime);
       ^
pfod.cpp:494:7: warning: unused variable 'stopm' [-Wunused-variable]
   int stopm = time2minutes(timer[timerIdx].stopTime);
       ^


Ich werd es mal unter Windows probieren, sehe aber eigentlich nicht warum ?

Gruss Stefan
 
So.

bei den pfod Dateien gibt es einen Unterschied ( der bestimmt beabsichtigt ist)


SVN
sendSlider("a02", F("Current max"), motorCurrentMax, "", 1, 255);

0.9.3.0
sendSlider("a02", "Current max", motorCurrentMax, "", 1, 255);

Da ich mich damit überhaupt nicht auskenne,hab ich natürlich auch keine Ahnung warum das jetzt mit F(..) gesetzt ist denn
an den Parametern für den Funktionsaufruf hat sich ja nichts geändert ?

Änderung

Wer lesen kann ist klar im Vorteil :)

Version 1.0 of the Arduino IDE introduced the F() syntax for storing strings in flash memory rather than RAM. e.g.

Serial.println(F("This string will be stored in flash memory"));

Die Daten sollen also im flash gespeichert werden ? aber ist das bei Serialprint nötig ?

Gruss Stefan

Konnte unter Win noch nicht testen :)
 
Hallo zusammen,

erstmal ein großes Lob für das tolle Projekt! Heute hatte ich endlich mal Zeit meinen Mower auszuprobieren. Nach anfänglichen Problemen mit der Software funktioniert nun schon ein Großteil.

Als Software hab ich die "ardumower_5-25" auf dem Duo. Mein Sender Arbeitet mit der "sender5_pwm" und einem L298N. Dieser wurde bei 5V nicht einmal warm. Die Schleifenerkennung hat mit einer Spule aus einem Relay (hatte zur schnelle nichts anderes ;) ) super funktioniert. Sogar das Tracking ging ohne Probleme.

Leider funktioniert aber der Automodus nicht. Er fährt nach dem Starten erst einmal rückwärts, dreht sich, fährt nochmal rückwärts. Nach einigen malen fängt er dann zu piepsen an und zeigt Error. In der PfodApp zählt er den Mow Sensor hoch. Eigentlich hab ich aber die Modulation ausgeschalten und den Sensor auf maximal. Ein Motortreiber für den Mähteller ist noch keiner angeschlossen am Duo.
Habt ihr vielleicht eine Idee woran es liegen könnte?

Als Motortreiber möchte ich ein Brushlessregler aus dem Modellbau verwenden. Dietmar hat das mit der Servo.h schon im Thread angesprochen aber hab leider keine Lösung dafür gefunden...

Ist es außerdem Möglich nur ein US-Sensor zu verwenden? Wenn ich den centre anschließe und die Funktion aktiviere triggern die links und rechts immer da sie unter der eingestellten Schwelle liegen.

Ich hoff ihr könnt mir helfen.

Greez Chrisser
 
Möchte mich aus meinem Schottland Trip zurückmelden.

Diese Woche muss ich noch einiges wegarbeiten, ua. hat der Sturm eine sehr große Kirsche gefällt, aber ab nächste Woche werde ich weiter testen.

Das servo.h Problem werde ich vorläufig mit einem Nano umgehen. Das sollte eigentlich gehen.
 
Hallo,

ich wollte mal die neue Version testen ( das letztens nicht ging lag an der alten IDE 1.0.5)

aber leider bekomme ich wieder eine Fehlermeldung. Egal ob ich als Board Mega oder Due einstelle

Arduino: 1.5.6-r2 (Linux), Board: "Arduino Due (Native USB Port)"

Build options changed, rebuilding all
Verwende die Bibliothek Wire im Ordner: /home/stefan/src/arduino-1.5.6-r2/hardware/arduino/sam/libraries/Wire (legacy)

/home/stefan/src/arduino-1.5.6-r2/hardware/tools/g++_arm_none_eabi/bin/arm-none-eabi-g++ -c -g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -Dprintf=iprintf -mcpu=cortex-m3 -DF_CPU=84000000L -DARDUINO=156 -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM -D__SAM3X8E__ -mthumb -DUSB_VID=0x2341 -DUSB_PID=0x003e -DUSBCON -DUSB_MANUFACTURER="Unknown" -DUSB_PRODUCT="Arduino Due" -I/home/stefan/src/arduino-1.5.6-r2/hardware/arduino/sam/system/libsam -I/home/stefan/src/arduino-1.5.6-r2/hardware/arduino/sam/system/CMSIS/CMSIS/Include/ -I/home/stefan/src/arduino-1.5.6-r2/hardware/arduino/sam/system/CMSIS/Device/ATMEL/ -I/home/stefan/src/arduino-1.5.6-r2/hardware/arduino/sam/cores/arduino -I/home/stefan/src/arduino-1.5.6-r2/hardware/arduino/sam/variants/arduino_due_x -I/home/stefan/src/arduino-1.5.6-r2/hardware/arduino/sam/libraries/Wire /tmp/build4120777386411088311.tmp/ardumower.cpp -o /tmp/build4120777386411088311.tmp/ardumower.cpp.o
In file included from ardumower.ino:92:
/tmp/build4120777386411088311.tmp/config.h: In function 'void config()':
/tmp/build4120777386411088311.tmp/config.h:257: error: no matching function for call to 'ADCManager::setCapture(const uint8_t&, int)'
/tmp/build4120777386411088311.tmp/adcman.h:25: note: candidates are: void ADCManager::setCapture(byte, byte, boolean)
/tmp/build4120777386411088311.tmp/config.h:258: error: no matching function for call to 'ADCManager::setCapture(const uint8_t&, int)'
/tmp/build4120777386411088311.tmp/adcman.h:25: note: candidates are: void ADCManager::setCapture(byte, byte, boolean)
/tmp/build4120777386411088311.tmp/config.h:259: error: no matching function for call to 'ADCManager::setCapture(const uint8_t&, int)'
/tmp/build4120777386411088311.tmp/adcman.h:25: note: candidates are: void ADCManager::setCapture(byte, byte, boolean)


Ansonsten müsste ich doch den Code auch auf der selben Hardware ( bis auf die Perimeter) ausführen können wie den alten aus dem Downloadbereich oder hab ich da was falsch verstanden ?

Gruss Stefan
 
Da wird gerade fleißig am Code gearbeitet...

@Sven: Was meinst Du, sollen wir uns darauf einigen, dass der Code im SVN immer kompilieren soll? :) Anscheinend wurde vor dem Einchecken das Kompilieren nicht getestet...;-)
 
Das wäre auf jeden Fall super. Ich habe mir eine Batch-Datei gebastelt, die mir immer beim PC-Start das aktuelle Ardumower-Paket runtersaugt. Da ich ja momentan noch am Code-Durchackern sitze, ob ich auch alles verstehe, ist das eigentlich eine schöne Sache.

Gruß,
Jem
 
Oben