Robot-Car-Projekt

Begonnen von Ottmar, 10.06.2023, 11:06:29 CEST

Vorheriges Thema - Nächstes Thema

picass

Zitat von: Ottmar in 14.06.2023, 23:59:39 CESTWelche Frage an mich war das?
Eher keine Frage, sondern der Hinweis, dass aus meiner Sicht die Steuerung eines Fahrzeugs mit "echter" Lenkung wesentlich einfacher handzuhaben wäre. Man sieht es ja auch an dem von dir genannten ruckhaften Verhalten: so steuern Panzer. Das mag heutzutage - z.B. bei den "Leo's" - mithilfe von Elektronik auch feinfühlig ablaufen, aber ohne die würde nur "geruckt". Aber du hast dich ja für die eine Version entschieden, und es ist mitnichten meine Absicht, dich von deinem Weg abbringen zu wollen.
Guter Erfolg bei deinen weiteren Arbeiten! :)
Grüße, picass

Ottmar

RoboCar Info 02 Erste Ergebnisse

Hallo,
heute mal ein kleine Info wie es bei mir dem dem RobCar inzwischen weitergegangen ist.

Zur Steuerung ist die App "Bluetooth CAR Controller" (Andi)die bis jetzt am besten geeignete App, welche mir in die Hände gefallen ist. Zur App gibt es ein Video auf Youtube, das Vieles, was beim ersten Blick nicht ganz einsichtig ist erklärt.Fahrtrichtung Kurven drehen aufder Stelle läßt sich alles machen. Leider ist die Geschwindigkeit nur mit einem etwas ungeschickt winzigen Touch-Schieberegler einzustellen.

MCU ist jetzt PIC16F1936
Von den 4 PWM-Modulen verwende ich PWM4 und PWM5 die Initialisierung von PWM ist im Datenblatt  gut erklärt. Leider beginnen die Motoren (die Räder) erst ab Duty Cycle (DC) ca 50% (f=7,8kHz) zu drehen.

Bluetooth Modul HC-05
Ein recht einfache zu handhabendes Teil, mit dem ich schon auf dem Arduno etwas rumgespielt habe. Sehr einfach anzuschließen. Allerdings verwende ich derzeit mur den Tx-Pin, da ich (noch) nicht weiß wie ich von dem Modul Daten auf mein Smartphone bekommen soll.

EUSART
Das schrecklich kompliziert Wort, welches hinter der Abkürzung steht, spare ich mir. Der Empfang von Kommandos aus der App  mit 9600 Baud ist nach Datenblatt rasch eingerichtet, wenn man weiß, dass auf jeden Befehl für eine Fahrrichtung, z.B. "F" (vorwärts) beim Loslassen sofort ein "S" (Stop) gesendet wird.

Kommando-Auswertung
Dies geschicht recht einfach, z.B. "B"(rückwärts) wobei das "B" als Ascii-Wert aus dem Register "RCREG" z.B. in "tmpRCREG" gelesen werden kann (prinzipielless Vorgehen):

movlw "B" ;Kommando für Rückwärts
xorwf tmpRCREG,w
btfss STATUS,Z
GOTO cmd_L      ;Auswertung ob "L" (LEFT) auszufürhen ist
BANKSEL PWM_LAT
bcf  PWM_LAT,EN1 ;schaltet linke Moorgruppe auf vorwärts 
bsf  PWM_LAT,EN2
bcf PWM_LAT,EN3 ;schaltet  rechte Motorgruppe vorwärts
bsf PWM,LAT,EN4
BANKSEL 0

cmd_L:
 movlw "B" .......


Hinderniserkennung
Seitlich werden IR-Module verwendet, deren Ausgang ab einer mittels Poti einstellbaren Entfernung zum seitlichen Hindernis auf LOW geht
Das Modul HC-SR05 ist einfach zu handhaben. Neben der Versorgungsspannung ist noch der Anschluss TRIGGER und ECHO vorhanden. TRIG wird für  mindesstens 11 us auf HIGH gelegt

Danach sendet das Modul einen US-Burst. Der ECHO-Pin geht dabei gleichzeitig auf HIGh. Sogleich wird dann z.B. der 16Bit-TMR1 gestartet und sobald ECHO=LOW ist, angehalten.

