donderdag 12 juni 2014

Arduino code

Het ballenkanon van de hovercraft zal worden aangestuurd door een arduino. Deze arduino zal dan een servo aandrijven waardoor het rad de bal laat vallen. Omdat wij gebruik maken van een 360 graden servo is het niet mogelijk om de stappen te bepalen. Daarom hebben we gebruik gemaakt van een code waarin de servo maar een beperkte tijd zal draaien, waardoor er maar één bal valt. De servo zal pas gaan draaien als het een signaal krijgt van de arduino. Deze arduino krijgt een signaal wanneer er een object wordt gedetecteerd door de ultrasone sensor.

Ik heb geleerd dat het erg lastig is om een goede code te schrijven. Verder heb ik gemerkt dat ik me hier nog meer mee moet gaan bezig houden, omdat het vrij complex is. Daarnaast heb ik geleerd dat je door het te proberen achter de code kunt komen. Ik heb wel veel geleerd van het uitzoeken van de code. Hieronder kunt u de code zien.



/*
HC-SR04 Ping distance sensor]
VCC to arduino 5v GND to arduino GND
Echo to Arduino pin 13 Trig to Arduino pin 12
Red POS to Arduino pin 11
Green POS to Arduino pin 10
560 ohm resistor to both LED NEG and GRD power rail
More info at: http://goo.gl/kJ8Gl
Original code improvements to the Ping sketch sourced from Trollmaker.com
Some code and wiring inspired by http://en.wikiversity.org/wiki/User:Dstaub/robotcar
*/

#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10
#include <Servo.h>
Servo servo;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
  servo.attach (9);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 4) {  // This is where the LED On/Off happens
    digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off
  digitalWrite(led2,LOW);
}
  else {
    digitalWrite(led,HIGH);
   digitalWrite(led2,LOW);
  }
  if (distance >= 30 || distance <= 0)
  {
    digitalWrite(led, LOW);
    digitalWrite(led2, HIGH);
    Serial.println("Out of range");
    servo.write (92);
    delay(100);
  }
  else {
    Serial.print(distance);
    Serial.println(" cm");
    servo.write (92);
    delay(10);
    servo.write (91);
    delay (1350);
    servo.write (92);
    delay (5000);
  }
  delay(10);

Geen opmerkingen:

Een reactie posten