DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

13 Schritt:Schritt 1: was man so braucht Schritt 2: ERSTE SCHRITTE: ANSCHLUSS DTMF mit Arduino Schritt 3: Einstellen der L293D Schritt 4: Anschluss der Sensoren mit ARDUINO Schritt 5: Anschließen des 5 BABYS MIT MUTTER Schritt 6: DIE CODE Schritt 7: der Code: - FÜR PING SENSOR Schritt 8: Schritt 9: DIE CODE: - für den HC-SR04 SENSOR Schritt 10: Vorbereitung des Körpers DER ROBOT !!!!!! Schritt 11: In Kontinuität ...... Schritt 12: PRÜFUNG ...... Schritt 13: Schließen der Haube

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DTMF oder Dual Tone Multi Frequency ist nette kleine Art der Steuerung von Maschinen mit Ihrem Handy. Diese instructable zeigt Ihnen, lieber Leser, wie man ein billiger zu machen als Schmutz DTMF gesteuerten Roboter, der kann auch funktionieren autonom yeh! das ist richtig AUTONOM, wenn es eng wird.
Das Projekt wird rund um die ach so vielseitig Arduino UNO errichtet (Oh Arduino ist ihr alles, was Sie nicht tun können !!!!!!).
Die Programmierung ist unkompliziert, aber stellen Sie sicher, alles ist zur Hand, bevor Sie basteln starten.
Das gesamte Projekt kann für weniger als 50 $ schlug zusammen und kann Stunden sinnlosen Spaß für Sie und die Familie Haustier mitbringen. Schritt 1: was man so braucht



DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Alle 11 Artikel anzeigen