Angenommen fosc der MCU sei 8MHz dann ist der TMR1-Takt fosc/4 = 2MHz, Periodendauer = 0,5us. TMR1 = 2500
Die Entfernung zum Hindernis errechnet sich dann einfach:
Entfernung = 343m/s * 2500 * 5^-7s / 2 = 0,21m

Auf einem LCD 4x20 werden dann alle interessanten Daten ausgegeben:
Empfanges Kommando,
Duty Cycle Antrieb rechts, links
Entfernung zum voraus befindlichen Hindernis,
Info zu Hindernissen rechts/links
Spannung der Antriebsbatterie.

Soweit der derzeitige Stand.

mit Grüßen Ottmar

picass

Es sieht so aus, als ob du sehr fleißig gewesen bist!

Zitat von: Ottmar in 29.06.2023, 23:28:46 CESTRoboCar Info 02 Erste Ergebnisse
.Fahrtrichtung Kurven drehen aufder Stelle läßt sich alles machen. Leider ist die Geschwindigkeit nur mit einem etwas ungeschickt winzigen Touch-Schieberegler einzustellen.
Drehen auf der Stelle....., sag ich doch: der Antrieb wie ein Panzer. Aber.... .... mit Verlaub:
wenn der auf der Stelle dreht, was passiert mit den furchtbar vielen Käbelchen, welche in das Steckbrett führen? An dem hängt ja auch noch Diverses! Und Stichwort "Geschwindigkeitsregelung": was passiert, wenn der dann auch noch Fahrt aufnimmt?
Grüße, picass

Ottmar

Hi Picass
???... ??? das Steckbrett mit seinen Verbindungen zum Car ist doch nur, um noch Änderungen vornehmen zu können. Natürlich bekommt die Schaltung auch eine Platine und ihr zuhause auf dem Chassis des Cars. Hi, :) hi,hi - kleiner Schelm :-\ ? wolltest mich wohl ein wenig auf den Arm nehmen?
Zum Trost: bin auch kurz davor die Platine (ohne rumhängende Leitungen) anzufertigen.

Auf der Stelle drehen, ja, sieht eben robotermäßig aus. Die App erlaubt auch die Funktion Fahrt + links-/rechts abbiegen. Leider nicht analog. Behelfslösung funkioniert an der aufgebockten Chassis: Fahrt voraus, zum Abbiegen nach links/rechts am innenliegenden Antrieb PWM ums z.B. 50% verringern, PWM am außenliegenden Antrieb beibehalten -> kurven

Cmd_Evaluate:
; Switches the motors for the selected direction/cornering
...
cmd_eval_G:                ;KURVE vorw. LINKS Drive 5 halbe Geschwindigkeit     
   movlw    "G"            ;FORW+LEFT
   xorwf    tmpRCREG,w
   btfss    STATUS,Z
   GOTO     cmd_eval_I     ;Rechtskurve
   ;
   movf     DC5,w          ;eingestellte Fahrgeschwindigkeit
   rrf      tmpDC5,f       ;temporär PWM5 auf 50% von PWM4
   movf     tmpDC5,w       ;ins WREG
   BANKSEL  CCPR5L         
   movwf    CCPR5L         ;an ANTRIEB zuweisen
   BANKSEL  0
   ;
   movlw    b'00000101'    ;b7:4=0000  b3:0 = EN3:0 = 0101 
   GOTO     cmd_drive_Y    ;Motoren vorwärts Antr.re 50%
   ;
...
   RETURN


Aber ein von mir mit Bluetoooth zu versehener Nintendo-nunchuck (Einhand-Joystick) +HC-05+MCU müßte es möglich machen, beide Antriebsseiten unabhängig voneinander mit unterschiedlichem PWM analog zur X-Y-Potistellung anzusteuern. Habe das schon mit 'nem Mini-Joystick (kabelverbunden) erfolgreich experimentiert... aber eines nach dem anderen...

Grüße Ottmar

picass

