Ich habe es leider bei Conrad nicht mehr gefunden.
Aber hier Fotos:
Anhang 28721
Anhang 28722
Druckbare Version
Ich habe es leider bei Conrad nicht mehr gefunden.
Aber hier Fotos:
Anhang 28721
Anhang 28722
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-...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.
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:)
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):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.Code:// - - - - - - - - - - - - - - -
// ####>>>> 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 !
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
......Anhang 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.
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?
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:
Nun überlegst du dir halt, wie nahe ran du willst bzw. wanns Zeit wird, umzudrehen, und schreibst dann ungefähr sowas:Code: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);
}
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.Code: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);
}
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:
http://arduino.cc/en/pmwiki.php?n=Reference/IfCode:if(bedingung)
{
mache was;
mache noch was;
.........;
}
Ok danke. Werde ich heute Abend mal ausprobieren.
Muss jetzt weg.
In meiner If Anweisung habe ich die {} vergessen ](*,)
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.
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?