This repository concerns the course KSA4 Embedded Systems (craft, design and technology education) in the University of Turku, Department of Teacher Education, Rauma Unit in the academic year 2014
Tässä koodimme, jolla leppis etenee,tunnistaa esteen, kääntyy, vilkuttaa valoja sekä laulaa mennessään. Ongelmia oli esteen etäisyyden tunnistamisessa. Jos arvo on sama etenemisen ja kääntymisen rajapinnassa, robotti jää arpoamaan ja suorittaa omia tulkintojaan.
include "pitches.h"
// notes in the melody:
int melody[] = {
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4};
int numTones = 10; // kääntymis ääni
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
// mid C C# D D# E F F# G G# A
#include <Servo.h>
Servo ekaServo; // luodaan servo-objekti nimeltä ekaservo
Servo tokaServo; // luodaan servo-objekti nimeltä tokaservo
int ECHOPIN = 2; // ottaa vastaa echo pulsen
int TRIGPIN = 3;// lähettää trigger pulsen
long previousMillis = 0;
long interval = 1000;
int thisNote = 0;
void setup()
{
ekaServo.attach(6); //käynnistää ekaservo nimisen servo-objektin pinnissä 6
tokaServo.attach(7); //käynnistää tokaservo nimisen servo-objektin pinnissä 7
ekaServo.write(90); // asettaa servon keskelle, 90 asteen kulmaan
tokaServo.write(90); // asettaa servon keskelle, 90 asteen kulmaan
delay(1000); // servolle pitää antaa aikaa liikkua
Serial.begin(9600);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
for (int i = 0; i < numTones; i++) // kääntymis ääni
ekaServo.write(75); // käskee servon toiseen äärilaitaan, 0-asteen kulmaan
tokaServo.write(104); // käskee servon toiseen äärilaitaan, 0-asteen kulmaan
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > 300)
{
thisNote++;
// save the last time you blinked the LED
previousMillis = currentMillis;
int noteDuration = 500/noteDurations[thisNote];
tone(4, melody[thisNote],noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(4);
if( thisNote > 12)
thisNote = 0;
}
//delay(10);
}
if(distance<20)
{
ekaServo.write(79); // käskee servon toiseen äärilaitaan, 0-asteen kulmaan
tokaServo.write(79); // käskee servon toiseen äärilaitaan, 0-asteen kulmaa
delay(400);
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > 30)
{
for (int i = 0; i < numTones; i++)
{
tone(4, tones[i]);
digitalWrite(8, random (2));
digitalWrite(9, random (2));
digitalWrite(10, random (2));
digitalWrite(11, random (2));
digitalWrite(12, random (2));
digitalWrite(13, random (2));
Tässä koodimme, jolla leppis etenee,tunnistaa esteen, kääntyy, vilkuttaa valoja sekä laulaa mennessään. Ongelmia oli esteen etäisyyden tunnistamisessa. Jos arvo on sama etenemisen ja kääntymisen rajapinnassa, robotti jää arpoamaan ja suorittaa omia tulkintojaan.
include "pitches.h"
// notes in the melody: int melody[] = { NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4};
// note durations: 4 = quarter note, 8 = eighth note, etc.: int noteDurations[] = { 4,4,4,4,4,4,4,4,4,4,4,4,1 };
int numTones = 10; // kääntymis ääni int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440}; // mid C C# D D# E F F# G G# A
{ pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); }
{ tone(4, tones[i]); delay(50); } noTone(4);
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
int microseconds = pulseIn(ECHOPIN, HIGH);
int distance= microseconds/29/2;
Serial.println(distance);
if(distance>21)
{
digitalWrite(8, LOW); digitalWrite(9,LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12,LOW); digitalWrite(13, LOW);
Serial.print("suoraan");
if(currentMillis - previousMillis > 300) { thisNote++; // save the last time you blinked the LED previousMillis = currentMillis;
int noteDuration = 500/noteDurations[thisNote]; tone(4, melody[thisNote],noteDuration);
}
//delay(10);
}
if(distance<20)
{
ekaServo.write(79); // käskee servon toiseen äärilaitaan, 0-asteen kulmaan
tokaServo.write(79); // käskee servon toiseen äärilaitaan, 0-asteen kulmaa
delay(400);
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > 30) {
{ tone(4, tones[i]);
digitalWrite(8, random (2)); digitalWrite(9, random (2)); digitalWrite(10, random (2)); digitalWrite(11, random (2)); digitalWrite(12, random (2)); digitalWrite(13, random (2));
delay(50); } noTone(4);
if( numTones > 10) numTones = 0; }
//delay(100);
}