Zitat von: Ottmar in 30.06.2023, 22:42:04 CEST.......Behelfslösung funkioniert an der aufgebockten Chassis....
Nix! Weder Kleiner noch Großer! Du hattest vergessen, das Aufbocken zu erwähnen. Und genau darauf wollte ich raus und gehe nach wie vor davon aus, dass dieses Car mit den vielen abreiss-gefährdeten Kabelverbindungen eben noch keinen realen, sondern nur einen virtuellen Return ausgeführt hat. Was in der Theorie funktioniert, kann in der Praxis unangenehme Überraschungen bereit halten. Da wären - nur als Beispiel - die Fragen, was der Untergrund zu den Drehmanövern sagt und ob der Anpressdruck und die Auflagefläche der Räder auch gleich ist.
Grüße, picass

Ottmar

#20
RoboCar Info 03 - RoboCar fährt!

Hallo,
Nachdem alle Tests erfolgreich waren, wäre es mir selbst eine Zumutung gewesen, länger auf die erste Probefahrt zu warten. Die Herstellung einer Platine wird einfach aufgeschoben. Daher wurde die Schaltung auf einem kleinen Breadboard nochmals aufgebaut. Ein Platz für das weitere, bereits in Software und Technik getestete Zubehör, wie Ultraschall- und IR-Hinderniserkennung, muss noch gefunden werden.

Es braucht nicht viele Worte, das Video zeigt die ersten kleinen Fahrmanöver. Leider ist die Qualität schlecht damit die Beschänkung von Uploads auf 1024kB eingehalen werden konnte.

Ein Nintendo-Nunchuck (mit Joystick )ist bestellt. Damit werden rundere Kurven möglich sein, denn dieser wird als Bluetooth-Handsender umgebaut. Da kann ich gleich noch ein paar kleine Erfahrungen in der Datenübertragung per USART sammeln.

Die Bilder zeigen noch keinen entgültigen Aufbau.Bei dem PIC1936 sind noch viele I/O's frei, da kann man seiner fantasie noch etwas freien Lauf lassen. ;)

Bis ein ander Mal - Ottmar



picass

Sieht doch super aus, der Karren ist sehr beweglich und jetzt schon gut zu steuern! Kompliment für die bislang geleistete Arbeit! Dass es dir gelungen ist, den Drahtverhau auf ein anderes, kleineres Brettboard zu verlegen, verdient auch Anerkennung.
Grüße, picass

Ottmar

Ja danke picass! :)
Was ich nicht zeigen konnte (hätte für 2 Handys dann drei Hände gerbaucht): Das Auto fährt auch so "la la" runde Kurven, wenn zu Vor- oder Rückwärts noch Seite gegeben wird. Das Tastverhältnis der PWM an der Kurveninnenseite wird dann um 50% reduziert.

mfG Ottmar

picass

Du leistest da schon enorme Entwicklungsarbeit! :)  Anerkennung!
Grüße, picass

Ottmar

RoboCar Info 04

Hallo,

RoboCar ist immer noch in Arbeit, ist allerdings ein wenig weiter fortgeschritten. Inzwschen wurden einige Sonderfunktionen wie Scheinwerfer, Rücklichter und Fahrtrichtungsanzeiger verwirklicht. Die große Aufgabe steht jedoch noch bevor:

Berechnung von Ausweichmövern bei Hindernissen.
Es gilt als dem RoboCar ein wenig "Intelligienz" einzupflanzen.

Die Hinderniserkennung mit Infrarot zu den Seiten hin funktioniert und auch die Entfernungsmessung per Ultraschall arbeitet perfekt. Ich frage mich derzeit, ob es vorteilhaft sein könnte, den Ultraschallseensor auf ein Servo zu setzen und zu schwenken. Einen Timer für die PWM hätte ich dafür noch übrig.

Nun soll aus den Informationen der Abstandssensoren ein Ausweichmanöver errechnet werden. Bis dahin, für den Fall daß es jemanden interessiert, anbei der bisherige Programmablaufplan.

Bild 1: Die Eingangsschleife zur Hinderniserkennung und zum Empfang des Bluetooth-Signals
Bild 2: Die Antriebssteuerung, Fahrtrichtung und Geschwindigkeit.

mfG Ottmar
Like Like x 1 View List

Ottmar

RoboCar Info 05

Hallo,

Wieder mal ein kleiner Zwischenstand zu meinem RoboCar-Projekt. Das Fahrzeug hat inzwischen seine Sensoren anmontiert bekommen und damit es sich im Dunkeln nicht verirren wird, auch eine Beleuchtung erhalten - Scheinwerfer nach vorne und Rücklichter.

