Categorie: PIC bestuurde robotwagen

PIC bestuurde robotwagen

Dit is een project dat ik 1 jaar geleden begonnen ben maar nooit aan verder kon doen omdat ik geen PIC’s kon programmeren. De bedoeling is een auto met van voor twee microswitches zodat als ie ergens tegen rijdt dat ie dan een stukje terug rijd en dan naar links of rechts draait om dan terug vooruit gaan te rijden. En als extra moeilijkheid heb ik er ook lichten opgezet (pinkers achterlichten remlichten gewone lichten) en die moeten ook allemaal op het gepaste moment gaan branden. Maar aangezien ik nu wel kan programmeren in picbasic haal ik dit projectje terug boven

Enkele foto’s van wat ik tot nu toe al heb:

PIC bestuurde robotwagen

Op deze foto is de microswitsch “goed” te zien:

PIC bestuurde robotwagen

Op deze foto kan je het lampje en de leds aan de achterkant zien:

PIC bestuurde robotwagen

Op deze foto kan je het onderstel van de auto zien:

PIC bestuurde robotwagen

Vooraanzicht waarbij je de leds goed kan zien:

PIC bestuurde robotwagen

Weeral een foto van het onderstel deze keer van de zijkant af genomen.

PIC bestuurde robotwagen

 

Update: Dit project is gestopt omdat de auto “zoek” is :-p en het toch niet werkte aangezien de voorste wielen niet stuurden.

PIC bestuurde robotwagen Update

Ik heb een hele tijd geleden van men achterbuurman een programmeerbaar robotautootje gekregen dat ik nu voor dit project wil gaan gebruiken.

Enkele foto’s:

Zijaanzicht

Vooraanzicht

knopjes

De sensoren die ik wil gaan gebruiken om objecten te detecteren (ik heb er 4):

sensor

Met dank aan Jens voor de optocouplers en Ludo voor de robotauto!!

PIC bestuurde robotwagen Update

In school hebben we de opdracht gekregen om een robotauto te maken voor de projectweek. Daarom heb ik besloten daar dit project voor te gebruiken. De projectweek is na de paasvakantie maar dan moet de hardware al af zijn zodat alleen de software nog gemaakt moet worden in die week.

Vandaag heb ik een IR nadering’s sensor gemaakt.

De sensoren die ik van Jens had gekregen bleken maar 5mm bereik te hebben dus heb ik andere gebruikt. Ik heb bij reichelt een aantal IR leds gehaald en met een TSOP1738 die ik nog had liggen heb ik nu een test versie gemaakt op breadbord. Schema:

Sensor schema

(Klikbaar)

Filmpje van de schakeling in werking:

De groene led onderaan in beeld is de uitgang.

Bron schema:

http://www.elektronicaforum.nl/trapverlichting-met-led-t3123-25.html#21564

Welke pic dat ik ga gebruiken weet ik nog niet zeker maar ik denk een 16F627. Voor de motoren aan te sturen ga ik een L293 gebruiken.

PIC bestuurde robotwagen Update

Ik heb vandaag een pcb ontworpen voor de sensor:

Sensor PCB

PIC bestuurde robotwagen Update

Ik heb vandaag een pcb ontworpen voor de pic en motorsturing:

PCB robotauto

(Klikbaar)

Schema:

Schema robotauto

(Klikbaar)

PIC bestuurde robotwagen Update

Vandaag heb ik een printje geëtst en opgebouwd van een sensor. (Ik heb nog niet alle onderdelen binnen.)

Sensor

Sensor

PIC bestuurde robotwagen Update

Ons groepje gaat 2 robot autootjes maken. 1 daarvan staat hierboven al en een ander is een tank.

Foto’s:

Tank

Tank

Tank

PIC bestuurde robotwagen Update

Ik heb vandaag de print voor mijn autotje ge-etst, gesoldeert en alle bedrading gedaan.

Foto’s:

Robot Auto vooraanzicht

Robot Auto zij aanzicht

