arduino aansturing met bleuthoot

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
 
Ik ben geen voorstander van het gebruik van een "shield" welke alleen maar werkt met een bijbehorende "onbegrijpelijke " ( voor mij dan) library.
Ik was hier iets te voorbarig, je kunt dit shield ook zonder library gebruiken, bijvoorbeeld met DEZE code. Ga jij die gebruiken @Marc w ?
 
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
 
en de bleuthoot word gevoed vanaf de arduino. no smoke tot nu toe :)
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.
 
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 :) )
 
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:
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 :)
 
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
 
Back
Top