Dazu ein visueller Eindruck.

Vielleicht ist es interessant zu wissen wie ich das Programm gestaltet habe um dem RoboCar "Leben" einzuhauchen. Dazu füge ich ein Listing mit einer schematischen Übersicht bei.

Solch ein Programm spalte ich gerne in mehrere INCLUDE-Files auf, in denen alle spezifischen Funktionen für den Programmabschnitt enthalten sind.

16F1936_RoboCar2023.ASM
; Projekt:  Control of RobotCar via Bluetooth
; MCU:      PIC1F1936 (28Pin)
; Info:    Program Memory Words Used:  1294
;          Average duration of a program cycle
;          with LCD ca. 38ms (for program development)
;          without LCD (final) around ca. 2.7-4ms
;          fosc=8MHz
02_HEADER_RoboCar2023.INC -Definitionen, Labels
03_INIT_Robo2023.INC  -Ports, Module, Funktionen
04_DRIVE_Robo2023.INC  -Auswertung Rx-Kommandos,
                        und Antriebssteuerung
05_US_Robo2023.INC    -Ulatraschallmessung
06_ADC_Robo2023.INC    -noch nicht im Programm integriert
07_LCD_Robo2023.INC    -LCD-Ausgaben nur zur Ewicklung#
HD44780_2Wire.INC      -LCD-Initialisierung

Leider überschreiten die weiteren Einzelheite das Zeichenlimit von 5000 für diesen Beitrag (siehe folgenden Beitrag)
Für anderweitige Ideen/Vorgehensweisen habe ich gerne ein offenes Ohr.

mfG Ottmar
Like Like x 1 View List

Ottmar

RoboCar Info 5-1

Leider sind mit dem vrgesehene Text im Codefenster erneut die 500 Zeichen überschreitten, also teile ich das nochmals auf und schreibe noch einen Folgebeitrag

mfG Ottmar


16F1936_RoboCar2023.ASM
=======================
; Projekt:  Control of RobotCar via Bluetooth
; MCU:      PIC1F1936 (28Pin)
; Info:     Program Memory Words Used:  1294
;           Average duration of a program cycle 
;           with LCD ca. 38ms (for program development)
;           without LCD (final) around ca. 2.7-4ms
;           fosc=8MHz
   #INCLUDE <02_HEADER_RoboCar2023.INC>   ;Labels, definitions, constants, etc
   #INCLUDE <03_INIT_Robo2023.INC>        Initialization of all required 
                                          ;registers, ports, PWM, EUSART, LCD, etc
   main;
      CALL     Debug_Menue    ;Creates the LCd menu for function 
                              ;testing and troubleshooting
   main_loop:
      CALL     US_Measure     ;Send/receive US-Burst/Echo 
      CALL     US_Distance    ;Calculates the distance from US-runtime
      CALL     Obstacle_Dodge ;Calculates required avoidance of obstacles  
      btfsc    Flags,EXTRA    ;=1 execute functions when waiting for rx cmd
      CALL     Cmd_Extra      ;Switching of special functions light, horn
         ;
   main_rx_loop:              ;waiting for bluetooth command     
      btfss    PIR1,RCIF      ;=1? New data received with USART?
      GOTO     main_rx_loop   ;no, try it again
      ;CALL  Rx_Error         ;Error checking RCSTA,FERR:OERR (disabled)
      BANKSEL  RCREG          ;bank3 
      movf     RCREG,w        ;copy received command 
      BANKSEL  0
      movwf    tmpRCREG       ;contains received Ascii code
      ;
      CALL     Out_RX         ;display received Bluetooth-command (cmd)
      CALL     Eval_Cmd       ;evaluate/execute command ->04_DRIVE_Robo
   GOTO  main_loop 
;----------------------------------------
      #INCLUDE <04_DRIVE_Robo2023.INC> ;Drive control subprograms
      #INCLUDE <05_US_Robo2023.INC>    ;ultrasonic distance measurement
      #INCLUDE <07_LCD_Robo2023.INC>   ;LCD output, binary BCD conversion, etc
      #INCLUDE <HD44780_2WIRE.INC>     ;initialization, DDRAM, DATA
   END