Robot Auto Achter Aanzicht

Robot Auto

Robot Auto

Robot Auto

Robot Auto

PIC bestuurde robotwagen Update

Ondertussen is de tank ook voorzien van printplaten :p :

De sensoren:

tank

De hoofdprint:

tank

De motoren:

tank

“Overzicht’s”foto:

tank

PIC bestuurde robotwagen Update

De code is ondertussen klaar.

De code in de robotauto:

    Device              16F628A
    Config WDT_OFF, PWRTE_Off, LVP_OFF, MCLRE_on, INTRC_OSC_NOCLKOUT
    ALL_DIGITAL         TRUE 
    PORTB_PULLUPS       = 1
'Declaraties    
    'Sensoren
    Symbol sensorR      = PORTA.6
    Symbol sensorL      = PORTA.7
    'Motoren
    Symbol motorvooruit = PORTA.2
    Symbol motorachteruit  = PORTA.3
    Symbol stuurLinks   = PORTA.1
    Symbol stuurRechts  = PORTA.0
    'Terugkoppeling stuur
    Symbol stuursensL   = PORTB.0
    Symbol stuursensM   = PORTB.1
    Symbol stuursensR   = PORTB.2
    'Leds
    Symbol led1         = PORTB.3
    Symbol led2         = PORTB.4
    Symbol led3         = PORTB.5
    Symbol led4         = PORTB.6
    Symbol led5         = PORTB.7
    

'Wachten voor dat er bogonnen wordt 
'(De sensoren hebben tijd nodig om op te starten)    
    DelayMS 1000
    
'Stuur initialiseren
    'Staat het stuur in het midden?
    If stuursensM = 0 Then
        GoTo klaarinit      'Direct naar klaarinit gaan
    EndIf
    'Staat het stuur links?
    If stuursensL = 0 Then 
        GoTo links         'Naar links gaan
    EndIf
    'Staat het stuur rechts?
    If stuursensR = 0 Then
        GoTo rechts        'Naar rechts gaan
    EndIf
    'In geen stand (geen terugkoppeling)
    'Eerst volledig naar rechts draaien
    High    stuurRechts
    While   stuursensR = 1 
        ;Lusje totdat de stuursensor rechts laag wordt
    Wend
    Low     stuurRechts
    DelayMS 500 
    'Naar gedeelte gaan voor als het stuur naar rechst staat    
    GoTo    rechts      
    
rechts:
    'Naar links sturen    
    High    stuurLinks
    While   stuursensM = 1 
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurLinks
    DelayMS 500
    GoTo    klaarinit
    
links:
    ;Naar rechts sturen
    High    stuurLinks
    While   stuursensM = 1
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurLinks
    DelayMS 500

klaarinit:        
    High motorvooruit
    Low  motorachteruit
    High led3
    GoTo main
    

'Hoofdprogramma
main:   
    ;links opstakel
    If sensorL = 0 Then
        DelayMS 10
        High    led1
        GoSub   linksDect
    EndIf
    Low led1 
    ;rechts opstakel
    If sensorR = 0 Then
        DelayMS 10
        High    led5
        GoSub   rechtsDect 
    EndIf
    Low led5  

GoTo main
            
rechtsDect:  
    High led4  
    ;stukje achteruit
    Low     motorvooruit
    DelayMS 10
    High    motorachteruit
    DelayMS 1000
    Low  motorachteruit
    Low     led4
    ;Draaien
    High    stuurLinks    
    While stuursensL = 1
        ;Lusje totdat de stuursensor links laag wordt
    Wend
    Low     stuurLinks   
    ;Stukje vooruit
    DelayMS 10
    High    motorvooruit
    DelayMS 1000
    Low     motorvooruit
    ;Stuur  terug recht zetten
    High    stuurRechts
    While   stuursensM = 1
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurRechts
    DelayMS 10
    High    motorvooruit

Return

