Go Down

Topic: Arduino dc motor met transistors bluetooth servo en buzzer (Read 492 times) previous topic - next topic

MaxIetswaard

Dit project heb ik moeten doen voor school. Ik dacht misschien hebben meer mensen er iets aan dus deel ik hierbij mijn elektrische schema en codering. 

https://create.arduino.cc/projecthub/mukeshkp2005/arduino-with-bluetooth-to-control-an-led-d8e16d?ref=similar&ref_id=346870&offset=1
Dit is de link naar de site die ik heb gebruikt voor het opzetten van de telefoon app.

Code: [Select]
*// Dit programma is samengesteld door Max Ietswaard
#include <Servo.h>           //Voegt de bibliotheek van de servo toe waardoor je de snelkoppelingen daarvoor kan gebruiken.

//const int (Naam) = (Pin);       //zorgt ervoor dat je een eigen naam kan geven aan de bepaalde pins zodat je makkelijk terug kan refereren.
const int motorPinRF = 3;         //Vooruit Rechter wiel
const int motorPinRB = 5;         //Achteruit Rechter wiel
const int motorPinLF = 6;         //vooruit Linker wiel
const int motorPinLB = 9;         //Achteruit Linker wiel
const int buzzer = 11; //Buzzer

char Bluetooth;             //Maakt een variable aan. Uitleg Variabele: https://www.google.com/search?sxsrf=ALeKk01i_VKuLaoltb49mxUJcEBNaJPHOw%3A1602236381209&ei=3S-AX8WhDJG8kwXVz5a4Cg&q=wat+is+een+variabele+arduino&oq=wat+is+een+variabele+arduino&gs_lcp=CgZwc3ktYWIQAzoHCC4QJxCTAjoECCMQJzoCCAA6BQgAELEDOgQIABBDOggIABCxAxCDAToECAAQCjoGCAAQFhAeOggIIRAWEB0QHlCKlAhYhsEIYNnDCGgBcAF4AIABSYgBxgySAQIyOZgBAKABAaoBB2d3cy13aXrAAQE&sclient=psy-ab&ved=0ahUKEwiFhOTSm6fsAhUR3qQKHdWnBacQ4dUDCA0&uact=5

Servo servo;                //Servo is een snelkoppeling voor een servo en hier wordt hij "servo" genoemd zodat ik er naar toe terug kan verwijzen.


void setup()                    //Dit is de setup hier zet je alles in wat vooraf moet voorbereid worden.
{
  Serial.begin(9600);                 //Zorgt dat de monitor om op 9600 bit per seconde draaid.
  pinMode(motorPinRF, OUTPUT);        //Zorgt dat Pin3 als uitgang wordt gezien.
  pinMode(motorPinRB, OUTPUT);        //Zorgt dat Pin5 als uitgang wordt gezien.
  pinMode(motorPinLF, OUTPUT);        //Zorgt dat Pin6 als uitgang wordt gezien.
  pinMode(motorPinLB, OUTPUT);        //Zorgt dat Pin9 als uitgang wordt gezien.
  pinMode(buzzer, OUTPUT);            //Zorgt dat Pin11 als uitgang wordt gezien.
  servo.attach(2);                    //Zegt dat de servo is aangesloten op Pin2.
}


