PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UGV selber bauen



Seiten : 1 [2]

ultimate80563
23.07.2014, 19:07
Ich habe es leider bei Conrad nicht mehr gefunden.

Aber hier Fotos:
28721

28722

Rabenauge
23.07.2014, 20:42
Ohne Datenblatt und/oder wenigstens..beschriftete Pins wird das nix.
Wenn du weisst, wie es angeschlossen werden muss (und, dass es auch mit 5V klarkommt- da hinten drauf ist etliches nicht bestückt, wäre also denkbar, das Teil arbeitet mit weniger), nimms halt. Ansonsten würd ich mir gleich sowas besorgen: http://www.ebay.de/itm/Newest-CRIUS-CO-16-OLED-Display-Module-V1-2-for-MWC-MultiWii-Flight-Controller-/271417776487?pt=RC_Modellbau&hash=item3f31c29967
Das ist eins der kleinen Oled-Displays.
Nen Beispiel, was der Winzling drauf hat, haste z.B. da: http://www.youtube.com/watch?v=umEerh-PrLY
Gibts allerdings in verschiedenen Farben, meins schreibt weiss.

ultimate80563
23.07.2014, 21:14
Ne Datenblatt etc. habe ich nicht.

hatte es aber schon mal am laufen wodurch ich die Pin Belegung morgen früh mal nach schauen kann.

Sieht ja nich schlecht aus:)

ultimate80563
24.07.2014, 08:36
Pin 1 = GND
Pin 2 = +5V
Pin 3 = VO (10k - 20k Poti)
Pin 4 = RS
Pin 5 = RW(GND)
Pin 6 = Enable
Pin 11, 12, 13, 14 = 4-Bit Daten (D4, D5, D6, D7)
Pin 15, 16 = Hintergrundbeleuchtung (+5V, GND)

oberallgeier
24.07.2014, 10:27
Pin 1 = GND
Pin 2 = +5V
Pin 3 = VO (10k - 20k Poti)
Pin 4 = RS
Pin 5 = RW(GND)
Pin 6 = Enable
Pin 11, 12, 13, 14 = 4-Bit Daten (D4, D5, D6, D7)
Pin 15, 16 = Hintergrundbeleuchtung (+5V, GND)Im Allgemeinen kommt man (wenns knapp hergeht, aber es reicht wohl immer/meistens) mit acht Pinns aus: 4 Datenbits, zwei Steuerbits, Vcc und GND. Bei mir geht das dann z.B. so (wie gesagt - noArduino):
// - - - - - - - - - - - - - - -
// ####>>>> Initialisierung/Anschlüsse von PORT B für LCD DEM 16x2
// data bit 4 PB0 0 A WS Pin1 |
// data bit 5 PB1 1 A Pin2 | -- Der 10-polige Wannenstecker
// data bit 6 PB2 2 A Pin3 | ist an die Belegung
// data bit 7 SCK, PB3 3 A Pin4 | des Transitortester angepasst
// RS line PB4 RS Pin5 | es kommen noch
// ENABLE line MOSI, PB5 EN1 Pin6 | Pin 9 GND und
// R/W (offen) MISO, PB6 R/W Pin7 | Pin 10 Vcc dazu
// NC (TasteC) SCK, PB7 NC Pin8 |___________________________
// GND Pin9
// Vcc Pn10 | Anmerkg: ENABLE line !
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Das R/W kann fest beschaltet werden, und das 10k-Kontrast-Poti (winzige SMD-Version) habe ich auf meinen zweizeiligen 16x2-LCDs direkt auf die Anschlusspads gelötet. Ist ein bisschen Fummelei, ein kleiner Papierschnippsel als Isolierung- und schon ist das LCD mit Flachbandkabel am 2x10-Wannenstecker bestens aufgehoben. Wer das LCD auslesen will, braucht dann aber doch den Pin R/W.

......28725

Anmerkung: WS im Codefenster bedeutet "Pinn von WannenStecker", der "Code" stammt aus meinem üblichen Quellmodul, hier für mega1284 und Buchse für PortB.

ultimate80563
24.07.2014, 11:12
Ok.
Bis jetzt weiß ich aber noch nicht was ich mir darauf anzeigen lassen will.

Ich habe mich nochmal schlau über die US- Sensoren gemacht und weiß jetzt wie sie funktionieren.

Das ankommende Echo wird dann ja als PWM Wert zurück gegeben und kann umgerechnet werden in cm mit
der doppelten Schallgeschwindigkeit (hin zurück) wenn ich mich nicht irre.
Und jetzt zu meinem Problem.

Bis jetzt Steuer ich den Motor ja über 4 Zeilen an:

digitalWrite(DIR1, HIGH);
digitalWrite(DIR2, HIGH);
digitalWrite(PWM1, 170);
digitalWrite(PWM2, 170);

Jetzt dachte ich das wenn ein Gegenstand z.B. 7 cm vor dem US-Sensor ist das die Motoren langsam rückwärts laufen.

Da dachte ich dann an eine If-bedingung

if(abstand < 8 )
Und dann die Motoren langsam rückwärts laufen lassen.