linksDect:
    High  led2
    ;stukje achteruit
    Low     motorvooruit
    DelayMS 10
    High    motorachteruit
    DelayMS 1000
    Low  motorachteruit
    Low     led2
    ;Draaien
    High    stuurRechts    
    While stuursensR = 1
        ;Lusje totdat de stuursensor links laag wordt
    Wend
    Low     stuurRechts
    ;Stukje vooruit
    DelayMS 10
    High    motorvooruit
    DelayMS 1000
    Low     motorvooruit
    ;Stuur  terug recht zetten
    High    stuurLinks
    While   stuursensM = 1
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurLinks
    DelayMS 10
    High    motorvooruit

Return

;bij fout
GoTo main
End

 

De code in de tank:

Device 16F628A
Config WDT_OFF,PWRTE_OFF,LVP_OFF,MCLRE_ON,INTRC_OSC_NOCLKOUT, BODEN_OFF

ALL_DIGITAL true 

Symbol      motorLinksV = PORTA.2
Symbol      motorLinksA = PORTA.3
Symbol      motorRechtsV = PORTA.6

Symbol      motorRechtsA = PORTA.7

Symbol      sensorL = PORTA.0
Symbol      sensorR = PORTA.1

Symbol      led1 = PORTB.0
Symbol      led2 = PORTB.1

Symbol      led3 = PORTB.2
Symbol      led4 = PORTB.3
Symbol      led5 = PORTB.4 

Clear 

High motorLinksV
DelayMS 10
High motorRechtsV

Low motorRechtsA
Low motorLinksA

main:
If sensorL = 0 Then
            'hoog maken van led1
            High led1
            'stoppen van motoren vooruit
            Low motorLinksV
            Low motorRechtsV
            '100ms wachten
            DelayMS 100
            'achteruit rijden
            High motorLinksA
            DelayMS 10
            High motorRechtsA
            'hoogmaken van led3 en Led4
            High led3
            High led4
            '1 s wachten
            DelayMS 1000
            'stoppen met rijden 
            Low motorLinksA
            Low motorRechtsA
            Low motorLinksV
            Low motorRechtsV
            'laag maken van led3 en led4
            Low led3
            Low led4
            '100 ms wachten
            DelayMS 100
            'led2 hoogmaken
            High led2
            'draaien van tank
            High motorLinksV
            DelayMS 10
            High motorRechtsA
            '500ms draaien
            DelayMS 500
            'laagmaken led2            
            Low led2
            'stoppen met draaien
            Low motorLinksV
            Low motorRechtsA
            '10 ms stoppen
            DelayMS 10
            'terug vooruit rijden
            High motorLinksV
            DelayMS 10
            High motorRechtsV


Else
            'als sensor links niets detecteert gaat led1 niet branden
            Low led1
EndIf
If sensorR = 0 Then
            'hoog maken van led5
            High led5
            'stoppen van motoren vooruit
            Low motorLinksV
            Low motorRechtsV
            '100ms wachten
            DelayMS 100
            'achteruit rijden
            High motorLinksA
            DelayMS 10
            High motorRechtsA
            'hoogmaken van led3 en Led4
            High led3
            High led4
            '1 s wachten
            DelayMS 1000
            'stoppen met rijden 
            Low motorLinksA
            Low motorRechtsA
            Low motorLinksV
            Low motorRechtsV
            'laag maken van led3 en led4
            Low led3
            Low led4
            '100 ms wachten
            DelayMS 100
            'led2 hoogmaken
            High led2
            'draaien van tank
            High motorLinksA
            DelayMS 10
            High motorRechtsV
            '500ms draaien
            DelayMS 500
            'laagmaken led2            
            Low led2
            'stoppen met draaien
            Low motorLinksA
            Low motorRechtsV
            '10 ms stoppen
            DelayMS 10
            'terug vooruit rijden
            High motorLinksV
            DelayMS 10
            High motorRechtsV


Else
            'als sensor rechts niets detecteert gaat led5 niet branden
            Low led5
EndIf

GoTo main
End