<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <link href="https://funduinoshop.com/blog/projekte/?sAtom=1" rel="self" type="application/atom+xml" />
    <author>
        <name>Funduinoshop</name>
    </author>
    <title>Blog / Atom Feed</title>
    <id>https://funduinoshop.com/blog/projekte/?sRss=1</id>
    <updated>2026-05-08T13:53:46+02:00</updated>
    
        <entry>
            <title type="text">RC Car für Arduino bauen: Autonomes Fahrzeug - Teil 3</title>
            <id>https://funduinoshop.com/rc-car-fuer-arduino-bauen-autonomes-fahrzeug-teil-3</id>
            <link href="https://funduinoshop.com/rc-car-fuer-arduino-bauen-autonomes-fahrzeug-teil-3"/>
            <summary type="html">
                <![CDATA[
                
                                            Willkommen zur dritten Folge unserer Blogreihe über Roboterautos. Im ersten Teil haben wir die Grundlagen für das Basisfahrzeug kennengelernt. Im zweiten Teil haben wir ein universelles Codesystem entwickelt, mit dem wir Fahrtstufen des Roboterautos festlegen...
                                        ]]>
            </summary>
            <content type="html">
                <![CDATA[
                  Mit Roboterautos die Mobilität der Zukunft verstehen, Teil 3  
 Willkommen zur dritten Folge unserer Blogreihe über Roboterautos. Im   ersten Teil  &amp;nbsp;haben wir die Grundlagen für das Basisfahrzeug kennengelernt. Im   zweiten Teil  &amp;nbsp;haben wir ein universelles Codesystem entwickelt, mit dem wir Fahrtstufen des Roboterautos festlegen, und eine einfache Fernsteuerung mit einer Infrarot-Fernbedienung realisiert. Aufgrund der physikalischen Grenzen dieser Fernsteuerung möchte ich in dieser Folge die Übertragung der Fahrtanweisungen mit Bluetooth, z.B. von einem Smartphone an den BT-Empfänger HC-05, zeigen. Bluetooth ist ein 2,4GHz-Funksignal mit kurzer Reichweite. Sicher bis ca. 10m und störungsfrei bei Sonnenlicht. 
 Das Bluetooth-Modul HC-05 ist eigentlich ein Transceiver= Trans mitter + Re ceiver . Wir benutzen es allerdings nur als Empfänger, für das Senden der Fahrtanweisungen verwenden wir eine Bluetooth-APP am Android Smartphone (wegen des Sonderweges von Apple bei Bluetooth funktioniert es nicht mit einem iPhone). Es ist grundsätzlich möglich, auch eine Bluetooth-Fernbedienung mit dem HC-05 zu bauen; dafür werden jedoch ein zweiter HC-05, weiterer Micro Controller und ein Eingabegerät (Joystick-Controller) benötigt. 
 &amp;nbsp;  
  Von den sechs Pins des HC-05 Moduls werden nur vier benötigt: VCC (5V) und GND für die Spannungsversorgung des Moduls, sowie RXD und TXD zum Anschluss an zwei Pins des Mikrocontrollers, an denen SoftwareSerial eingerichtet wird. Allerdings kann man die Aufschrift LEVEL: 3.3V nicht ignorieren, um das Modul nicht zu beschädigen. An unserem Mikrocontroller mit 5V-Logik benötigen wir zumindest für den RXD Pin einen Spannungsteiler von 5V auf 3,3V, also z.B. Widerstände von 1 kOhm und 2,2 kOhm. 
 Der Schaltplan: HC-05 Modul am Mikrocontroller    
 Die AT-Befehle des HC-05 Moduls für Arduino Mikrocontroller 
 Links neben dem mit Key gekennzeichneten Anschluss befindet sich ein kleiner Taster (Button), der für die Konfiguration von Bedeutung ist. Wenn dieser Button beim Einschalten gedrückt wird, gelangen wir in den AT Kommando-Modus (die LED blinkt langsam im 2s-Rhythmus), in dem wir mit sogenannten AT-Befehlen (für Attention, Achtung) die Einstellungen vornehmen. Dazu benutzen wir ein modifiziertes Beispiel-Programm, bei dem die übliche serielle Schnittstelle mit dem Serial Monitor der Arduino IDE und der HC-05 über SoftwareSerial verbunden wird. 
  /*
  Software serial multiple serial test
 Receives from the hardware serial, sends to software serial.
 Receives from software serial, sends to hardware serial.
 The circuit:
 * RX is digital pin 10 (connect to TX of other device)
 * TX is digital pin 11 (connect to RX of other device)                           // voltage divider!
 created back in the mists of time
 modified 25 May 2012
 by Tom Igoe
 based on Mikal Hart&#039;s example
 This example code is in the public domain.
 */ 
 # include   &amp;lt;SoftwareSerial.h&amp;gt;  
 SoftwareSerial  BTSerial( 10 ,  11 );  // RX, TX                                              // mySerial changed to BTSerial 
 char  c= &#039; &#039; ;                                                                                                       // Declaration of variable for transmission 

 void   setup () {
   // Open serial communications and wait for port to open: 
   Serial . begin ( 9600 );                                                                                    // Baud rate changed to 9600 
   Serial . println ( &quot;Serial started!&quot; );

   // set the data rate for the SoftwareSerial port 
  BTSerial. begin ( 38400 );                                                                             // Baud rate for BT 38400 
   Serial . println ( &quot;BTSerial started!&quot; );
}

 void   loop () {  // run over and over 
   if  (BTSerial. available ()) {
    c=BTSerial. read ();
     Serial . write (c);
  }
   if  ( Serial . available ()) {
    c= Serial . read ();
    BTSerial. write (c);
     Serial . write (c);                                                                                        // re-transmission of input in Serial Monitor 
  }
} 
 Die wesentlichen AT-Befehle werden im folgenden Bild verwendet. Die Gegenstelle, der HC-05, sendet ggf. eine Antwort und quittiert mit OK. 
 Uns interessieren vor allem der Name und die HEX-Adresse, um das Modul später auf dem Smartphone eindeutig zu identifizieren. Die AT-Befehle werden dabei in den seriellen Monitor des Mikrocontrollers eingegeben. Im nachfolgenden Bild sehr Ihr den seriellen Monitor der Arduino IDE. 
 Wer möchte, kann das Standard-Passwort 1234 ändern mit &quot; AT+PSWD=xxxx &quot;, wobei x für eine Ziffer von 0 bis 9 steht. Danach mit &quot; AT+PSWD? &quot; prüfen, ob die Eingabe erfolgreich war.    Nach Beendigung der Eingaben wird das Modul kurz vom Strom getrennt. Nach dem Wiedereinschalten ohne Knopfdruck befindet sich das HC-05-Modul im Standard-Modus. Die LED blinkt schnell (ca. 5-mal/s). 
 Modifikationen des RC-Cars: anderes Motorshield 
 Nun zum Robot Car. Nachdem wir beim letzten Mal den Motor Controller V2 verwendet haben, der für die Steuersignale nur die zwei I2C-Anschlüsse SDA=A4 und SCL=A5 benötigt, möchte ich dieses Mal den älteren Motor Controller V1 vorstellen, der zwar viele digitale Pins blockiert, aber häufig zum Schnäppchenpreis zu kaufen ist.     Auch dieses Motorshield habe ich ein wenig modifiziert, um Zugang für Sensoren und Funkempfänger zu erhalten. Auf der Seite der digitalen Pins gibt es nur einen Pin, der mit Hilfe eines gewinkelten Steckers zugänglich wird: Pin 2. Das ist gut für diejenigen, die hier den IR-Empfänger anschließen möchten. Mehr Möglichkeiten für Erweiterungen gibt es auf der anderen Seite, wo man mit Hilfe von Federleisten (auch Buchsenleisten genannt) Zugang zu sämtlichen analogen Eingängen sowie zur Spannungsversorgung erhält. 
 Da sämtliche analogen Eingänge auch als digitale Ein- oder Ausgänge genutzt werden können, haben wir hier die Möglichkeit, unsere Funkempfänger anzuschließen. Das klappt wunderbar mit dem 433 MHz Transceiver HC-12 (siehe nächste Folge), aber für den BT-Empfänger HC-05 nur mit Einschränkungen. Erstens können wir den RXD-Pin nicht direkt anschließen, wir benötigen den Spannungsteiler, und zweitens liefern die Pins nicht genügend Strom für die Energieversorgung des Moduls an diesen Pins. 
 Auf dem folgenden Bild ist ein kleiner, selbst gefertigter Adapter zu sehen, der den HC-05 mit 5V und Ground aus den entsprechenden Anschlüssen versorgt, TXD direkt mit RX der SoftwareSerial-Schnittstelle A1 =D15 und RXD über den Spannungsteiler mit A2 = D16 verbindet.   
 Der Schaltplan: HC-05 Modul mit L293D Motorshield am Arduino Mikrocontroller     
 Die Schaltung kann selbstverständlich auch auf einem Mini Breadboard mit Jumperkabeln realisiert werden. 
 Wie beim letzten Mal wird der Code für die Fahrtanweisungen auf Tastendruck erhöht oder vermindert; diesmal nur nicht mit IR-Fernbedienung, sondern mit der Touch-Funktion in der Smartphone-APP und der Bluetooth-Abfrage über SoftwareSerial. 
 Koppeln des HC-05 Bluetooth Moduls mit einer Android Applikation (APP) 
 Bevor sich die APP mit dem Robot Car verbinden kann, müssen wir in den Einstellungen das Pairing mit dem das Bluetooth-Modul durchführen. Das sollte ganz einfach sein, denn wir haben zuvor mit den AT-Befehlen den Namen und die HEX-Adresse des HC-05 abgefragt. 
 Wenn das Pairing geklappt hat und eine geeignete BT-App installiert wurde, kann diese gestartet und eingerichtet werden. Mit dem Tippen auf die Lupe im linken Bild werden geeignete Geräte angezeigt. Wir tippen auf das HC-05 und erhalten die Meldung „connected“. Die von mir verwendete App bietet mehrere Oberflächen für die Bedienung an (mittleres Bild). Ich habe mich für den Spiele-Controller entschieden. Auf dem mittleren Bild oben rechts sind zwei Pfeile, die eine kleinen Kreis bilden. Hier bitte antippen, wenn die Verbindung verloren gegangen ist. 
 Auf dem rechten Bild sind die Tasten eines Spiel-Controllers abgebildet. Vor der ersten Benutzung müssen den Schaltflächen die Zahlenwerte zugeordnet werden, die beim Tippen übertragen werden sollen. 
 Für die Cursortasten habe ich im Uhrzeigersinn die Zahlenwerte 1 bis 4 vorgegeben. Den weiteren Schaltflächen habe ich den Zahlenwert 5 zugeordnet. Diese Werte werden im Sketch an die Variable  blueToothVal &amp;nbsp;übergeben und führen in den &amp;nbsp;if -Verzeigungen der Funktion  loop()  zur Bestimmung des Codes für die Fahrtstufe.    
 Die Änderungen von Infrarot auf Bluetooth und Motor Controller V2 auf V1 verursachen einige Modifikationen im Hauptteil des Sketches. Hingegen ändert sich bei der Funktion motor() fast nichts. Nur bei der Schreibweise wird aufgrund der unterschiedlichen Programm-Bibliotheken (libraries) aus den Funktionen motor1-&amp;gt;setSpeed() nun motor1.setSpeed(). 
 Der Programmcode: RC Car für Arduino bauen 
 * Sample Code  for  Robot Car with Motor Shield V1 and BT receiver HC -05 , as of  20220515 
* based on Adafruit Motor shield V2 library, copyright Adafruit Industries LLC
*  this  code is  public  domain, enjoy!
* modified  for  Funduino
* Pins
* BT VCC to Arduino  5 V out.
* BT GND to GND
* Arduino A1= 15  (SS RX) - BT TX no need voltage divider
* Arduino A2= 16  (SS TX) - BT RX through a voltage divider ( 5 v to  3.3 v)
*/

 # include   &amp;lt;AFMotor.h&amp;gt;  
AF_DCMotor motor1( 2 );
AF_DCMotor motor2( 3 );

 # include   &amp;lt;SoftwareSerial.h&amp;gt;  
 // initialize HC-05 
 SoftwareSerial  BTSerial( 15 ,  16 );  // RX, TX über Kreuz an TX, RX(voltage divider) 
 char  blueToothVal;
 int  x =  0 ;
 int  y =  0 ;
 int  left =  0 ;
 int  right =  0 ;
 int  code =  5555 ;
 int  speedL =  0 ;
 float  factor =  1.8 ;  // Correction for speedLevel 255/100 * 6V/VBatt 

 void   setup () {
   Serial . begin ( 9600 );  // set up Serial Monitor at 9600 bps 
   Serial . println ( &quot;Motor test!&quot; );
  BTSerial. begin ( 9600 );  // set up transmission speed for HC-12 
   Serial . println ( &quot;SoftwareSerial initialized!&quot; );
}    // end setup 

 void   loop () {
   if (BTSerial. available ())  //wenn Daten empfangen werden...  
 Serial.print(&quot;available&quot;);      
{
    blueToothVal=BTSerial. read (); //..sollen diese ausgelesen werden 
 Serial.println(blueToothVal); 
  }
     if  (blueToothVal== &#039;1&#039; )  //wenn das Bluetooth Modul eine „1“ empfängt.. 
    {
       if  (code&amp;lt; 9000 )   code = code +  1000 ;      
       Serial . print ( &quot;Code = &quot; );
       Serial . println (code);
    }
     else   if  (blueToothVal== &#039;2&#039; )  //wenn das Bluetooth Modul eine „2“ empfängt.. 
    {
       if  ((code -1000 * int (code/ 1000 ))&amp;lt; 900 )  code = code +  100 ;
       Serial . print ( &quot;Code = &quot; );
       Serial . println (code);
    }
     else   if  (blueToothVal== &#039;3&#039; )  //wenn das Bluetooth Modul eine „3“ empfängt.. 
    {
       if  (code&amp;gt; 2000 )   code = code -  1000 ;        
       Serial . print ( &quot;Code = &quot; );
       Serial . println (code);
    }
     else   if  (blueToothVal== &#039;4&#039; )  //wenn das Bluetooth Modul eine „4“ empfängt.. 
    {
     if  (code -1000 * int (code/ 1000 ) &amp;gt;  200 )   code = code -  100 ;
       Serial . print ( &quot;Code = &quot; );
       Serial . println (code);
    }  
     else   if  (blueToothVal== &#039;5&#039; )  //wenn das Bluetooth Modul „5“ empfängt... 
    {           
      code =  5555 ;
       Serial . print ( &quot;Code = &quot; );
       Serial . println (code);    
    }
     delay ( 200 );    //little delay for better serial communication and to avoid bouncing 
    motor();
}    // end loop 

 void  motor(){
   int  speedLevel[ 9 ]={ -100 , -80 , -60 , -40 , 0 , 40 , 60 , 80 , 100 };
  y =  int (code /  1000 );
  x =  int ((code -  1000 *y) /  100 );
  speedL = speedLevel[y -1 ];
   Serial . print ( &quot;code = &quot; );
   Serial . print (code);
   Serial . print ( &quot; y = &quot; );
   Serial . print (y);
   Serial . print ( &quot; x = &quot; );
   Serial . print (x);
   Serial . print ( &quot; speedL = &quot; );
   Serial . println (speedL);

   //Korrektur der Fahrtstufen für Kurvenfahrt 
   if  (x== 1 ){
    right = speedL+ 20 ;
    left = speedL -20 ;
  }
   else   if  (x== 2 ){
    right = speedL+ 15 ;
    left = speedL -15 ;
  }
   else   if  (x== 3 ) {
    right = speedL+ 10 ;
    left = speedL -10 ;
  }
   else   if  (x== 4 ) {
    right = speedL+ 5 ;
    left = speedL -5 ;
  }
   else   if  (x== 6 ) {
    right = speedL  -5 ;
    left = speedL+ 5 ;
  }
   else   if  (x== 7 ) {
    right = speedL -10 ;
    left = speedL+ 10 ;
  }
   else   if  (x== 8 ) {
    right = speedL -15 ;
    left = speedL+ 15 ;
  }
   else   if  (x== 9 ) {
    right = speedL -20 ;
    left = speedL+ 20 ;
  }
   else  {
    right = speedL;
    left = speedL;
  }

   //Eingabe der Fahrtstufen für &quot;left&quot; und &quot;right&quot; 
   Serial . print ( &quot;left = &quot; );
   Serial . print (left);
   Serial . print ( &quot; right = &quot; );
   Serial . println (right);

   if  (left &amp;lt;  40  &amp;amp; left &amp;gt;  -40 ) {
    motor1. run (RELEASE);
  }
   if  (right &amp;lt;  40  &amp;amp; right &amp;gt;  -40 ) {
    motor2. run (RELEASE);
  }
   if  (left&amp;gt;= 40 ) {
     if  (left&amp;gt; 100 ) left= 100 ;
      motor1. run (FORWARD);
      motor1. setSpeed (left * factor);
  }
   if  (right&amp;gt;= 40 ) {
     if  (right&amp;gt; 100 ) right= 100 ;
      motor2. run (FORWARD);
      motor2. setSpeed (right * factor);
  }
   if  (left&amp;lt;=  -40 ) {
     if  (left&amp;lt; -100 ) left= -100 ;
      motor1. run (BACKWARD);
      left = -left;
      motor1. setSpeed (left * factor);
  }
   if  (right&amp;lt;=  -40 ) {
     if  (right&amp;lt; -100 ) right= -100 ;
      motor2. run (BACKWARD);
      right = -right;
      motor2. setSpeed (right * factor);
  }
}    // end motor  
 Soweit die zweitgünstigste Lösung für ein Robot Car mit Fernsteuerung (vorausgesetzt, man hat ein Android Smartphone). Beim nächsten Mal möchte ich zeigen, wie einfach die Einbindung eines 433 MHz-Transceivers HC-12 funktioniert. Damit können sogar mehrere hundert Meter Reichweite erzielt werden. Allerdings steigen die Kosten, da nun zwei Transceiver und ein weiterer Mikro Controller benötigt werden. Bis dann. 
                ]]>
            </content>

                            <updated>2022-06-20T08:00:00+02:00</updated>
                    </entry>

    
    
        <entry>
            <title type="text">RC Car für Arduino bauen: Autonomes Fahrzeug - Teil 2</title>
            <id>https://funduinoshop.com/rc-car-fuer-arduino-bauen-autonomes-fahrzeug-teil-2</id>
            <link href="https://funduinoshop.com/rc-car-fuer-arduino-bauen-autonomes-fahrzeug-teil-2"/>
            <summary type="html">
                <![CDATA[
                
                                            Willkommen zur zweiten Folge unserer neuen Blogreihe über Roboterautos. Im ersten Teil haben wir die Grundlagen für das Basisfahrzeug kennengelernt. Diesmal wollen wir Möglichkeiten der Fernsteuerung thematisieren, dabei ein Codesystem entwickeln...
                                        ]]>
            </summary>
            <content type="html">
                <![CDATA[
                  Mit Roboterautos die Mobilität der Zukunft verstehen, Teil 2  
 Willkommen zur zweiten Folge unserer neuen Blogreihe über Roboterautos. Im  ersten Teil  haben wir die Grundlagen für das Basisfahrzeug kennengelernt. Diesmal wollen wir Möglichkeiten der Fernsteuerung thematisieren, dabei ein Codesystem entwickeln, mit dem wir Fahrtstufen des Roboterautos bestimmen und schließlich eine einfache Fernsteuerung mit einer Infrarot-Fernbedienung realisieren. 
 Wofür benötige ich Fahrtstufen bei einem RC Car für Arduino Mikrocontroller? 
 1. Für die Steuerung der Motordrehzahlen von einem anderen Gerät aus gibt es grundsätzlich die Möglichkeit, mit einem Potentiometer (Poti) kontinuierlich Werte zu ermitteln und zu übertragen, oder auf Tastendruck den Wert der Fahrtstufe zu erhöhen bzw. zu vermindern. Auf den folgenden Bildern einige ausgewählte Beispiele, im ersten Bild Joystick-Steuerungen: 
 &amp;nbsp;  
 &amp;nbsp; 
 Auf dem zweiten Bild sehen wir Infrarot-Fernsteuerungen, eine Smartphone App mit Bluetooth-Empfänger sowie das LCD1602-Keypad-Shield, das u.a. mit einem 433 MHz Transceiver betrieben werden kann: 
 &amp;nbsp;  
 &amp;nbsp; 
 Um ein einheitliches Schema zu erreichen, macht es Sinn, die analogen Werte des Potis mit der map()-Funktion auf Werte zu reduzieren, die per Funk übertragen werden können. Der Analog-Digital-Konverter liefert 10-Bit-Zahlen, also Werte zwischen 0 und 1023. Die Mittelposition der Mini-Joysticks liegt bei ca. 511. Bei Division des Wertes durch 100 kann man mit einem Joystick zwei Werte (x- und y-Richtung) ermitteln, die zwischen 0 und 10 oder bei Anwendung der map()-Funktion zwischen 1 und 9 liegen. Das reicht allemal für die Eingabe der Geschwindigkeit und für Kurvenfahrten. Egal, ob wir 11 oder 9 Werte ermitteln, Stillstand bedeutet Wert 5 in y-Richtung und für Geradeausfahrt ebenfalls Wert 5. 
 Mit Blick auf den Controller mit den zwei Joysticks (Teil des Bausatzes  4DOF Mini Roboterarm Bausatz mit Joysticks und Servoantrieb ) entscheide ich mich bei der Vielfalt von verschiedenen Systemen für einen gut zu übertragenden Code zwischen 1111 und 9999, wobei die erste Stelle für die y-Richtung des linken Joysticks, die zweite Stelle für die x-Richtung des linken Joysticks, die dritte und vierte Stelle für einen optionalen zweiten Joystick oder bestimmte Tasten verwendet werden können. Dabei benötigen wir im ersten Beispiel mit der IR-Fernsteuerung nur die ersten beiden Stellen des vierstelligen Codes. 
 Die Drehzahlregelung beim RC Car für Arduino 
 Die Drehzahlregelung der Motoren erfolgt mit Pulsweitenmodulation (PWM). Der Wert für den sogenannten Duty Cycle ist eine 8-Bit-Zahl, also ein Wert zwischen 0 und 255 (=2 hoch 8 -1). Wer mit einem regelbaren Netzteil Spannungen zwischen 0 und 6V an den Motor anlegt, wird feststellen, dass bis ca. 1,5 V gar nichts zu bemerken ist. Dann fängt der Motor an zu brummen, bewegt sich aber nicht. Wer zugleich die Stromstärke misst, wird einen relativ hohen Wert feststellen. Die Energie wird in Wärme und Brummen umgesetzt – nicht wirklich gut. Ab 2,4 – 3 Volt fängt der Motor an zu drehen, die Stromstärke sinkt etwas, wenn der Motor unbelastet ist. Danach steigt die Drehzahl in Abhängigkeit von der angelegten Spannung. Beim Herunterregeln der Spannung dreht der Motor bis unter 2 Volt, aber wenn er z.B. durch erhöhten Reibungswiderstand oder ein Hindernis zum Stehen kommt, läuft er nicht wieder an. Fazit: Werte unterhalb von ca. 2,4 Volt sollten vermieden werden, die Eingabe sollte gleich 0 (null) gesetzt werden, um unnötigen Verschleiß und Stromverbrauch zu verhindern. Außer Stillstand (Code=5) benötigen wir Duty Cycle zwischen ca. 40% und 100% bei einer Versorgungsspannung von 6V für die Motoren. 
 Die Spannungsversorgung beim RC Car für Arduino 
 Wir haben im ersten Teil bereits mehrere Möglichkeiten der Spannungsversorgung thematisiert. Vier AA-Batterien je 1,5V ergeben 6V, die maximale Spannung der kleinen gelben Motoren. Vier AA-Akkus je 1,2 V reichen nicht als Spannungsversorgung. Man benötigt dann einen Batteriehalter für 6 Akkus und das ergibt 7,2 Volt. Und zwei Lithium-Ionen-Akkus (Nennspannung 3,7V) liefern im voll aufgeladenen Zustand über 8 Volt. Es macht also Sinn, im Programm einen Faktor festzulegen, der die Spannung der höchsten Fahrtstufe bei 6V limitiert. 
 Die Steuerung des RC Car für Arduino 
 Sofern die Fahrtanweisungen mit Tastern (engl. buttons), die sich ggf. sogar in einer Smartphone-App befinden können, erfolgen, wird zum Ausgangswert 55xx (Stillstand) jeweils der passende Wert erhöht oder vermindert, ohne dass das Maximum überschritten werden kann. 
 Den Code richtig auslesen 
 Die Zuordnung der ersten Stelle des Codes zu den erforderlichen Werten der Fahrtstufen erfolgt über den Index einer Liste mit den jeweiligen Zahlenwerten. 
 Fazit: Mit einem vierstelligen Code können wir mit den ersten beiden Stellen Geschwindigkeit und Kurvenfahrten steuern, die hinteren zwei Stellen dienen weiteren Funktionen (zunächst nicht benötigt). Also zum Beispiel Code95xx für schnellste Geradeausfahrt, 55xx für Stillstand, 77xx für Vorwärtsfahrt nach rechts.&amp;nbsp; 
 
 
 
 
 
 y ↓ 0&amp;nbsp; x→ 
 
 
 1 
 
 
 2 
 
 
 3 
 
 
 4 
 
 
 5 
 
 
 6 
 
 
 7 
 
 
 8 
 
 
 9 
 
 
 
 
 9 
 
 
  ←  
 
 
 &amp;nbsp; 
 
 
  ↖  
 
 
 &amp;nbsp; 
 
 
  ↑  
 
 
 &amp;nbsp; 
 
 
  ↗  
 
 
 &amp;nbsp; 
 
 
  →  
 
 
 
 
 8 
 
 
  ←  
 
 
 &amp;nbsp; 
 
 
  ↖  
 
 
 &amp;nbsp; 
 
 
  ↑  
 
 
 &amp;nbsp; 
 
 
  ↗  
 
 
 &amp;nbsp; 
 
 
  →  
 
 
 
 
 7 
 
 
  ←  
 
 
 &amp;nbsp; 
 
 
  ↖  
 
 
 &amp;nbsp; 
 
 
  ↑  
 
 
 &amp;nbsp; 
 
 
  ↗  
 
 
 &amp;nbsp; 
 
 
  →  
 
 
 
 
 6 
 
 
 ← 
 
 
 &amp;nbsp; 
 
 
 ↖ 
 
 
 &amp;nbsp; 
 
 
 ↑ 
 
 
 &amp;nbsp; 
 
 
 ↗ 
 
 
 &amp;nbsp; 
 
 
 → 
 
 
 
 
 5 
 
 
 ← 
 
 
 &amp;nbsp; 
 
 
 ↖ 
 
 
 &amp;nbsp; 
 
 
  0  
 
 
 &amp;nbsp; 
 
 
 ↗ 
 
 
 &amp;nbsp; 
 
 
 → 
 
 
 
 
 4 
 
 
 ← 
 
 
 &amp;nbsp; 
 
 
 ↙ 
 
 
 &amp;nbsp; 
 
 
 ↓ 
 
 
 &amp;nbsp; 
 
 
 ↘ 
 
 
 &amp;nbsp; 
 
 
 → 
 
 
 
 
 3 
 
 
  ←  
 
 
 &amp;nbsp; 
 
 
  ↙  
 
 
 &amp;nbsp; 
 
 
  ↓  
 
 
 &amp;nbsp; 
 
 
  ↘  
 
 
 &amp;nbsp; 
 
 
  →  
 
 
 
 
 2 
 
 
  ←  
 
 
 &amp;nbsp; 
 
 
  ↙  
 
 
 &amp;nbsp; 
 
 
  ↓  
 
 
 &amp;nbsp; 
 
 
  ↘  
 
 
 &amp;nbsp; 
 
 
  →  
 
 
 
 
 1 
 
 
  ←  
 
 
 &amp;nbsp; 
 
 
  ↙  
 
 
 &amp;nbsp; 
 
 
  ↓  
 
 
 &amp;nbsp; 
 
 
  ↘  
 
 
 &amp;nbsp; 
 
 
  →  
 
 
 
 
 
 &amp;nbsp; 
 Nun wollen wir mit dem Kit, einem Mikrocontroller vom Typ ATmega328 (Bauform des UNO R3), einem MotorShield V2 und IR-Sender und -Empfänger unser erstes Smart Robot Car bauen. 
 Das Motor Shield V2 kann bis zu vier Motoren steuern, dabei werden für den Anschluss der Steuerleitungen der sogenannte I2C-Bus mit den Anschlüssen SDA (=Serial Data) am analogen Eingang A4 und SCL (=Serial Clock) an A5 benutzt. Auch hierfür hat Adafruit eine passende Programm-Bibliothek entwickelt und bereitgestellt. Achtung: Die Bibliotheken für die Motor Shields V1 und V2 sind nicht kompatibel. 
 &amp;nbsp;  
 Bild Motor Shield V2 mit Modifikation:  Eingelötete Buchsenleisten (Federleisten) für Anschluss von Zusatzausstattung 
 Egal, welches Motor Shield man benutzen möchte - V1 oder V2 -,&amp;nbsp; es macht Sinn, bei beiden Motor Shields zusätzliche Buchsenleisten einzulöten, um später Bluetooth- oder 433 MHz-Sender/Empfänger (engl. Transceiver=Transmitter + Receiver) oder Sensoren anzuschließen. Mehr dazu in den folgenden Blog-Beiträge. Der IR-Empfänger benötigt nur Spannungsversorgung aus Pin 3 und 4 sowie Pin2 für den IR Receiver. Der Lötkolben kann noch kalt bleiben. 
 Als Steuerung werden wir zunächst die kleine Infrarot-Fernbedienung von Funduino und einen IR-Empfänger benutzen. Obwohl der „nackte“ IR-Sensor genügt, empfehle ich das kleine Breakout-Board, da hier eine LED flackert, wenn IR-Signale empfangen werden; ein wertvolles Hilfsmittel, wenn ein Fehler gesucht wird. 
 Der Sketch ist zusammengesetzt aus zwei erprobten Teilen: Dem Beispiel-Sketch von Armin Joachimsmeyer, den er seiner tollen Programm-Bibliothek IRremote beigefügt hat und einem Robot Car-Sketch des Autors, das auf der Programm-Bibliothek von Adafruit beruht. 
 Der Programmcode für das RC Car für Arduino 
  /* Sample Code for Robot Car with Motor Shield V2 and IR receiver, as of 20220515
* based on Adafruit Motor shield V2 library, copyright Adafruit Industries LLC, 2009
* and SimpleReceiver.cpp, part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote
* MIT License  Copyright (c) 2020-2022 Armin Joachimsmeyer
* modified for Funduino
* Motor Shield V2 utilizes I2C with SDA=A4 and SCL=A5
* IRreceiver utilizes Pin 2
 ************************************************************************************
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the &quot;Software&quot;), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is furnished
 * to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *************************************************************************************/ 
 
 # include   &amp;lt;Adafruit_MotorShield.h&amp;gt;  
 // Create the motor shield object with the default I2C address 0x60 
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
 // Select which &#039;port&#039; M1, M2, M3 or M4.  
Adafruit_DCMotor *motor1 = AFMS.getMotor( 2 );
Adafruit_DCMotor *motor2 = AFMS.getMotor( 3 );

 // define protocol for remote control, for more see samples code SimpleReceiver.cpp 
 # define  DECODE_NEC        // Includes Apple and Onkyo, also for tiny Funduino remote control  
 //#define INFO           // To see valuable informations from universal decoder for pulse width or pulse distance protocols 
 # define  IR_RECEIVE_PIN   2      // instead of   #include &quot;PinDefinitionsAndMore.h&quot;  
 # include   &amp;lt;Arduino.h&amp;gt;  
 # include   &amp;lt;IRremote.hpp&amp;gt;  

 // IR Receiver signal connected to Pin2, VCC to Pin3, GND to Pin4 
 int  IR_GND =  4 ;   
 int  IR_VCC =  3 ;

 int  x =  0 ;
 int  y =  0 ;
 int  left =  0 ;
 int  right =  0 ;
 int  code =  5555 ;
 int  speedL =  0 ;
 float  factor =  1.8 ;  // Correction for speedLevel 255/100 * 6V/VBatt 

 void   setup () {
   Serial . begin ( 9600 );
   Serial . println ( &quot;Motor test!&quot; );
   Serial . println ( &quot;Motorshield v2 - DC Motor test!&quot; );
   if  (!AFMS. begin ()) {          // create with the default frequency 1.6KHz 
     Serial . println ( &quot;Could not find Motor Shield. Check wiring.&quot; );
     while  ( 1 );
  }
   Serial . println ( &quot;Motor Shield found.&quot; );
   // Just to know which program is running on my Arduino 
   Serial . println (F( &quot;START &quot;  __FILE__  &quot; from &quot;  __DATE__  &quot;\r\nUsing library version &quot;  VERSION_IRREMOTE));
   // Start the receiver 
  IrReceiver. begin (IR_RECEIVE_PIN);       //, ENABLE_LED_FEEDBACK); 
   Serial . print (F( &quot;Ready to receive IR signals of protocols: &quot; ));
  printActiveIRProtocols(&amp;amp; Serial );
   Serial . print (F( &quot;at pin &quot; ));
   Serial . println (IR_RECEIVE_PIN);  
   // initialize digital pins as output for power supply 
   pinMode (IR_GND, OUTPUT );
   pinMode (IR_VCC, OUTPUT );
   digitalWrite (IR_GND, LOW );
   digitalWrite (IR_VCC, HIGH );    
}    // end setup 

 void   loop () {
   if  (IrReceiver.decode()) {
       // Print a short summary of received data 
      IrReceiver.printIRResultShort(&amp;amp; Serial );
       if  (IrReceiver.decodedIRData.protocol == UNKNOWN) {
           // We have an unknown protocol here, print more info 
          IrReceiver.printIRResultRawFormatted(&amp;amp; Serial , true);
      }
       Serial . println ();
       /*
       * !!!Important!!! Enable receiving of the next value,
       * since receiving has stopped after the end of the current received data packet.
       */ 
       delay ( 100 );    // Entprellen, keine schnelle Wiederholung      
      IrReceiver.resume();  // Enable receiving of the next value 
       /*
       * Finally, check the received data and perform actions according to the received command
       */ 
   if  (IrReceiver.decodedIRData.command ==  0x46 )   {
     if  (code&amp;lt; 9000 )   code = code +  1000 ;         
     Serial . print ( &quot;Code = &quot; );
     Serial . println (code);
    }
   else   if  (IrReceiver.decodedIRData.command ==  0x15 )   {
     if  (code&amp;gt; 2000 )   code = code -  1000 ;      
     Serial . print ( &quot;Code = &quot; );
     Serial . println (code);
    }  
   else   if  (IrReceiver.decodedIRData.command ==  0x43 )   {
     if  ((code -1000 * int (code/ 1000 ))&amp;lt; 900 )  code = code +  100 ;      
     Serial . print ( &quot;Code = &quot; );
     Serial . println (code);
    }
   else   if  (IrReceiver.decodedIRData.command ==  0x44 )   {
     if  (code -1000 * int (code/ 1000 ) &amp;gt;  200 )   code = code -  100 ;
     Serial . print ( &quot;Code = &quot; );
     Serial . println (code);
    }
   else   if  (IrReceiver.decodedIRData.command ==  0x40 )   {
    code =  5555 ;
     Serial . print ( &quot;Code = &quot; );
     Serial . println (code);
    }
   else   {
     Serial . print ( &quot;invalid code&quot; );
    }
  motor();
  }
}    // end loop 

 void  motor(){
   int  speedLevel[ 9 ]={ -100 , -80 , -60 , -40 , 0 , 40 , 60 , 80 , 100 };
  y =  int (code /  1000 );
  x =  int ((code -  1000 *y) /  100 );
  speedL = speedLevel[y -1 ];
   Serial . print ( &quot;code = &quot; );
   Serial . print (code);
   Serial . print ( &quot; y = &quot; );
   Serial . print (y);
   Serial . print ( &quot; x = &quot; );
   Serial . print (x);
   Serial . print ( &quot; speedL = &quot; );
   Serial . println (speedL);

   //Korrektur der Fahrtstufen für Kurvenfahrt 
   if  (x== 1 ){
    right = speedL+ 16 ;
    left = speedL -16 ;
  }
   else   if  (x== 2 ){
    right = speedL+ 13 ;
    left = speedL -13 ;
  }
   else   if  (x== 3 ) {
    right = speedL+ 10 ;
    left = speedL -10 ;
  }
   else   if  (x== 4 ) {
    right = speedL+ 7 ;
    left = speedL -7 ;
  }
   else   if  (x== 6 ) {
    right = speedL  -7 ;
    left = speedL+ 7 ;
  }
   else   if  (x== 7 ) {
    right = speedL -10 ;
    left = speedL+ 10 ;
  }
   else   if  (x== 8 ) {
    right = speedL -13 ;
    left = speedL+ 13 ;
  }
   else   if  (x== 9 ) {
    right = speedL -16 ;
    left = speedL+ 16 ;
  }
   else  {
    right = speedL;
    left = speedL;
  }

   //Eingabe der Fahrtstufen für &quot;left&quot; und &quot;right&quot; 
   Serial . print ( &quot;left = &quot; );
   Serial . print (left);
   Serial . print ( &quot; right = &quot; );
   Serial . println (right);

   if  (left &amp;lt;  40  &amp;amp; left &amp;gt;  -40 ) {
    motor1-&amp;gt; run (RELEASE);
  }
   if  (right &amp;lt;  40  &amp;amp; right &amp;gt;  -40 ) {
    motor2-&amp;gt; run (RELEASE);
  }
   if  (left&amp;gt;= 40 ) {
     if  (left&amp;gt; 100 ) left= 100 ;
      motor1-&amp;gt; run (FORWARD);
      motor1-&amp;gt; setSpeed (left * factor);
  }
   if  (right&amp;gt;= 40 ) {
     if  (right&amp;gt; 100 ) right= 100 ;
      motor2-&amp;gt; run (FORWARD);
      motor2-&amp;gt; setSpeed (right * factor);
  }
   if  (left&amp;lt;=  -40 ) {
     if  (left&amp;lt; -100 ) left= -100 ;
      motor1-&amp;gt; run (BACKWARD);
      motor1-&amp;gt; setSpeed (-left * factor);
  }
   if  (right&amp;lt;=  -40 ) {
     if  (right&amp;lt; -100 ) right= -100 ;
      motor2-&amp;gt; run (BACKWARD);
      motor2-&amp;gt; setSpeed (-right * factor);
  }
}    // end motor 
 
 Erklärungen des Programmcodes für das RC Car 
 Nach dem Inkludieren der Bibliotheken für das Motor Shield V2 und IRremote werden zwei Motoren instanziiert mit der Nummer am Terminal Block des Controllers sowie einige globale Variablen deklariert (Datentyp) und initialisiert (Anfangswert). 
 In der Funktion  setup()  werden die Serielle Schnittstelle und der IR Receiver initialisiert sowie die Pins für die Spannungsversorgung des IR Receivers als Ausgänge mit dem Zustand HIGH bzw. LOW eingerichtet. 
 In der Funktion  loop()  wird zunächst das Signal der IR-Fernbedienung empfangen, dann in Abhängigkeit der gedrückten Taste der Code für die Motorsteuerung verändert. Die Cursortasten up und down verändern die erste Stelle, left und right die zweite Stelle des Codes im Wertebereich 1 bis 9. Die Taste X führt zum Stillstand mit Code 5555. Die dritte und vierte Stelle des Codes sind zurzeit noch nicht von Bedeutung. Am Ende wird die selbst-definierte Funktion  motor()  ohne Argumente aufgerufen, da wir die Variablen global, d.h. in allen Funktionen gültig, definiert hatten. 
 In der selbst definierte Funktion  motor() , die wir auch in anderen Konfigurationen mit anderen Fernsteuerungen einsetzen werden, werden aus dem Code die Fahrtstufen für den linken und rechten Motor ermittelt. Der Prozentwert der Fahrtstufe wird schlussendlich mit dem eingangs definierten Faktor in den PWM-Wert für  setSpeed  umgerechnet. 
 &amp;nbsp;  
 Damit ist das Robot Car einsatzbereit. Funktioniert prima, solange man die optische Verbindung zwischen Fernbedienung und IR Receiver aufrechterhalten kann. Allerdings habe ich beim Fahren auf der Straße die Erfahrung gemacht, dass starke Sonneneinstrahlung den Empfang behindert. Deshalb steige ich auf Funkfernbedienung um. Bis demnächst. 
                ]]>
            </content>

                            <updated>2022-06-09T07:30:00+02:00</updated>
                    </entry>

    
    
        <entry>
            <title type="text">RC Car für Arduino bauen: Autonomes Fahrzeug - Teil 1</title>
            <id>https://funduinoshop.com/rc-car-fuer-arduino-bauen-autonomes-fahrzeug-teil-1</id>
            <link href="https://funduinoshop.com/rc-car-fuer-arduino-bauen-autonomes-fahrzeug-teil-1"/>
            <summary type="html">
                <![CDATA[
                
                                            Willkommen zu einer neuen Blogreihe über Roboterautos. Im ersten Teil werden wir die Grundlagen dafür kennenlernen, sozusagen als Entscheidungshilfe für die Kaufentscheidung, welches Chassis, welcher Mikrocontroller und welche Art der Fernsteuerung...
                                        ]]>
            </summary>
            <content type="html">
                <![CDATA[
                  Mit Roboterautos die Mobilität der Zukunft verstehen  
 Willkommen zu einer neuen Blogreihe über Roboterautos. Im ersten Teil werden wir die Grundlagen dafür kennenlernen, sozusagen als Entscheidungshilfe für die Kaufentscheidung, welches Chassis, welcher Mikrocontroller und welche Art der Fernsteuerung am besten geeignet sind. 
 Zwei oder vier Räder - Abwägung der Vor- und Nachteile für den Bau von RC Cars für Arduino 
 Beginnen wir mit dem Chassis und betrachten wir die Vor- und Nachteile der preiswerten Kits mit zwei bzw. vier angetriebenen Rädern. Allen gemeinsam sind die Elektromotoren, sodass diese allein kein Auswahlkriterium sind. Die zweirädrigen Roboterautos sind zunächst preiswerter, weil die Kosten für zwei weitere Elektromotoren und Räder entfallen. Stattdessen haben sie ein oder zwei Stützräder, die den RC Cars eine hohe Wendigkeit verleihen. Wer also „auf dem Teller drehen“ möchte, ist damit bestens bedient. Allerdings kann man in dieser Preislage der Gleichstrom-Motoren nicht erwarten, dass sie mit hoher Präzision gleichmäßig laufen. Deshalb ist der Geradeauslauf nicht so gut wie bei der vierrädrigen Variante. Gerade beim Anlaufen der Motoren zeigen diese eine höhere Spurtreue, jedoch sind Kurvenfahrten nur mit deutlich größeren Radien möglich. Ein weiterer Vorteil der vierrädrigen Chassis ist mehr Platz für Batterien, Mikro Controller, ggf. DC/DC-Konverter und Sensoren. 
   
 Die Wahl des Mikrocontrollers für den Bau eines RC Cars 
 Die nächste Frage bezieht sich auf den Mikrocontroller und die Art der Programmierung. Die größte Rechenleistung auf dem kleinen Chassis hat zum Beispiel ein Mikro Computer vom Typ Raspberry Pi. Gerade im Hinblick auf die Fernsteuerung bieten die Typen mit eingebautem WiFi und Bluetooth Vorteile und man kann sogar Bilder einer Raspberry Pi-Kamera übertragen. Die Programmierung erfolgt in der weit verbreiteten Programmiersprache Python, jedoch dauert der Systemstart des Linux-basierten Betriebssystems Raspberry Pi OS rund eine Minute. Ein weiterer Nachteil der Raspis (kurz für Raspberry Pi) ist die Notwendigkeit einer guten Spannungsversorgung mit 5V. Dies erfordert einen guten DC/DC-Konverter. 
 Im Zusammenhang mit dem Thema Bluetooth-Fernsteuerung wird in einer späteren Folge ein Beispiel mit Raspberry Pi und der Android APP BlueDot von Martin O’Hanlon (Mitarbeiter der Raspberry Pi Foundation) gezeigt. 
 Viel schneller geht der Systemstart mit einem Micro Controller auf Basis des ATmega 328, z.B. dem  Funduino Uno  oder  Funduino&amp;nbsp;Nano . Rund eine Sekunde nach dem Einschalten kann man mit den Steuereingaben beginnen, kein Booten von MikroSD-Karte, das einmal hochgeladene Programm wird nicht vergessen. Die Eingangsspannung kann zwischen 5 und 9 Volt liegen. Programmiert wird in der  Arduino IDE , einer Entwicklungsumgebung in Anlehnung an C/C++ (Weitere Erklärung siehe  https://funduino.de/hardware-software ). Deshalb werden wir zunächst Beispiele mit dem Funduino Uno R3 betrachten, für die es perfekte Motor Controller als sogenannte Shields gibt. Diese werden einfach auf den Uno aufgesteckt und bei der Programmierung helfen uns sogenannte Bibliotheken (engl. libraries). 
 Exkurs: Was ist ein Motor Controller/Motortreiber? 
 Aufgrund der stark limitierten Stromstärke an den Ausgängen der Mikro Controller bedarf es bei größeren Verbrauchern – und dazu gehören alle Arten von Elektromotoren und Relais – einer externen Spannungsversorgung und einer elektronischen Schaltung, die das Steuersignal des Mikro Controllers umsetzt. Die Anforderungen an diesen Integrierten Schaltkreis (engl. IC=Integrated Circuit) sind jedoch noch höher: Er soll einerseits eine variable Drehzahl des Motors ermöglichen, andererseits wollen wir auch die Drehrichtung des Motors durch Umpolen ändern können. 
 Am Beispiel des ICs L293D wird nun die Funktionsweise erklärt. Grundsätzlich genügt dieser DIP-Baustein mit sechzehn „Beinchen“/Anschlüssen als Motor Controller für zwei Elektromotoren.     
 Die Spannungsversorgung des ICs erfolgt an den Anschlüssen VCC1 und Ground. Diese Spannung können wir am Mikro Controller abzapfen. Die Spannungsversorgung der Motoren erfolgt über VCC2 und Ground. Hier schließen wir die Batterie(n) an (z.B. 6 oder 9 Volt). Bei größeren Motoren muss der IC gekühlt werden, bei den kleinen gelben vom Kit nicht. 
 Den einen Motor schließen wir an 1Y und 2Y an, die dazugehörigen Steuerleitungen zur MCU (Micro Controller Unit) sind 1A, 2A und 1,2EN. 
 Das Umpolen der Motoren für die Änderung der Fahrtrichtung erfolgt grundsätzlich mit einer sogenannten H-Schaltung. Diese realisieren wir mit unserem Mikro Controller, indem wir zwei Ausgangspins (diese gehen an 1A und 1B) entweder auf HIGH oder LOW legen. 
 Die Geschwindigkeitsänderung erfolgt wie bei dem  Beispiel Nr. 04 – Pulsierende LED  mit Pulsweitenmodulation (PWM, engl. pulse width modulation), also dem sehr schnellen Ein- und Ausschalten der Spannung. Deshalb benötigen wir für den Anschluss 1,2EN („Enable“) einen PWM-fähigen Ausgang an der MCU (das sind die Pins mit der Tilde ~). 
 Für den zweiten Motor werden die Anschlüsse 3A, 4A und 3,4EN an Pins der MCU angeschlossen. 
 Das rechte Bild (Logic Diagram) erklärt die Funktionsweise des ICs. Wir sehen die vier Verstärker, die die Eingangssignale 1A bis 4A jeweils mit der Batteriespannung an die Ausgänge 1Y bis 4Y geben. Dies erfolgt jedoch nur, wenn zusätzlich die PWM-Eingänge 1,2EN und 3,4EN ebenfalls HIGH geschaltet sind. 
 Zwei von diesen ICs L293D sind auf dem Motor Shield V1 verbaut, so dass hier bis zu vier Motoren angeschlossen werden können. 
 Um nicht zu viele Pins zu verwenden, befindet sich in der Mitte auf dem Motor Shield V1 ein sogenanntes Schieberegister (engl. shift register, SN74HC595). Dessen Funktionsweise zu erklären, würde den Rahmen dieses Beitrags übersteigen. Zum Glück haben uns die Kollegen der New Yorker Fa. Adafruit die meiste Arbeit beim Programmieren abgenommen und eine Programm-Bibliothek (engl. library) bereitgestellt, um die Motoren einfach zu steuern.    
 Bild Motor Shield V1 mit Modifikation:   Eingelötete Buchsenleisten (Federleisten) für Anschluss von Zusatzausstattung 
 &amp;nbsp; 
 Das Motor Shield V2 kann ebenfalls bis zu vier Motoren steuern und benutzt dafür einen ähnlichen IC, jedoch für den Anschluss der Steuerleitungen den sogenannten I2C-Bus mit den Anschlüssen SDA (=Serial Data) am analogen Eingang A4 und SCL (=Serial Clock) an A5. Auch hierfür hat Adafruit eine passende Programm-Bibliothek entwickelt und bereitgestellt. 
   
 Bild Motor Shield V2 mit Modifikation:  Eingelötete Buchsenleisten (Federleisten) für Anschluss von Zusatzausstattung 
 Bei beiden Motor Shields sind hier zusätzliche Buchsenleisten eingelötet, um später Bluetooth- oder 433 MHz-Sender/Empfänger (engl. Transceiver=Transmitter + Receiver) oder Sensoren anzuschließen. Mehr dazu in einem der folgenden Blog-Beiträge. 
 Spannungsversorgung und Steuerung für ein RC Car für Arduino Mikrocontroller 
 Wenn unser Roboterauto eigenständig fahren soll, müssen wir es vom USB-Anschluss des PCs trennen. Damit geht auch die Stromversorgung verloren. Von nun an werden Kommandozentrale (MCU) und Elektromotoren mit Batterien oder Akkus versorgt. Dabei sind die Motoren die weitaus größeren Verbraucher. Der Batteriehalter, der den meisten Kits beiliegt, ist für vier Mignon (AA)-Batterien, also 6 Volt für MCU und Motoren. Wer Akkus verwenden möchte, sollte wegen der geringeren Spannung entweder sechs Mignon (AA)-Akkus oder zwei Lithium-Ionen-Akkus vom Typ 18650 verwenden. 
 Als Steuerung werden wir in den nächsten Folgen zunächst Fernsteuerungen mit Infrarot-Fernbedienung, Bluetooth-Transceiver mit Smartphone APP oder einem zweiten Mikro Controller ebenfalls mit dem BT-Transceiver HC-05 sowie Funkfernsteuerungen mit 433Mhz und 2,4 GHz kennenlernen. Den Abschluss der Blogreihe werden Aspekte des autonomen Fahrens, vornehmlich Hinderniserkennung, bilden. Bis demnächst. 
 &amp;nbsp; 
                ]]>
            </content>

                            <updated>2022-06-03T11:00:00+02:00</updated>
                    </entry>

    
    
        <entry>
            <title type="text">Luftkissenlandungsboot der WISENT-Klasse</title>
            <id>https://funduinoshop.com/luftkissenlandungsboot-der-wisent-klasse</id>
            <link href="https://funduinoshop.com/luftkissenlandungsboot-der-wisent-klasse"/>
            <summary type="html">
                <![CDATA[
                
                                            Auf vielen Modellschiff-Schaufahren sind die meisten Schiffe bis ins letzte Detail und in sehr hoher Qualität gebaut. Schade, dass das von den Zuschauern oft übersehen wird. Spektakuläre und nicht alltägliche Modelle...
                                        ]]>
            </summary>
            <content type="html">
                <![CDATA[
                 Modellbau: Luftkissenlandungsboot der WISENT-Klasse &quot;LCAC – Landing Craft Air Cushion&quot; 
 Auf vielen Modellschiffschaufahren sind die meisten Schiffe bis ins letzte&amp;nbsp;Detail und in sehr hoher Qualität gebaut. Schade, dass das von&amp;nbsp;den Zuschauern oft übersehen wird. Spektakuläre und nicht alltägliche&amp;nbsp;Modelle ziehen schon eher die Aufmerksamkeit auf sich. Dazu gehören ohne&amp;nbsp;Zweifel die Luftkissenboote (Hovercraft).&amp;nbsp;Warum nicht mal das Größte seiner Art auch als Modell bauen?&amp;nbsp;Mit 550 Tonnen Verdrängung ist die Zubr-Klasse (Wisent-Klasse) ein Gigant.&amp;nbsp;Ein Plastikmodell gibt es in 1:110. Das war mir zu klein. 1:75 fand ich gerade&amp;nbsp;richtig. Also Eigenbau! 
 Luftkissenboot selber bauen: Aber wie? 
 Um sich in diese Materie einzulesen, war das Buch „RC Luftkissenboote“ von&amp;nbsp;K.Jackson &amp;amp; M.Porter vom VTH-Verlag eine wertvolle Hilfe. Welche technischen&amp;nbsp;Komponenten das Modell zum Schweben bringen sollte, musste ausprobiert&amp;nbsp;werden. Berechnungen waren hier wenig zielführend. Am Ende des Textes eine&amp;nbsp;Aufstellung der verwendeten Akku- und Antriebstechnik. Einen Bauplan zu&amp;nbsp;diesem Typ gibt es nicht, also mussten Fotos herhalten und es wurde viel&amp;nbsp;gerechnet. 
 Der Rohbau wurde mit einer PU-Schaum-Platte und einem Power-Kleber&amp;nbsp;aus dem Baumarkt bewerkstelligt. Das ging recht zügig voran. Ein 70 mm Impeller, der oft für Styropor-Modellflieger eingesetzt wird, soll den Wisent&amp;nbsp;zum „Hovern“ bringen. Die Luftschürze wird mit Rip-Nylon ausgeführt.&amp;nbsp;Ein Material, das bei Zeltplanen und bei Fallschirmspringern Verwendung&amp;nbsp;findet. 
 Die Stromversorgung des Luftkissenlandungsbootes 
 Bei der geplanten Größe von 900 x 400 mm war von vornherein klar, dass es kein Energiespar-Modell wird. Ein 18 V Akku mit 2,5 Ah aus dem&amp;nbsp;Werkzeugprogramm – kombiniert mit einem Spannungswandler – soll die gewünschte Spannung von gleichmäßig 12 V bereitstellen.&amp;nbsp;Ein zweiter Spannungswandler regelt die 12 V nochmal auf 9 V herunter&amp;nbsp;und liefert damit den Propeller und der nautischen Beleuchtung eine&amp;nbsp;gleichmäßige Spannung.&amp;nbsp;Somit erfolgt die gesamte Stromversorgung aus einem Akku.&amp;nbsp;Zwei der äußeren Propeller sind für den Vortrieb ausgelegt, der mittlere&amp;nbsp;Motor wurde umgepolt und dieser Propeller „verkehrt herum“ auf die  Antriebswelle gesteckt. Rückwärtsfahrten sind somit problemlos möglich.&amp;nbsp;Die drei Antriebsgondeln hat mir die Firma – Ray Haller aus Eibenstock – auf&amp;nbsp;dem 3D-Drucker gedruckt. Sie werden synchron von einem Servo angesteuert.&amp;nbsp;Dieses Antriebskonzept hat sich bewährt.&amp;nbsp;Die 3,5 Zoll (ca. 9 cm) Propeller stammen aus dem Ersatzteilsortiment für Quadcopter.&amp;nbsp;Trotz konsequenter Leichtbauweise bringt das Modell mit allen Einbauten&amp;nbsp;4,7 kg auf die Waage. Das macht ein Anlanden zwar möglich, aber für Fahrten&amp;nbsp;an Land ist es nicht geeignet. Auch das Original ist ja zu 99 % auf dem&amp;nbsp;Wasser unterwegs. Von diesem „Riesen-Wisent“ wurden 18 Stück gebaut.&amp;nbsp;Die Ukraine, Korea, Russland, China und Griechenland nutzten sie. 
 Verwendete Bauteile von Funduino: 
 1x&amp;nbsp; R4-E-0-1 :  EDF Turbine Impeller 70mm ADF70-28XL PLUS KV3900  1x R6-C-7-4:  Hobbywing SkyWalker 60A UBEC Brushless ESC&amp;nbsp;(40A Regler wird zu heiß)  3x R5-E-4-3:  Ready ToSky 1306 KV3100 für 150er Quadcopter  3x R6-E-1-4:  Hobbywing SkyWalker 12AE Brushless ESC  2x R12-B-8-2:  DC-DC Step Down Modul 300W 20A 6-40V auf 1,2-36V  
 1x Akku 2,5 Ah 18 V von Einhell (Fahrzeit ca. 15 min) Gesteuert wird das Modell mit einer Carson 6-Kanal Fernsteuerung 2,4 GHz. 
                ]]>
            </content>

                            <updated>2022-05-04T15:30:00+02:00</updated>
                    </entry>

    
</feed>