Das habe ich mal mit einer anderen IF-bedingung schon mal probiert weil die US-Sensoren leider noch Nicht da sind:( und gemerkt das ich nicht 4 Befehle unter if packen kann.
Geht das oder bin ich mit If da völlig auf dem Holzweg?

Rabenauge
24.07.2014, 12:32
Weiss zwar nicht, von welchen Sensoren du genau sprichst, aber die HC-SR04 geben nix PWM zurück.
Die machen das-im Prinzip- so: zuerst gibst du auf den Trigger-Pin Strom.
Dann schreit das Teil los-du schaltest Trig wieder ab und liest _nun_ den Echopin ein (z.B. mit pulseIn).
Die Zeit zwischen "Rufen" und "Echo hören" wird gemessen, und kann dann in ne Entfernung umgerechnet werden.

Das sieht dann z.B. so aus:

const int TrigPin = A0;
const int EchoPin = A1;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW); //Low-high-low level sent a short time pulse to TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //Echo time converted into cm
cm = (int(cm * 100.0)) / 100.0; // retain two decimal places
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}

Nun überlegst du dir halt, wie nahe ran du willst bzw. wanns Zeit wird, umzudrehen, und schreibst dann ungefähr sowas:


if (cm<10)

{
fahreZurueck();

}


void fahreZurueck()
{
lege rueckwärtsgang ein; // halt den Pin umschalten oder was auch immer
PWM_motor= map(cm,0,10,0,255);
}

Ob ich das mit dem map() jetzt aus der Kalten raus so richtig geschrieben hab, müsstest du testen-wenn es hinhaut, bleibt der Roboter 10 cm vorm Hindernis stehen, und je näher es kommt, umso schneller haut er rückwärts ab.
Nachzulesen da: http://arduino.cc/en/pmwiki.php?n=Reference/Map
Das ganze geht vorwärts natürlich auch, so kann man z.B. rechtzeitig vomn Gas gehen, wenn sich ein Hindernis nähert...

Und klar kannst du im if() beliebig viele Befehle schreiben (auch ganze Unterprogramme aufrufen usw.) so:

if(bedingung)
{

mache was;
mache noch was;

.........;

}
http://arduino.cc/en/pmwiki.php?n=Reference/If

ultimate80563
24.07.2014, 12:51
Ok danke. Werde ich heute Abend mal ausprobieren.
Muss jetzt weg.

In meiner If Anweisung habe ich die {} vergessen ](*,)

ultimate80563
07.08.2014, 11:50
Habe heute Post aus Singapur bekommen. Endlich sind die HC-SR04 Ultraschallsensoren da. Bin direkt hoch an den PC, habe mir den Arduino gepackt und sie ausprobiert. Funktioniert alles super.
Heute werde ich mal versuchen einen Sketch zu schreiben indem ich versuche eine grüne LED die ganze Zeit über laufen zulassen bis ich meine Hand (Hindernis) 10 cm vor den US-Sensor halte und die Grüne LED aus geht, dafür eine Gelbe an. Nach 3 Sekunden soll alles wieder von vorne anfangen.(blicke durch deinen Sketch Rabenauge noch nicht durch). Die LED´s benutze ich erstmal als Probe um dem Sketch zu schreiben. Hinterher werde ich natürlich damit die Motoren ansteuern.
Die Steckerleisten sind leider immer noch nicht da. Aber während der langen warte Zeit habe ich mir einige Gedanken zu einer Platine gemacht wie ich sie gestalten will. Weil wie gesagt, 2 Breadboards und viele Flexible Steckbrücken sind nicht gerade ordentlich und es ist schwer dadurch zu blicken.
Ich habe leider kein Programm wo ich die Platine mal aufbauen kann um sie mal so durch zugehen wie alles platziert werden muss(sonst muss ich mich halt mal ans Zeichenbrett wagen:) ). Ich halte mal die Augen offen.

Rabenauge
07.08.2014, 14:36
Fürs Steckbrettl (und den meisten Arduinokram) ist Fritzing am effektivsten.
Lochraster-Leiterplatten entwerfe ich (wenn es denn komplizierter wird) mit Lochmaster-aber der kostet was.
Es gibt auch ein kostenloses Programm-Blackboard oder so. Lief auf meinem Rechner grausam, drum hab ichs entsorgt.

Mein Programm oben ist doch easy-was von verstehst du denn nicht?

ultimate80563
07.08.2014, 16:06
ok habe mir gerade mal Fritzing angeschaut. Da werde ich mich jetzt mal ran setzen.

deinen 1. Code verstehe ich. Der gibt dann doch den Abstand zum Hindernis am Serial Monitor aus oder?

bei dem 2 habe ich ein paar Probleme.

also zuerst kommt ja if.

wenn cm kleiner als 10 dann fahre zurück.

so dann kommt die Funktion fahre zurück.