1: - DTMF-Modul (http://www.ebay.in/itm/like/20119037796).
2: - Arduino UNO.
3: - Drahtbrücken (Mann zu Frau und Mann zum Mann).
4: - PING Ultraschallsensor (Nutzen auch Sie HC-SR04 SENSOR weil es billiger ABER Sie müssen den Code, der ich in der Codeabschnitt EXPLAIN ÄNDERN).
5: - 2 IR-Sensor (http://www.amazon.in/ROBOSOFT-SYSTEMS-Single-Sensor-Module/dp/B00U3LKGTG/ref=sr_1_cc_3?s=aps&ie=UTF8&qid=1427820514&sr=1-3-catcorr&keywords=ir+sensor+module)
6: - 2 kleine Brotschneidebretter.
7: - L293D MOTOR DRIVER (http: //www.amazon.in/L293D-Push-Pull-Four-Channel -...) Sie können auch das L293D Modul erhältlich AT (http://www.ebay.in / itm / wie / 271552019152)
8: - 2 RÄDER UND 2 Schrittmotoren mit Getriebes (AUF AMAZON) Wenn Sie die Motoren ohne dem Getriebe dann werden sie NICHT MÖGLICH genügend Drehmoment auf die Räder zu bewegen, wenn der Roboter auf Boden gelegt ergeben. "PERSÖNLICHE ERFAHRUNG!!!!!!"
9: - ein Handy mit 3,5 mm Klinke-Unterstützung und ONE für den Aufruf.
10: - SMALL BOX.
11: - beidseitig TAPE.Step 2: Erste Schritte: Anschließen DTMF mit Arduino

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Für diejenigen unter Ihnen, die nicht vertraut mit DTMF sind, habe ich eine unten angegebenen Link, bitte überprüfen.
http://www.mediacollege.com/audio/tone/dtmf.html
Verbinden Es gibt 4 Stiften auf einer Seite der DTMF-Controller als D0, D1, D2, D3 markiert diese Stifte zu verbinden, um den Zapfen 3, 4, 5 und 6 von Arduino jeweils D0 dh Stift 3, und so weiter. Wir werden Anziehungskraft für die DTMF aus dem Arduino. Ich werde dich in der 4. Schritt erklären, wie. Schritt 3: EINSTELLUNG DES L293D

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Der Vorteil der Verwendung eines Motortreibers und Schrittmotoren besteht darin, dass diese Anordnung ist billiger im Vergleich zur Verwendung Servomotoren.
Schließen Sie die Stifte 4, 5, 12, 13 zusammen mit kleinen Brücken. Sie können diese Jumper mit festen Kern Aluminiumdrähte zu machen. Verbinden Sie die Pins 1 und 9 zusammen und Stiften 8 und 16 zusammen. Verbinden Sie den Stift:
ARDUINO <=========> DRIVER
Pin 9 <----------------------------> Pin 2
Pin 10 <--------------------------> Pin 7
Stift 11 <--------------------------> Pin 15
Pin 12 <--------------------------> Pin 10
Verbinden Sie das 5V vom Arduino mit dem Pin 1 bis Brotbrett und GND an die Pins 4, 5, 12, oder 13, wird einem zu tun. Schritt 4: Anschluss der Sensoren Arduino

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Der Sensor Ich verwende ein Ultraschallsensor PING aufgrund seiner hohen Zuverlässigkeit und geringerer Pinzahl Vergleich zu HC-SR04, die ein 4-Pin-Sensor ist, da es separate Pins für Ein- und Ausgangssignal, während Ping verwendet das gleiche Pin für Eingangs und Ausgabe. Auch ich bekam es kostenlos, warum also zu einem anderen zu kaufen !!!!!!
Ich werde Ihnen sagen, wie Sie den Code für die 4-Pin-Sensor später im Code-Abschnitt ändern. Ausgabemittel, dass das Sensormodul wird vom Arduino angeregt werden, um den Ultraschallimpuls ausgelöst, und Eingabemittel, dass die reflektierte Welle, die von dem Sensor erfasst wird dem Arduino. Verbinden Sie den Signalstift an den Pin 8 auf Arduino.
Da wir um eine begrenzte Anzahl von Stromquelle verwenden, werden wir in der Strom aus dem Arduino;

So schließen Sie den 5V-Pin des Sensors auf 5V-Versorgung des Fahrers Steckbrett ist (AUS DEM ARDUINO) und GND mit der Masse der Treiberplatine. Wenn Sie einen Treiber-Modul verwenden, stellen Sie eine gemeinsame 5V ausziehen Punkt und Masseverbindung für diese beiden. Schließen Sie auch das Stromversorgungsstift des DTMF-Modul mit dem Brotbrett Stromversorgung.
Die Ausgangspins des IR-Sensors in ähnlicher Weise eine Verbindung mit dem Stift 11 und 12 gemäß dem Code. Schritt 5: ANSCHLUSS DER 5 BABYS MIT MUTTER

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Verbinden Sie nun alle fünf Module an den Arduino. Schritt 6: DIE CODE

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Die Codierung, war eine Herausforderung, da die DTMF-Code für nur eine Stelle zu einer Zeit zu erzeugen.
Das Problem wurde für den manuellen Modus, wo ich hatte, um einen Schlüssel zum Umschalten in den Handbetrieb definieren Codierung. Ich beginne mit einem Beispiel erklären: -
Leere Schleife ()
{Int z = digitalRead (d0);
int y = digitalRead (d1);
int x = digitalRead (d2);
int w = digitalRead (d3);
if ((w == LOW) && (x == LOW) && (y == LOW) && (z == HIGH)), dh Stelle 1
{If ((w == LOW) && (x == LOW) && (y == HIGH) && (z == LOW)) dh stelligen 2
Der Code sollte wie folgt funktionieren: - wenn 1 gedrückt wird, in den manuellen Modus und durch Drücken von 2 auf dem Tastenfeld der Roboter vorwärts bewegt geht der Roboter. Aber was ist eigentlich passiert ist, dass, wie ich 2 Drücken Sie den Roboter nicht mehr im Handbetrieb. WARUM ??????
Die Antwort ist, dass der Staat an den Pins des Arduino mit dem DTMF angeschlossen haben sich nun geändert, dh sie sind nicht mehr 1, weil der Staat Informationen nicht überall gespeichert (weil der Staat sich ändern muss, wenn der Roboter in den autonomen Modus umgeschaltet und die DTMF auch nur Code für die zuletzt gedrückte Taste zu erzeugen und kann nicht gespeichert werden, den Code selbst).
DIE LÖSUNG: - Die Lösung war einfach statt, indem eine Bedingung für eine Zahl, zum Schalten des Modus I es für eine Ziffer gesetzt hatte: -
Beispiel: -
if (w == LOW)
{If ((w == LOW) && (x == LOW) && (y == HIGH) && (z == LOW))
{Digital (motorL1, HIGH);
digital (motorL2, LOW);
digital (motorR1, HIGH);
digital (motorR2, LOW);}
if ((w == LOW) && (x == HIGH) && (y == LOW) && (z == HIGH))
{Digital (motorL1, LOW);
digital (motorL2, HIGH);
digital (motorR1, LOW);
digital (motorR2, HIGH); }
if ((w == LOW) && (x == HIGH) && (y == LOW) && (z == LOW))
{Digital (motorL1, LOW);
digital (motorL2, HIGH);
digital (motorR1, HIGH);
digital (motorR2, LOW); }
if ((w == LOW) && (x == HIGH) && (y == HIGH) && (z == LOW))
{Digital (motorL1, HIGH);
digital (motorL2, LOW);
digital (motorR1, LOW);
digital (motorR2, HIGH); }
if ((w == LOW) && (x == HIGH) && (y == HIGH) && (z == HIGH))
{Digital (motorL1, LOW);
digital (motorL2, LOW);
digital (motorR1, LOW);
digital (motorR2, LOW); }
}
SEIT 'W' bleibt immer niedrig für die ABOVE DIGITS, WIRD DIE W = 0 Zustand während BE TRUE.
Schritt 7: der Code: - FÜR PING SENSOR

  <p> const int serialPeriod = 250;  // Ein Zeitraum von 250 ms = eine Frequenz von 4 Hz <br> unsigned long timeSerialDelay = 0; </ p> <p> const int UltraloopPeriod = 20;  // Eine Periode von 20 ms = eine Frequenz von 50 Hz
 unsigned UltraLoopDelay = 0; </ p> <p> const int SENSOR_1 = 10;  // Eingabe / Ausgabe vom SENSOR_1

 
  int motorL1 = 6;  // Ausgang für Motortreiber Pin 2
  int motorL2 = 7;  // Ausgang für Motortreiber Pin 7
 
  int motorR1 = 8;  // Ausgang für Motortreiber Stift 15
  int motorR2 = 9;  // Ausgang für Motortreiber Stift 10
  
  int d0 = 2;  // Eingabe von DTMF-pin D0
  int d1 = 3;  // Eingabe von DTMF Stift D1
  int d2 = 4;  // Eingabe von DTMF-Pin D2
  int d3 = 5;  // Eingabe von DTMF Stift D3
 
  int ultrasonicTime;  // Variable zu Zeit speichern
  int ultrasonicDistance;  // Variable zu speichern Entfernung berechnet
 
  Leere setup ()
 {
    Serial.begin (9600);  // Setzen serielle Kommunikationsgeschwindigkeit
  
    pinMode (motorL1, OUTPUT);
    pinMode (motorL2, OUTPUT);
    pinMode (motorR1, OUTPUT);
    pinMode (motorR2, OUTPUT);
   
    pinMode (d0, INPUT);
    pinMode (d1, INPUT);
    pinMode (d2, INPUT);
    pinMode (d3, INPUT);
 } </ p> <p> void loop ()
 {
   int z = digitalRead (d0);
   int y = digitalRead (d1);
   int x = digitalRead (d2);
   int w = digitalRead (d3);
  
   /*----------------------------------------- MANUELLER MODUS ------ --------------------------------- * /
  
   if (w == LOW)
   {
     if ((w == LOW) && (x == LOW) && (y == HIGH) && (z == LOW))
     {
       digital (motorL1, HIGH);
       digital (motorL2, LOW);
       digital (motorR1, HIGH);
       digital (motorR2, LOW);
     }
    
     if ((w == LOW) && (x == HIGH) && (y == LOW) && (z == HIGH))
     {
       digital (motorL1, LOW);
       digital (motorL2, HIGH);
       digital (motorR1, LOW);
       digital (motorR2, HIGH);
     }
    
     if ((w == LOW) && (x == HIGH) && (y == LOW) && (z == LOW))
     {
       digital (motorL1, LOW);
       digital (motorL2, HIGH);
       digital (motorR1, HIGH);
       digital (motorR2, LOW);
     }
    
     if ((w == LOW) && (x == HIGH) && (y == HIGH) && (z == LOW))
     {
       digital (motorL1, HIGH);
       digital (motorL2, LOW);
       digital (motorR1, LOW);
       digital (motorR2, HIGH);
     }
    
      if ((w == LOW) && (x == HIGH) && (y == HIGH) && (z == HIGH))
     {
       digital (motorL1, LOW);
       digital (motorL2, LOW);
       digital (motorR1, LOW);
       digital (motorR2, LOW);
     }
   }
  
    / * ----------------------------------- AUTONOMOUSMODE ------------ ----------------------- * /
  
  
   if (w == HIGH)
   {
     Sichtweite();
    
     if ((millis () - UltraLoopDelay)> = UltraloopPeriod)
     {
       readUltrasonicsensor_1 ();
       Motorstart ();
       UltraLoopDelay = millis ();
     }
   }
  }    
 nichtig readUltrasonicsensor_1 () // fuction zu SENSOR_1 Daten und finden Entfernung                  
 {
    pinMode (SENSOR_1, OUTPUT);
    digital (SENSOR_1, LOW);
    Verzögerung (2);
    digital (SENSOR_1, HIGH);
    Verzögerung (10);
    digital (SENSOR_1, LOW);
  
    pinMode (SENSOR_1, INPUT);
    ultrasonicTime = pulseIn (SENSOR_1, HIGH);
    ultrasonicDistance = (ultrasonicTime / 2) / 29;  // Berechnung, um den Abstand des Hindernisses von ultrasoni // c-Sensor messen
 } </ p> <p> void Motorstart () // Funktion zum Antrieb des Motors nach spürte Abstand
 {
                       
  
    if (ultrasonicDistance> 10)                          
    {                                                     
     
       
          digital (motorL1, HIGH);
          digital (motorL2, LOW);
          digital (motorR1, HIGH);
          digital (motorR2, LOW);  
        }
       if ((IRSL == HIGH) && (irsR == LOW)) 
        {
          digital (motorL1, HIGH);
          digital (motorL2, LOW);
          digital (motorR1, LOW);
          digital (motorR2, HIGH);
        }
     
      if ((IRSL == LOW) && (irsR == HIGH))  
        {
          digital (motorL1, LOW);
          digital (motorL2, HIGH);
          digital (motorR1, HIGH);
          digital (motorR2, LOW);
        }
      
       if ((IRSL == HIGH) && (irsR == HIGH))
        {
          digital (motorL1, LOW);
          digital (motorL2, HIGH);
          digital (motorR1, LOW);
          digital (motorR2, HIGH);
        }
       
    }
   
    if (ultrasonicDistance <10)                              
    {                                                                    
          digital (motorL1, LOW);
          digital (motorL2, HIGH);
          digital (motorR1, HIGH);
          digital (motorR2, LOW);
        }
      
      
     
    }
 } </ p> <p> / * --------------------------- KONTROLLE DER ULTRSONIC SENSOR --------- ---------------- * / </ p> <p> void viewDistance () // Funktion zur Entfernung auf serielle Monitor anzeigen
 {// Um ​​zu prüfen, ob der Ultraschall-Sensorcode richtig funktioniert 
   if ((millis () - timeSerialDelay)> = serialPeriod)
   {
     Serial.print ("Distance");
     Serial.print (ultrasonicDistance);
     Serial.print ("cm");
     Serial.println ();
    
     timeSerialDelay = millis ();
   }
 } </ p> 
Schritt 8:

Schritt 9: DIE CODE: - für den HC-SR04 SENSOR

  <p> Ich habe einige Korrekturen (wie {CORRECTIONS} markiert) gemacht und einige neue Linien ({wie markiert {MEHR}}) FÜR HC-SR04.  </ p> <p> <br>


 <p> const int serialPeriod = 250;  // Ein Zeitraum von 250 ms = eine Frequenz von 4 Hz <br> unsigned long timeSerialDelay = 0; </ p> <p> const int UltraloopPeriod = 20;  // Eine Periode von 20 ms = eine Frequenz von 50 Hz
 unsigned UltraLoopDelay = 0; </ p> <p> const int sensor_1_in = 10;  // Eingabe von der SENSOR_1
  const int sensor_1_out = 13;  // Vom SENSOR_1 Ausgangs
 

 int motorL1 = 6;  // Ausgang für Motortreiber Pin 2
  int motorL2 = 7;  // Ausgang für Motortreiber Pin 7
 
  int motorR1 = 8;  // Ausgang für Motortreiber Stift 15
  int motorR2 = 9;  // Ausgang für Motortreiber Stift 10
  
  int d0 = 2;  // Eingabe von DTMF-pin D0
  int d1 = 3;  // Eingabe von DTMF Stift D1
  int d2 = 4;  // Eingabe von DTMF-Pin D2
  int d3 = 5;  // Eingabe von DTMF Stift D3
 
  int ultrasonicTime;  // Variable zu Zeit speichern
  int ultrasonicDistance;  // Variable zu speichern Entfernung berechnet
 
  Leere setup ()
 {
    Serial.begin (9600);  // Setzen serielle Kommunikationsgeschwindigkeit
  
    pinMode (motorL1, OUTPUT);
    pinMode (motorL2, OUTPUT);
    pinMode (motorR1, OUTPUT);
    pinMode (motorR2, OUTPUT);
   
    pinMode (d0, INPUT);
    pinMode (d1, INPUT);
    pinMode (d2, INPUT);
    pinMode (d3, INPUT);
 } </ p> <p> void loop ()
 {
   int z = digitalRead (d0);
   int y = digitalRead (d1);
   int x = digitalRead (d2);
   int w = digitalRead (d3);
  
   /*----------------------------------------- MANUELLER MODUS ------ --------------------------------- * /
  
   if (w == LOW)
   {
     if ((w == LOW) && (x == LOW) && (y == HIGH) && (z == LOW))
     {
       digital (motorL1, HIGH);
       digital (motorL2, LOW);
       digital (motorR1, HIGH);
       digital (motorR2, LOW);
     }
    
     if ((w == LOW) && (x == HIGH) && (y == LOW) && (z == HIGH))
     {
       digital (motorL1, LOW);
       digital (motorL2, HIGH);
       digital (motorR1, LOW);
       digital (motorR2, HIGH);
     }
    
     if ((w == LOW) && (x == HIGH) && (y == LOW) && (z == LOW))
     {
       digital (motorL1, LOW);
       digital (motorL2, HIGH);
       digital (motorR1, HIGH);
       digital (motorR2, LOW);
     }
    
     if ((w == LOW) && (x == HIGH) && (y == HIGH) && (z == LOW))
     {
       digital (motorL1, HIGH);
       digital (motorL2, LOW);
       digital (motorR1, LOW);
       digital (motorR2, HIGH);
     }
    
      if ((w == LOW) && (x == HIGH) && (y == HIGH) && (z == HIGH))
     {
       digital (motorL1, LOW);
       digital (motorL2, LOW);
       digital (motorR1, LOW);
       digital (motorR2, LOW);
     }
   }
  
    / * ----------------------------------- AUTONOMOUSMODE ------------ ----------------------- * /
  
  
   if (w == HIGH)
   {
     Sichtweite();
    
     if ((millis () - UltraLoopDelay)> = UltraloopPeriod)
     {
       readUltrasonicsensor_1 ();
       Motorstart ();
       UltraLoopDelay = millis ();
     }
   }
  }    
 Leere readUltrasonicsensor_1 () // GEÄNDERT                  
 {
    digital (sensor_1_out, LOW);
    Verzögerung (2);
    digital (sensor_1_out, HIGH);
    Verzögerung (10);
    digital (sensor_1_out, LOW);
  
    ultrasonicTime = pulseIn (sensor_1_in, HIGH);
    ultrasonicDistance = (ultrasonicTime / 2) / 29;  // Berechnung, um den Abstand des Hindernisses von ultrasoni // c-Sensor messen
 } </ p> <p>

 Motorstart erlöschen () // Funktion, um den Motor anzutreiben
 {
  
    if (ultrasonicDistance> 10) /
    {                                                                        
       
          digital (motorL1, HIGH);
          digital (motorL2, LOW);
          digital (motorR1, HIGH);
          digital (motorR2, LOW);  
     }
      
   
    if (ultrasonicDistance <10)                               
    {                                                                                    
        {
          digital (motorL1, HIGH);
          digital (motorL2, LOW);
          digital (motorR1, LOW);
          digital (motorR2, HIGH);
        }
     
     
     
    }
 } </ p> <p> / * --------------------------- KONTROLLE DER ULTRSONIC SENSOR --------- ---------------- * / </ p> <p>

 nichtig viewDistance ()                                             
 {                                                                       
   if ((millis () - timeSerialDelay)> = serialPeriod)
   {
     Serial.print ("Distance");
     Serial.print (ultrasonicDistance);
     Serial.print ("cm");
     Serial.println ();
    
     timeSerialDelay = millis ();
   }
 } </ p> 
Schritt 10: Vorbereitung des Körpers DER ROBOT !!!!!!

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Das Loch auf dem Feld in der 1. Bild hat nichts damit zu tun.

1: Nehmen Sie eine gewöhnliche Karton bohren einige Löcher für die Motorwelle mit dicken Körper Stift.
2: Legen Sie die Motoren mit dem doppelseitigen Klebeband oder mit einem anderen praktikable Methode Sie Schritt 11. In Kontinuität ......

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Für den Sensor, müssen Sie ein paar Anpassungen oben gezeigt zu machen. Der einzige Grund für die Verwendung von kleinen Brücken, war, dass der Sensor nahm mehr Raum, als ich dachte, so hatte ich den größten Teil der Steckbrett außen zu platzieren. Es ist etwas kompliziert zu erklären, aber Sie werden verstehen, was auf, wenn Sie diesen Punkt in den Aufbau zu erreichen gehen.
Jede Art und Weise, können Sie andere Techniken, die Ihre Phantasie für die Platzierung des Sensors auf dem Roboter passen zu verwenden, aber das, was ich versucht zu tun war, indem Sie die Drähte im Inneren, ohne Drähte außerhalb der Box. auch Sie den Sensor gerade wenn Sie es wünschen montieren. Aber stellen Sie sicher, dass der Sensor nicht zu hoch oder es wird nicht in der Lage zu erkennen, Objekte der geringere Höhe sein Schritt. 12: PRÜFUNG ......

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Legen Sie die Mutter und seine Kinder in die Seitenfeld und machen Sie einen Testlauf ohne Räder.
Keine Notwendigkeit zu sagen, dass die DTMF fehlt, ist es gerade heraus hängen.

Nach dem Code habe ich geschrieben: -
2 = Vorwärts
5 = rückwärts
4 = links abbiegen
6 = rechts
stellige andere als 1, 2, 3, 4, 5, 6 und 7 wird der Roboter im autonomen Modus zu schalten.

Schritt 13: Schließen der Haube

DUAL MODE ROBOT = (Autonome / manuelle Steuerung)

Jetzt ist es Zeit, um alles, was im Inneren des Körpers zu platzieren schließen Sie die Haube und ...... PLAY !!!!!!
ALLES GUTE......