PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ultraschallsensoren und Taster



Irael
21.09.2008, 01:21
Hallo erstmal =)

ich habe einige, Meiner meinung anch, einfache Fragen.
Erstmal im vorraus, ich habe vor 2 Jahren mal in der Schule, im Informatik unterricht, ROboter "programmiert"... wenn man es so nennen möchte... ^^ und daher eigendlich kaum ahnung, bzw garkeine mehr, da ich mich danach kaum bzw garnicht mehr mit soetwas beschäftigt habe =/


SO ich habe mir nun aber in den Kopf gesetzt einen Roboter zu bauen, er soll erstmal nur ausweichen können. UNd zwar mit direkten sensoren (Taster) und indirekte Sensoren (hier: Ultraschallsensor).


Der Roboter soll sehr flach, rund sein und 3 räder (für kleinen wenderadius) haben.
AN der Front (vorderer Halbkreis) min. 4 Ultraschallsensoren haben und vor allem im Heck (hinterer Halbkreis) Taster (Stoßstange [luftschlauch] welche einen bzw mehrere Taster auslöst), damit man beim rückwertsfahren nicht hängen bleibt ^^.


Nun meine Fragen:

1. Frage: Ich habe mir hier https://www.roboternetz.de/wissen/index.php/Kategorie:Robotikeinstieg alles zu Bascom durchgelesen, jedoch bin ich nicht so richtig schlau draus geworden, nur teilweise... ^^

ICh würde gerne wissen wie man damit Sensoren befehle einstellt.
z.B.: wenn IR Sensor oder Ultraschalls. ein Hindernis, in z.B. 30cm abstand entdeckt, man diesem Ausweichen kann. Bzw. wenn Taster aktiviert wird, das der Roboter dann in die entgegengesetzte richtung fährt.


2. Frage:
Kann man Bascom auch für Ultraschall sensoren nutzen?


3. Frage: Ich frage mich wie ich die einzelnen Sensoren mit dem Controller verbinden soll, da es doch soviele Steckplätze, oder wie die heißen ^^, an dem Controller garnicht gibt, um alle Sensoren damit zu verbinden. Oder? was muss ich da machen?



ich hoffe ihr könnt mir helfen ^^


Mit freundlichen Grüßen

Irael

Besserwessi
21.09.2008, 10:42
BASCOM ist eine Basic Compiler, da kann man viel machen. Natürlich auch einen Ultraschallsensor anschießen. Der Computer im Raumschiff zur ersten Mondlandung deutlich weniger leistungsfähig als die Controller die man heute für kleine Robotter nimmt. Es ist also viel möglich, nur man muß es halt programieren. So Komplexe Kommandos wie Ausweichen sind da natürlich noch nicht vorgefertigt, das muß man erst noch selber programieren.


Zum Anfang wäre der Asuro wohl geeignet: 2+1 Räder, klein und günstig. Da findet man bestimmt auch eine Anleitung wie man die Sensoren anschließt. Wenn einem die direkten Anschlüße nicht reichen kann man per I2C bus relativ viel weiters anschleißen.

Irael
21.09.2008, 13:07
danke ^^

mir war schon klar, dass ich das selber programmieren muss, ich wollte nur wissen wie das geht, ich hatte nehmlich sowas mit kommandos zum ausweichen schon in der shcule gemacht, mit schlafen etc... jedoch vergessen wie es geht und so

rob_88_20p
20.01.2009, 13:39
Also ich programmiere zwar in C und auf einem ATmega88 aber ich habe auch einen Roboter mit zwei Reflexkopler Sensoren und zwei Taster vorne drann.

Also ich weis nicht wie das bei dir ist, aber ich glaube du brauchst eine Schaltung, die Dir ein High und ein Low Signal gibt, ich glaube man nennt das eine "Pull up/down Schaltung"

Die Schaltung sieht bei mir so aus:

http://netzdateien.ne.funpic.de/Schaltung1.bmp

Ich habe den Roboter mit den Schaltern so programmiert, allerdings in C. Du kannst den Code so nicht verwenden du müstest ihn ein bisschen umschreiben.

Hier der Code:



#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/io.h>


#define STATSLED0_ON (PORTC |= 1<<PC0)
#define STATSLED0_OFF (PORTC &= ~(1<<PC0))
#define STATSLED1_ON (PORTC |= 1<<PC1)
#define STATSLED1_OFF (PORTC &= ~(1<<PC1))
#define STATSLED2_ON (PORTC |= 1<<PC2)
#define STATSLED2_OFF (PORTC &= ~(1<<PC2))
#define STATSLED3_ON (PORTC |= 1<<PC3)
#define STATSLED3_OFF (PORTC &= ~(1<<PC3))

#define SWITCH_RIGHT (PIND & 1<<PD1)
#define SWITCH_LEFT (PIND & 1<<PD0)



void driveForward(){

// Motor 1 Forward
PORTD |= 1<<PD6;
PORTD &= ~(1<<PD7);
// Motor 2 Forward
PORTB |= 1<<PB2;
PORTB &= ~(1<<PB1);

}

void turnLEFTbackward(){
// Motor 1 backward
PORTD &= ~(1<<PD6);
PORTD |= 1<<PD7;
// Motor 2 stop
PORTB |= 1<<PB2;
PORTB |= 1<<PB1;
}

void turnRIGHTbackward(){
// Motor 1 stop
PORTD |= 1<<PD6;
PORTD |= 1<<PD7;
// Motor 2 backward
PORTB &= ~(1<<PB2);
PORTB |= 1<<PB1;
}


int main(){

DDRD = 1<<PD6 | 1<<PD7; // PD6 PD7 Output Motor1;
DDRB = 1<<PB1 | 1<<PB2; // PB1 PB2 Output Motor2;

DDRD &= ~(1<<PD0 | 1<<PD1); // PD0 PD1 Input Switches

DDRC = 1<<PC0 | 1<<PC1| 1<<PC2 | 1<<PC3; // PC0 PC1 Output StatusLED 0,1,2,3


// SWITCH_RIGHT = STATSLED2
// SWITCH_LEFT = STATSLED3

// ! = 0
// () = 1

while(1){


if(! SWITCH_RIGHT && ! SWITCH_LEFT){
STATSLED0_ON;
STATSLED1_ON;
STATSLED2_OFF;
STATSLED3_OFF;
driveForward();

}


else if(SWITCH_RIGHT && ! SWITCH_LEFT){
STATSLED0_OFF;
STATSLED1_ON;
STATSLED2_ON;
STATSLED3_OFF;
turnRIGHTbackward();
_delay_ms(1000);
driveForward();
}


else if( ! SWITCH_RIGHT && SWITCH_LEFT){
STATSLED0_ON;
STATSLED1_OFF;
STATSLED2_OFF;
STATSLED3_ON;
turnLEFTbackward();
_delay_ms(1000);
driveForward();

}

}
}

Funktioniert bei mir besstens.

Gruss

rob_88_20P

P.S. Was für einen IC verwendest du oder wilst du verwenden ?

Da_Vinci13
20.01.2009, 17:57
Hi,
Auf
www.mikrocontroller.net

hat es viele Informationen wie man das macht...
Und auf http://www.shop.robotikhardware.de/shop/catalog/index.php
hat es viele Sensoren und Controllerboards über die du dich schlau machen kannst...

Grüsse!