21 november 2024

Kalkhaar's gids

Tutorials voor iedereen

Rijsnelheid en richting met behulp van een L293D

3 min gelezen

Rijsnelheid en richting met behulp van een L293D en arduino

Met deze ‘How To’ gebruiken we de L293D motor driver chip. Met de L293D is het ook mogelijk om de rijrichting te bepalen.
Voor de rijsnelheid gebruiken we een PWM uitgang van de arduino. De richting word bepaald door een hoog signaal op 1 van de ingangen
van de L293D. In totaal zijn we dus 3 uitgangen van een arduino nodig. We gebruiken een externe voeding voor de rijspanning.
De uitgangs stroom van de L293D is 600mA, dit is ruim voldoende om een baanvak aan te sturen.

Benodigdheden:
Arduino (Ik heb hier een mega gebruikt)
L293D chip
10K potentionmeter
2x keramische veellagige condensator 1uF
Kabeltjes
breadboard
Externe 16V voeding

Circuit:
De aansluiting is als volgt:
De potentionmeter sluiten we aan op pin A0 (analoge ingang 0)
De PWM output pin 2 gaat naar de en2 pin van de L293D chip
Pin 22 gaat naar in4 van de L293D chip
Pin 23 gaat naar de in3 van de L293D chip
Voor het ontstoren zetten we over de uitgang (out3/gnd en out4/gnd) een keramische condensator van 1uF
Op +V van de L293D chip zetten we 5 volt
Op +motor van de L293D chip zetten we de plus van de externe voeding
Let op dat je de massa van de arduino en de externe voeding met elkaar verbind

Schema:

Board:

In de volgende code heb ik enkele random gegevens ingevoerd.
bv. hoe lang het oponthoud is en hoe lang de trein rijd.

Code:

/*
Project ‘Rijsnelheid en richtting met behulp van een L293D’
Project details at https://www.kalkhaar.nl/rijsnelheid-en-richting-met-behulp-van-een-l293d/
Author ‘Marcel Kalkhaar’

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/

int enablePin = 2;
int in1Pin = 22;
int in2Pin =23;
int potPin = 54;
int potValue = 0;
int opcnt = 0;
int opval = 0;
int snelheid = 0;
int drivemaxValue = 0;
int driveValue = 300; //600 is 1 minuut,3000 is 5 minuten enz.
int waitValue = 150; //600 is 1 minuut,3000 is 5 minuten enz.
int minValue = 35; //minimale waarde waar spanningsloos word gemaakt of juist spanning
int opafValue = 2;
boolean drive = false;
boolean opont = true;
boolean optrek = false;
boolean afrem = false;
boolean forward = true;
boolean backward = false;

void setup()
{
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(switchPin, INPUT);
pinMode(13, OUTPUT);
}

void loop()
{
// ## blink LED op arduino board voor hello world 😉
if (digitalRead(13) == HIGH) {
digitalWrite(13, LOW);
} else {
digitalWrite(13, HIGH);
}
int potValue = analogRead(potPin) / 4;

// trein staat stil
if (opont == true) {
if (opcnt == opval) {
optrek = true;
opont = false;
opcnt = 0;
opval = 0;
snelheid = 0;
if ( forward == true ) {
forward = false;
backward = true;
digitalWrite(in1Pin, HIGH);
digitalWrite(in2Pin, LOW);
} else {
forward = true;
backward = false;
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
}
}
}
// trein trekt op
if (optrek == true) {
if (opcnt <= potValue) {
if ( opcnt > minValue ) {
if ( snelheid < potValue ) {
snelheid = snelheid + opafValue;
}
}
}
if (opcnt > potValue) {
optrek = false;
drive = true;
drivemaxValue = random(0,driveValue);
opcnt = 0;
}
}
// trein rijd
if (drive == true) {
if (opcnt == drivemaxValue) {
drive = false;
afrem = true;
opcnt = 0;
} else {
snelheid = potValue;
}
}
// afremmen trein
if (afrem == true) {
if (snelheid == 0) {
afrem = false;
opont = true;
opval = random(0,waitValue);
opcnt = 0;
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, LOW);
} else {
if ( snelheid < minValue ) {
snelheid = 0;
} else {
if ( potValue < snelheid ) {
snelheid = potValue;
} else {
snelheid = snelheid – opafValue;
}
}
}
}
analogWrite(enablePin, snelheid);
opcnt++;
delay(100);
}

Hoe werkt het?:

 

Download de sketch hier

Originele post op bliksemsnel.net maar verhuisd naar kalkhaar.nl

Veel plezier

Geef een reactie

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

Copyright © Alle rechten voorbehouden. | Newsphere door AF themes.