void loop() //Hier zet je de codering in.
{
  if (Serial.available() > 0)           //Als Serial beschikbaar(altijd) is doe het volgende...
  {
    Bluetooth = Serial.read();                   //Deze regel zorgt ervoor dat de input van de bluetooth module gelijk staat aan het variabele "Bluetooth"
    Serial.print(Bluetooth);                     //Zorgt ervoor dat de input van de bluetooth module wordt geprint op de monitor.
    Serial.print("\n");                          //Zorgt ervoor dat er een [enter] komt te staan na elke input.
    delay(15);                                   //Wachttijd van 15ms tussen volgende loop

    switch (Bluetooth)  //De input van "Bluetooth"
    {
      case '0':                         //Als de input van bluetooth "0" is doe dit.
        Serial.print("Achteruit");              //op de monitor komt "Achteruit geprint
        digitalWrite(motorPinLB, HIGH);         //Linker wiel word 'backwards' gedraaid.
        digitalWrite(motorPinRB, HIGH);         //Rechter wiel word 'backwards' gedraaid.
        tone(buzzer, 750);                      //Buzzer piep op 750Hz.
        delay(100);                             //Wachttijd van 100ms tussen buzzer piep en rust
        noTone(buzzer);                         //Buzzer rust
        delay(100);                             //Wachttijd van 100ms tussen buzzer rust en piep
        tone(buzzer, 750);
        delay(100);
        noTone(buzzer);
        delay(100);
        tone(buzzer, 750);
        delay(100);
        noTone(buzzer);
        delay(100);
        tone(buzzer, 750);
        delay(100);
        noTone(buzzer);
        delay(100);
        tone(buzzer, 750);
        delay(100);
        noTone(buzzer);
        delay(100);                            //Wachttijd tussen buzzer rust en motor stop.
        digitalWrite(motorPinRB, LOW);         //Rechter wiel stopt met draaien.
        digitalWrite(motorPinLB, LOW);         //Linker wiel stopt met draaien.
        break;                          //Einde van de 'case'
      case '1':                         //Als de input van bluetooth '1' is doe dit.
        Serial.print("Vooruit");               //Print op de moitor 'Vooruit'
        digitalWrite(motorPinRF, HIGH);        //Draait rechter wiel 'Forward'
        digitalWrite(motorPinLF, HIGH);        //Draait linker wiel 'Forward'
        delay(1000);                           // Wachttijd van 1000ms / 1s
        digitalWrite(motorPinRF, LOW);         //Zet de rechter motor stil
        digitalWrite(motorPinLF, LOW);         //Zet de linker motor stil
        break;                          //Einde van de case
      case '2':                         //Als de input van bluetooth '2' is doe dit.
        Serial.print("Rechtsaf");              //Print op de moitor 'Rechtsaf'
        digitalWrite(motorPinLF, HIGH);        //Draait linker motor 'Forward'
        delay(1000);                           //wachttijd van 1000ms / 1s
        digitalWrite(motorPinLF, LOW);         //Zet linker motor stil.
        break;                          //Einde van de 'case'
      case '3':                         //Als de input van bluetooth '3' is doe dit.
        Serial.print("Linksaf");               //Print op de moitor 'Rechtsaf'
        digitalWrite(motorPinRF, HIGH);        //Draait rechter motor 'Forward'
        delay(1000);                           //Wachttijd van 1000ms / 1s
        digitalWrite(motorPinRF, LOW);         //Zet rechter motor stil.
        break;                          //Einde van de 'case'
      case '4':                         //Als de input van bluetooth '4' is doe dit.
        Serial.print("Servo dicht");           //Print op de moitor 'Servo dicht'
        servo.write(0);                        //Draait de servo met de klok mee op volle toeren.
        delay(700);                            //Precieze wachttijd van 700ms
        servo.write(90);                       //Zet de servo stil op de plek waar hij op dat moment staat.
        break;                          //Einde van de 'case'
      case '5':                         //Als de input van bluetooth '5' is doe dit.
        Serial.print("Servo open");            //Print op de moitor 'Servo dicht'
        servo.write(180);                      //Draait de servo tegen de klok in op volle toeren.
        delay(700);                            //Precieze wachttijd van 700ms
        servo.write(90);                       //Zet de servo stil op de plek waar hij op dat moment staat.
        break;                          //Einde van de 'case'
        //copy
    }
  }
}




MAS3

Hoi Max Ietswaard, welkom.

Heel mooi dat je je project zo uitgebreid deelt.

Ik heb nog wel een vraag:
Welke transistoren heb je gebruikt ?
Want je schema laat dat niet zien, en bovendien vermoed ik dat je 2 x 2 x 2 in plaats van 2 x 4 x 1 (zoals getekend) transistoren hebt gebruikt.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

MaxIetswaard


MAS3