dann kommt der befehl map. Habe ich mir mal auf der Internetseite durchgelesen aber irgendwie hakt es da:(

Rabenauge
07.08.2014, 18:08
Mit map() kannst du Wertebereiche anpassen.
Nehmen wir an, du hast einen analogen Eingang-der kann von 0 bis 1024 haben (Poti oder was dran).
Mit dem Poti willst du nun nen Motor absteuern, so dass bei Poti=0 der Motor steht, und bei Poti=100% der Motor Vollgas läuft.
Du kannst aber nur 255 PWM-Stufen ausgeben, also mappst du den einen Bereich auf den anderen:

drehzahl=map(potiwert, 0,1023,0,255).
Damit werden die Wertebereiche automatisch aneinander abgepasst.

Geistesblitz
08.08.2014, 09:15
Würde da dann nicht einfach
drehzahl=potiwert*256/1024 reichen?

ultimate80563
08.08.2014, 10:11
Das kann ich dir nicht beantworten Geistesblitz. Dafür kann ich das noch nicht so gut. Rabenauge dann schon eher ;)

Habe mich heute Morgen mal dran gesetzt und dabei ist das entstanden:

28855

Ich baue mir Stecker aus den Kopfleisten die ich mir noch bestellt habe um flexibler zu sein.

Oben der Plan ist glaube nicht ganz ordentlich geworden. Weil sich mehrere Kabel überlappen. Habe es oft probiert ohne zu schaffen und das ist das beste Ergebnis.

Klebwax
08.08.2014, 10:34
Würde da dann nicht einfach
drehzahl=potiwert*256/1024 reichen?

Auf die Idee könnte man kommen. Man könnte da auch pwm = potiwert / 4 daraus machen, mache Compiler machen das auch von selbst. Und wenn es ein Integer ist, machen sie da möglicherweise auch ein zweifaches rechts-shift daraus.

MfG Klebwax

Rabenauge
08.08.2014, 11:13
Der Schaltplan sieht doch schon recht brauchbar aus.
Sieh mal vorsichtigerweise noch nen Schalter vor in der Zuleitung zu den Motoren-offenbar haben die grossen Treiberplatinen teilweise das Verhalten, dass sie während nem Reset Strom auf die Motoren geben-meine im Segway tut es nicht, aber im Arduinoforum hat jemand das Problem-trotz der Pulldowns.
Wenn du aber die Plusleitung zwischen Akku und Motor-Platine unterbrichst, muss da Ruhe sein.

In ein, zwei Tagen geht mein Monstertruck übrigens auch wieder auf Piste-hab das Elektronik-Deck noch mal komplett neu gemacht, da mir zu viel Dreck (Monstertrucks sind halt Wildschweine auf Rädern) rauf kam. Die Monsterreifen schaufeln den ja fleissig unter die Karosse.
Dann gibts auch haltbarere Kabelbäume, und das vorherige Mäusenest unter der Haube verschwindet.
Der Kompass ist leider allerdings noch immer nicht da, und ohne den ist das GPS bei einem so schnellen Auto nicht so wirklich zu gebrauchen, wie ich festgestellt hab. Aber _irgendwann_ wird der ja nun bald mal eintreffen..

Zu der map()-funktion: http://arduino.cc/en/pmwiki.php?n=Reference/Map ganz unten steht, wie die intern arbeitet.

Geistesblitz
08.08.2014, 11:47
@KlebWax: stimmt, das wär noch einfacher, war ich nicht ganz aufmerksam...
Jedenfalls wäre die Lösung mit dem Shift wesentlich effizienter als die Map-Funktion, würde ich mal sagen, da Map anscheinend die ganze Formel ausrechnet, auch wenn da Terme wegfallen würden.

Rabenauge
08.08.2014, 12:31
Schon-aber dafür gibt es z.B. auch die Möglichkeit, Werte einfach "umzudrehen" indem man den höchsten Eingangswert auf den niedrigsten Ausgangswert mappt und so weiter.
Auch kann man die Bereiche leicht anpassen, indem man Werte limitiert.Das funktioniert sowohl im Ein-als auch im Ausgang, wenn man z.B. nie "Vollgas" geben will.

Geistesblitz
08.08.2014, 14:06
Klar, nur scheint das in diesem Fall ja nicht nötig zu sein

ultimate80563
12.09.2014, 15:02
So endlich bin ich auf der neuen Schule aber ich habe gemerkt das ich kaum noch Freizeit habe und ich Abends auch müde bin wodurch ich dieses Projekt erstmal einfrieren werde.
Nach der Schule (2017) werde ich mich dann wohl nochmal damit beschäftigen oder sogar als Abschlussprojekt verwenden. Natürlich beschäftige ich mich weiterhin mit diesem Thema (Roboter, autonome Fahrzeuge z.B. in den Ferien) weil es mich Interessiert werde aber dennoch erstmal eine Pause einlegen.

Noch eine kleine Frage hier an das Forum habe ich aber:)
habe was von Bitcoins gehört und das man die mit dem Raspberry Pi Minen kann. Was haltet ihr davon ob es das wohl bringt. Also im Preis-Leistungs-Verhältnis Stromkosten zu Bitcoins.

Ich habe keinen pi und auch keinen dazugehörigen USB-Miner und werde ihn mir auch voraussichtlich nicht holen, aber nur aus Interesse wollte ich mal eure Meinung dazu hören was ihr davon haltet. Im Internet ist die Meinung ja eher zwei gespalten.