Project 10 Board

 

 

 hbridge

 

 

 

waarheidstabel

 

 

 

 

Project 10 Componenten

 

 

 

Project 10 Circuit

 

 

 

waarheidstabel

 

 

board met extra led, rechter motordrive is aangesloten omdat de linker niet werkte

board met extra led
rechter motordrive is aangesloten omdat de linker niet werkte

Project 10 Zoetrope blz 103.              terug naar de inleiding

De schets maakt gebruik van de H-bridge L293D waarmee de draairichting en de snelheid van een motor kan veranderen.
Bij een spanning van 8 volt trekt de motor 80 mA. Een arduino outputpin kan max 40 mA leveren. De L293D kan max 600 mA leveren
De L239D heeft ingebouwde clamp diodes, vandaar de D
De L293D is een dual H-bridge motordrive. Je kan dus 2 motoren aansluiten.
 
Aanpassingen van de code en hardware
Een led bijplaatsen die aangeeft of de motor draait
 

//------De output pinnen---------- 
 
//controle pinnen waarmee je de draairichting van de motor verander. 
const int controlPin1 = 2; //Pin 7 van de Hbridge 
const int controlPin2 = 3; //Pin 2 van de Hbridge 
 
//met de enablePin schakel je de motor aan of uit en bepaal je de draaisnelheid 
const int enablePin = 9;   //Pin 1 van de Hbridge 
 
//------De input pinnen-------- 
 
const int draairichtingknopPin = 4; 
const int aanuitknopPin = 5;  
const int potPin = A0; 
 
// Variabelen om de aanuit en draairichtingtoestand van de knoppen vast te leggen 
int huidigeAanuittoestand; 
int  vorigeAanuittoestand; 
 
int huidigeDraairichtingtoestand;  
int  vorigeDraairichtingtoestand; 
 
// Deze variabele veranderen afhankelijk van de veranderde toestand of snelheid 
int motoraanuit = 0;         // Kan HIGH 0f LOW zijnj 
int motordraairichting = 1;  // Kan HIGH of LOW zijn 
int motorsnelheid = 0;       // Bevat de pwm waarde 
 
void setup() { 
  // De output pinnen initialiseren  
  pinMode(controlPin1, OUTPUT); 
  pinMode(controlPin2, OUTPUT); 
  pinMode(enablePin, OUTPUT); 
 
// De inputpinnen initialiseren .Dit is niet nodig  
  pinMode(draairichtingknopPin, INPUT); 
  pinMode(aanuitknopPin, INPUT); 
  pinMode(potPin,INPUT); 
 
// EnablePin LOW maken dan staat de motor uit 
  digitalWrite(enablePin, LOW); 
} 
 
void loop() { 
 
// Leest de spanning op de arm van de potentiometer zet deze om naar een 10 bit getal 
// Delen door 4 --> 8 bit getal dus geschikt voor pwm 
   motorsnelheid = analogRead(potPin) / 4; 
 
// ---De waarden van de twee knoppen uitlezen-- 
   
// De waarde van de aanuit knop uitlezen 
   huidigeAanuittoestand = digitalRead(aanuitknopPin); 
   delay(1); 
   
// De waarde van de draairichtingknop uitlezen 
  huidigeDraairichtingtoestand = digitalRead(draairichtingknopPin); 
 
   //----De uitgelezen waarden testen----- 
 
//  Als er op de aanuit knop wordt gedrukt kan de aanuit toestand veranderen  
   if (huidigeAanuittoestand != vorigeAanuittoestand) {    
//  als de huidigeAanuittoestand HIGHT is wordt de motor ingeschakeld als hij uit stond 
//  en uitgeschakeld als hij aan stond 
    if (huidigeAanuittoestand == HIGH) { 
      motoraanuit = !motoraanuit; 
    } 
  } 
 
  // Als op de draairichtingknop wordt gedrukt moet de draairichting veranderen 
  if (huidigeDraairichtingtoestand != vorigeDraairichtingtoestand) { 
  //als de huidigedraairichtingtoestand HIGHT is wordt de motor ingeschakeld als hij uit stond 
    //en uitgeschakeld als hij aanstond 
    if (huidigeDraairichtingtoestand == HIGH) { 
      motordraairichting = !motordraairichting; 
    } 
  } 
 
//--- afhankelijk van de testuitslag de draairichting snelheid veranderen  
//----en de motor aan of uitschakelen 
 
// De draairichting van de motor instellen, zie de waarheidstabel 
  if (motordraairichting == 1) { 
     digitalWrite(controlPin1, HIGH); 
     digitalWrite(controlPin2, LOW); 
  } else { 
     digitalWrite(controlPin1, LOW); 
     digitalWrite(controlPin2, HIGH); 
  } 
 
  if (motoraanuit == 1) { 
    //de PWM waarden in "motorsnelheid" via de enablePin naar de Hbridge sturen  
    analogWrite(enablePin, motorsnelheid); 
  } else { //Als motoraanuit LOW is de motor uitschakelen 
    analogWrite(enablePin, 0); 
  } 
 
//---de draai en aanuit toestanden onthouden----- 
 
// De huidigeDraairichtingtoestand copieeren naar de vorigeDraairichtingtoestand 
   vorigeDraairichtingtoestand = huidigeDraairichtingtoestand; 
    
// De huidigeAanuit toestand copieeren naar de vorigeAanuittoestand 
   vorigeAanuittoestand = huidigeAanuittoestand; 
}