Dan heb je dus 2 x 4 x 1 en is het zoals getekend.
Het is gangbaar een complementair paar te gebruiken, dan krijg je dus een BC549B NPN en een BC559B PNP.
Die kunnen niet enorm veel stroom verwerken (100 mA continu), maar schijnbaar krijgen ze je motor aan de gang.
Houd er wel rekening mee dat de motor ongeveer anderhalve volt minder krijgt dan de voeding van de transistoren, dus in dit geval 3,6 volt.
Verder is het wel nodig om een diode over elke transistor te zetten, tegen de gangbare richting in.
In jouw tekening wijzen die diodes dan dus allemaal naar boven.
Hierdoor worden stoorpulsjes die die motor zal gaan maken, afgevoerd worden voor ze je transistor opblazen.

Wat je verder ook niet moet doen, is je servo en motoren voeden uit de Arduino.
Maar ik weet niet of je dat ook doet.
Wanneer je een externe 5 volt voeding gebruikt die minstens 1,5 Ampère kan leveren, dan is het wel goed.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Koepel

Netjes gedaan :D

Mijn browser pakt die link niet in je eerste bericht.
Eens kijken of dit werkt: https://create.arduino.cc/projecthub/mukeshkp2005/arduino-with-bluetooth-to-control-an-led-d8e16d.

Die bronvermelding hoort in de sketch zelf, dus die link hoort eigenlijk in de header van de sketch ;)

MaxIetswaard

Dan heb je dus 2 x 4 x 1 en is het zoals getekend.
Het is gangbaar een complementair paar te gebruiken, dan krijg je dus een BC549B NPN en een BC559B PNP.
Die kunnen niet enorm veel stroom verwerken (100 mA continu), maar schijnbaar krijgen ze je motor aan de gang.
Houd er wel rekening mee dat de motor ongeveer anderhalve volt minder krijgt dan de voeding van de transistoren, dus in dit geval 3,6 volt.
Verder is het wel nodig om een diode over elke transistor te zetten, tegen de gangbare richting in.
In jouw tekening wijzen die diodes dan dus allemaal naar boven.
Hierdoor worden stoorpulsjes die die motor zal gaan maken, afgevoerd worden voor ze je transistor opblazen.

Wat je verder ook niet moet doen, is je servo en motoren voeden uit de Arduino.
Maar ik weet niet of je dat ook doet.
Wanneer je een externe 5 volt voeding gebruikt die minstens 1,5 Ampère kan leveren, dan is het wel goed.

Dankje wel voor je reactie ik denk inderdaad dat ik die diodes maar moet gaan toevoegen want het autootje rijd nu niet. Alle elektronica los deed hij het wel maar nu het op het autootje zit doe het het niet meer.

brambo47

Je zou de 8 transistors ook vervangen door 1 IC L293 of L298 waar ook nog 8 beveiligings-diode~s in.
A. Boose

MAS3

Dat zou je inderdaad kunnen doen.
Maar alleen bij de L293-D zitten die diodes er in, daar staat de D in de naam ook voor.
De L293 (metzonder D), en de L298 hebben er dus geen ingebouwde diodes in zitten.
Verder is het nauwelijks een betere oplossing, want heel veel meer dan een handjevol transistoren zit er niet in.
De L293-D kan 600 mA aan, dus wel een stuk meer dan de nu gebruikte transistoren, en 1 Ampère wanneer je 'm heel goed koelt.
En voor de volledigheid: je hebt hier hetzelfde spanningsverlies, want het zijn gewoon hetzelfde soort transistoren, maar dan met een groter cluster in een ander stuk kunststof.

Persoonlijk vind ik de gemaakte versie leuker.
Want het geeft meer inzicht over hoe het werkt voor de maker en de medescholieren/geïnteresseerden, dan een magic black-box met 16 pootjes.
Voor productie is dat dan weer anders, maar helemaal niet van toepassing hier.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

MaxIetswaard

Was inderdaad een heel goed idee om die te gebruiken maar dat mocht niet voor de opdracht want "Dat is te makkelijk". Ze wilde persé dat we transistors gebruikte

shooter

Je hebt dus maar 3.5 volt op de motortjes staan max en dat zal wel te weinig zijn om goed te draaien.
Voorstel is een 12 Volt voeding pakken  . dan moet je wel met pnp en npn transistoren werken. Kun je dat ook beter uitleggen op school.
paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

Go Up