Friday, April 17, 2015

Tutorial - Arduino servo motor Knock lock

Realizzato direttamente dalla proposta presente sul libro degli esempi dello starter Kit di Arduino da un allievo del centro EndoFap Don Orione di Borgonovo, potete consultare sul sito di Arduino lo schema e lo sketch per il comando del servo motore qui e del sensore qui



Questo Lo sketch

// da Arduino Starter kit
// scritto da Hila Stiliano, 10/03/2015

#include <Servo.h>
Servo myServo;
const int piezo = A0;
const int switchPin = 2;
const int yellowLed = 3;
const int greenLed = 4;
const int redLed = 5;
int knockVal;
int switchVal;
const int quietKnock = 10;
const int loudKnock = 100;
boolean locked = false;
int numberOfKnocks = 0;





void setup(){
  myServo.attach(9);
  pinMode(yellowLed, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(switchPin, INPUT);
  Serial.begin(9600);
  digitalWrite(greenLed, HIGH);
  myServo.write(0);
  Serial.println("La scatola è aperta!");
}
void loop(){
  if(locked == false){
    switchVal = digitalRead(switchPin);
    if(switchVal == HIGH){
      locked = true;
      digitalWrite(greenLed,LOW);
      digitalWrite(redLed,HIGH);
      myServo.write(90);
     Serial.println("la scatola è chiusa!");
     delay (1000);
   }
 }
 if(locked == true){
   knockVal = analogRead(piezo);
   if(numberOfKnocks < 3 && knockVal > 0){
     if(checkForKnock(knockVal) == true){
       numberOfKnocks++;
     }
     Serial.print(3-numberOfKnocks);
     Serial.println("more knocks to go");
   }
   if(numberOfKnocks >= 3){
     locked = false;
     myServo.write(0);
     delay(20);
     digitalWrite(greenLed,HIGH);
     digitalWrite(redLed,LOW);
     Serial.println("la scatola è aperta!");
     numberOfKnocks =0;
   }
  }
 }
 boolean checkForKnock(int value){
   if(value > quietKnock && value < loudKnock){
     digitalWrite(yellowLed, HIGH);
     delay(50);
     digitalWrite(yellowLed, LOW);
     Serial.print("numero di colpi esatto ");
     Serial.println(value);
     return true;
   }
   else {
     Serial.print("numero di colpi errato");
     Serial.println(value);
     return false;
   }
  }
Post a Comment