;-----------------------------------------
SECTIONS IN FILE 02_HEADER_ROBOCAR2023.INC
;  --SUPPRESSED WARNINGS
;  --MCUDEFINITION / CONFIGURATION
;  --VARIABLES DEFINITIONS
;    LABELS & CONSTANTS
;  --L298_PORT (PORTA)
;  --LCD_PORT (PORTB)
;  --AD_PORT  (PORTB)
;  --SCI_PORT EUSART (PORTC) 
;  --US_PORT (PORTC)
;  --PWM_PORT (PORTC)
;  --DDRAM ADDRESSES for output in debug menu
;    LCD-PROPERTIES 
;    RESET VECTOR
;    INTERRUPT VEKTOR
         ISR
            isr_tmr6
;----------------------------------------  

Ottmar

RoboCar Info 5-2

Hier also der letzte Teil zur Programmübersicht von RoboCar223

mfG Ottmar

MODULES IN INIT PROJECT    ROBOCAR2023
03_INIT_Robo2023.INC
   OSCCON
   PORTA    L298_PORT
   PORTB    LCD_PORT
            AD_PORT
   PORTC    SCI_PORT
            US_PORT
            PWM_PORT
   T2CON
   CCPR1L
   CCPR2L
   CCP1CON
   PSTR1CON
   PR2
   PR4
   CCPTMRS0
   PIR1,TMR2IF
   PIR3,TMR4IF
   RCSTA
   BAUDCON
   SPBRGH
   SPBRGL
   ADCON0
   ADCON1
   FVRCON 
   CALL  Lcd_Init
   CALL  Lcd_Ready
   PRESET VARIABLES
   T6CON
   TMR6
   INTCON   
;----------------------------------------   
SUBROUTINES IN PROJECT    RoboCar2023
   04_DRIVE_Robo2023.INC
      Eval_Cmd             ;Calling up the subprograms for evaluating
                           ; the possible Rx commands
      Cmd_Lights           
         cmd_eval_front    ;frontlights on
         cmd_eval_front0   :frontlights off
         cmd_eval_back
         cmd_eval_back0
         cmd_eval_park
         cmd_eval_park0
         cmd_eval_horn
         cmd_eval_horn0
         cmd_eval_extra
         cmd_eval_extra0
      Cmd_Extra            ;switches headlights and taillights to flashing
         cmd_extra_on
         cmd_extra_high
         cmd_extra_low
      Cmd_Extra_OFF 
      Cmd_Drive
         cmd_drive_F....
      Cmd_Speed
         cmd_speed_0...10
;----------------------------------------   
   05_US_Robo2023.INC
      US_Measure        ;US-Burst, TMR1,runtime measurement
      US_Distance       ;convert TMR1 to BCD4:0
      Obstacle_Left     ;Obstacle closer than 15cm on the left?
      Obstacle_Right    ;Obstacle closer than 15cm on the right?
      Bin32_Dez
      ;MULT16x16        ;unused
      ;
   07_LCD_Robo2023.INC
   table_debug          ;eg. dt LINE1+.0,"Rx:. Vdd ..,..V", 80h
   LcdOut_Table         ;Read table, display Mask in LCD 
   Out_Menue_Control    ;Output of the parameters in the LCD
         out_vdd
         out_info1_info2
   Out_Vdd_MCU
   Out_Vdd_Drive
   Out_DC1_DC2
   Out_Rx               ;control actual bluetooth command
   Out_US_Distance
   Out_Obstacle_Left    ;Set a flag if there is an obstacle
   Out_Obstacle_Right
   ;
   LeadZero_Lcd         removes leading zeros  004,72 -> 4,72
   BCD_2Bit_Mult10
   Bin16_Dez
   Bin8_Dez_1
   OutBinReg            ;Debugging
   Mult10_8Bit 
   ;----------------------------------------

pic18

MCU:      PIC1F1936 (28Pin) sollte 16F1936 heißen
liebe Grüße
pic18

ADMIN

Hallo
Ich habe das Limit für Zeichen um einiges höher gesetzt. Nun sollte es keine Probleme mehr geben.
Euer ADMIN.

Schnellantwort

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau