arduino aansturing met bleuthoot

Discussie in 'Modelbouwsoftware' gestart door Marc w, 23 jan 2022.

  1. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    Met dit printplaatje ben ik ook begonnen in mijn eerste denkpiste, Dit is zeker mogelijk bruikbaar in een project waar je maar 2 motoren nodig hebt.
    Ik liep echter al snel tegen de beperking van het aantal beschikbare uitgangen.(mogelijk een gevolg van mijn beperkte kennis) Vermits ik 4 motoren heb aan te sturen en liefst nog 7 extra uitgangen voor andere toepassingen ben ik overgeschakeld naar de UNO en de L293D.
    momenteel ( als ik het werkend krijg, maar daar heb er het volste vertrouwen in) gebruik ik 8 uitgangen voor 4 motoren, 2 uitgangen voor de bleuthoot en 8 uitgangen voor de 8 relai's
    dat is in totaal 18 van de 20 stuks, nr 2 en 13 zijn momenteel niet gebruikt. De 2 pins die dienen om de servo's aan te sturen via de motorprint heb ik opgeofferd om relais 7 en 8 aan te sturen. Alle servo's in mijn schip worden via de zender aangestuurd en niet via bleuthoot.

    Deze avond dan toch maar alles aan elkaar gesoldeerd ( had al de hele dag naar de doos met alle onderdelen zitten te loeren tijdens de dagtaak)

    20220202_221338[1].jpg

    20220202_215548[1].jpg
    Nu alles netjes terug weg stoppen , want morgen vroeg moet dit plaatsje terug vrij zijn voor de dagtaak. Wie weet schuif ik morgen alles nog wel eens aan de kant. Wel extra werk met opruimen maar de voldoening is te groot om het niet te doen.
    vgr Marc
     
    Herby63 vindt dit leuk.
  2. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.273
    Locatie:
    Boskoop
    Ik was hier iets te voorbarig, je kunt dit shield ook zonder library gebruiken, bijvoorbeeld met DEZE code. Ga jij die gebruiken @Marc w ?
     
    Marc w vindt dit leuk.
  3. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    Je geeft me wel veel huiswerk :) Vermoedelijk zondag wat tijd om me nog eens te buigen over de theorie en wie weet enkele testjes uitvoeren.
    Opstelling ligt alvast terug op de werktafel en heb net de voeding ingesteld. Het relais bord ontvangt rechtstreeks 5V net als de arduino, motorschield krijgt 12V voor de motoren en de bleuthoot word gevoed vanaf de arduino. no smoke tot nu toe :)
    tot later, Marc
     
    Herby63 vindt dit leuk.
  4. max z

    max z Vriend van modelbouwforum.nl PH-SAM

    Lid geworden:
    4 dec 2009
    Berichten:
    2.273
    Locatie:
    Boskoop
    Let erop dat je een spanningsdelertje moet inbouwen in de Rx verbinding met de arduino omdat de HC06 bluetooth module intern met 3,3V werkt.

    Bijvoorbeeld HIER te zien.
     
  5. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    Als ik het goed begrijp heb ik dit niet nodig zolang ik de Hco6 aansluit op de RX en Tx van de arduino, enkel als ik moest besluiten om 2 andere pins te gebruiken moet ik inderdaad de 5v van de arduino naar beneden halen. Mijn nadeel is wel dat ik nu telkens de Hc06 moet loskoppelen voor ik een nieuwe code upload, maar het geeft me 2 extra pins voor de aansturing van het relais bord.
    ( ben zo al de ganse tijd aan het testen , zal dus wel kloppen anders had ik al lang rook gezien :) )
     
    Herby63 vindt dit leuk.
  6. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    na een dikke week me met wat anders bezig gehouden te hebben ( werk word het meestal bestempeld :) ) vanaf nu 's avond terug arduino tijd.
    Als jullie het niet erg vinden ( Max in het bijzonder ) ga ik verder met de testen waar ik gebleven was en ga ik daarna de gedane voorstellen bestuderen , trachten te doorgronden en natuurlijk testen zodat we straks met zijn allen weer wat meer kennis hebben vergaard.
    Mijn laatste grote vraag was of ik met MITapp een toets kon maken die een code zond als ik ze aanraakte en een andere code uitzond bij het loslaten.
    Dit zou dan resulteren in "drukken" waardoor de motor L draait "loslaten" waardoor de motor stopt, een andere toets " drukken" waardoor de motor R draait en " loslaten" waardoor de motor terug stopt.
    De test is volledig geslaagd en voor mij dus volledig bruikbaar om een kraan aan te sturen zonder veel risico. Maar we gaan straks ook Max zijn idee testen zodat we het beste kunnen kiezen.

    de code
    motortest2
    char t;
    String iS="";
    #include <AFMotor.h>

    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);


    void setup()
    {
    motor1.setSpeed(255);//Can be set from 0-255
    motor2.setSpeed(255);

    motor1.run(RELEASE);
    motor2.run(RELEASE);

    Serial.begin(9600);
    }

    void loop()
    {
    if(Serial.available()){
    while(Serial.available())
    {
    char iC = (char)Serial.read();
    iS += iC;
    }
    while (Serial.available() > 0)
    { t = Serial.read() ; }
    if(iS == "A"){ //To move forward
    motor1.run(FORWARD);
    }
    else if(iS == "C"){ //To move backward
    motor1.run(BACKWARD);
    }
    else if(iS == "B"){ //To stop
    motor1.run(RELEASE);
    }
    if(iS == "E"){ //To move forward
    motor2.run(FORWARD);
    }
    else if(iS == "G"){ //To move backward
    motor2.run(BACKWARD);
    }
    else if(iS == "F"){ //To stop
    motor2.run(RELEASE);
    }
    iS = "";
    } }



    de MITapp Het gaat hier om de 4 bovenste aanraaktoetsen

    motortest MITapp2.jpg motortest MITapp2a.jpg

    tot snel,
    Marc
     
    Laatst bewerkt: 7 feb 2022
    Herby63 vindt dit leuk.
  7. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    ter info voor max een test venster
    TEST MAX.jpg
     
  8. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    WE ZIJN EEN HELE STAP VERDER :)
    zowel de code van Max als mijn eigen code functioneren , welles waar beide met hun gebreken, al lijken deze bij beide codes sterk op elkaar en zijn de codes dat verre van.
    terwijl max een code had geschreven waar je voor elke wijziging een input moet genereren had ik getracht de snelheid gelijdelijk te laten oplopen tot aan het maximum.
    bij mijn code is duidelijk te merken dat ik binnen de tijd dat de snelheid toeneemt ik geen andere input kan geven op de betreffende motor.
    Bij max lijkt het dat ik geen nieuwe input kan geven voor de volledige cyclus is afgelopen (enkel sec wachten) al zie ik daar geen zelfde reden voor als bij mij.
    we werken verder en houden de volgers op de hoogte :)
     
    Herby63 vindt dit leuk.
  9. Marc w

    Marc w

    Lid geworden:
    10 feb 2013
    Berichten:
    3.277
    Locatie:
    Turnhout belgie
    Door de stevige winden van vorige week nog wat vertraging opgelopen, stormschade was beperkt maar heeft toch wat vrije dagen in beslag genomen en de zin om na te denken ontbrak even.Met hulp van Max de laatste puntjes op de i gezet en zonet de definitieve opstelling en code nog even getest.
    De code werkte al wel maar bij het wegvallen van de verbinding met de gsm bleven in het slechtste geval de motoren draaien tot er opnieuw verbinding gemaakt werd.
    Dit euvel is nu ook opgelost. Voor de geïnteresseerden hieronder nog de Arduino en de MITapp code om af te sluiten en daarna terug naar het bouwverslag van de Zeehond om alles in te bouwen.
    Code:
    String iS = "";
    #include <AFMotor.h>
    
    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);
    AF_DCMotor motor3(3);
    AF_DCMotor motor4(4);
    
    bool SCHAKEL1;
    bool SCHAKEL2;
    bool SCHAKEL3;
    bool SCHAKEL4;
    bool SCHAKEL5;
    bool SCHAKEL6;
    bool SCHAKEL7;
    bool SCHAKEL8;
    
    void setup()
    {
      Serial.begin(9600);
    
      motor1.setSpeed(255);//Can be set from 0-255
      motor2.setSpeed(255);
      motor3.setSpeed(255);
      motor4.setSpeed(255);
    
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
    
      pinMode(14, OUTPUT); // relais 1
      pinMode(15, OUTPUT); // relais 2
      pinMode(16, OUTPUT); // relais 3
      pinMode(17, OUTPUT); // relais 4
      pinMode(18, OUTPUT); // relais 5
      pinMode(19, OUTPUT); // relais 6
      pinMode(9, OUTPUT); // relais 7
      pinMode(10, OUTPUT); // relais 8
    
      pinMode(2, INPUT); // bluetooth state
    
      digitalWrite(14, HIGH); //relais off
      digitalWrite(15, HIGH); //relais off
      digitalWrite(16, HIGH); //relais off
      digitalWrite(17, HIGH); //relais off
      digitalWrite(18, HIGH); //relais off
      digitalWrite(19, HIGH); //relais off
      digitalWrite(9, HIGH); //relais off
      digitalWrite(10, HIGH); //relais off
    
      SCHAKEL1 = true;
      SCHAKEL2 = true;
      SCHAKEL3 = true;
      SCHAKEL4 = true;
      SCHAKEL5 = true;
      SCHAKEL6 = true;
      SCHAKEL7 = true;
      SCHAKEL8 = true;
    }
    
    void loop()
    {
       bool BTavailable = digitalRead (2); // check bluetooth availability
      if (BTavailable == LOW) { // stop motors if not available
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
      }
      else { // start of functions if bluetooth is available
    
      if (Serial.available()) {
        while (Serial.available())
        {
          char iC = (char)Serial.read();
          iS += iC;
        }
        if (iS == "A") { //To move forward
          motor1.run(FORWARD);
        }
        if (iS == "C") { //To move backward
          motor1.run(BACKWARD);
        }
        if (iS == "B") { //To stop
          motor1.run(RELEASE);
        }
        if (iS == "E") { //To move forward
          motor2.run(FORWARD);
        }
        if (iS == "G") { //To move backward
          motor2.run(BACKWARD);
        }
        if (iS == "F") { //To stop
          motor2.run(RELEASE);
        }
        if (iS == "H") { //To move forward
          motor3.run(FORWARD);
        }
        if (iS == "J") { //To move backward
          motor3.run(BACKWARD);
        }
        if (iS == "I") { //To stop
          motor3.run(RELEASE);
        }
        if (iS == "K") { //To move forward
          motor4.run(FORWARD);
        }
        if (iS == "M") { //To move backward
          motor4.run(BACKWARD);
        }
        if (iS == "L") { //To stop
          motor4.run(RELEASE);
        }
        if (iS == "a") { //relais 1 aan-uit
          SCHAKEL1 = !SCHAKEL1; // true wordt false of false wordt true
          digitalWrite (14, SCHAKEL1);
        }
        if (iS == "b") { //relais 2 aan-uit
          SCHAKEL2 = !SCHAKEL2; // true wordt false of false wordt true
          digitalWrite (15, SCHAKEL2);
        }
        if (iS == "c") { //relais 3 aan-uit
          SCHAKEL3 = !SCHAKEL3; // true wordt false of false wordt true
          digitalWrite (16, SCHAKEL3);
        }
        if (iS == "d") { //relais 4 aan-uit
          SCHAKEL4 = !SCHAKEL4; // true wordt false of false wordt true
          digitalWrite (17, SCHAKEL4);
        }
        if (iS == "e") { //relais 5 aan-uit
          SCHAKEL5 = !SCHAKEL5; // true wordt false of false wordt true
          digitalWrite (18, SCHAKEL5);
        }
        if (iS == "f") { //relais 6 aan-uit
          SCHAKEL6 = !SCHAKEL6; // true wordt false of false wordt true
          digitalWrite (19, SCHAKEL6);
        }
        if (iS == "g") { //relais 7 aan-uit
          SCHAKEL7 = !SCHAKEL7; // true wordt false of false wordt true
          digitalWrite (9, SCHAKEL7);
        }
        if (iS == "h") { //relais 8 aan-uit
          SCHAKEL8 = !SCHAKEL8; // true wordt false of false wordt true
          digitalWrite (10, SCHAKEL8);
        }
        iS = "";
      } } }
    toetsen MITapp.jpg

    knoppen MITapp.jpg

    nogmaals bedankt Max voor de hulp ,
    tot later,
    Marc
     
    Herby63 vindt dit leuk.

Deel Deze Pagina