Wow, half way already!!
Here is an in depth update at where Chrystal and I are at.
Clock building:
This is a slower then hught process, a lot of scroll sawing in making gears. I keep getting tempted with the CNC machine, but this I want to do by hand. Chrystal has been helping cutting out the gears as she has learned patience (from me of coarse). Below are pictures of the gears:
Next we have finaly received our voice recognition module. Attached are pictures and some sample programming:
#include <SoftwareSerial.h>
#include <VoiceRecognitionV3.h>
/**
Connection
Arduino VoiceRecognitionModule
2 -------> TX
3 -------> RX
*/
VR myVR(2,3); // 2:RX 3:TX, you can choose your favourite pins.
uint8_t records[7]; // save record
uint8_t buf[64];
int led = 13;
#define onRecord (0)
#define offRecord (1)
void printSignature(uint8_t *buf, int len)
{
int i;
for(i=0; i<len; i++){
if(buf[i]>0x19 && buf[i]<0x7F){
Serial.write(buf[i]);
}
else{
Serial.print("[");
Serial.print(buf[i], HEX);
Serial.print("]");
}
}
}
/**
@brief Print signature, if the character is invisible,
print hexible value instead.
@param buf --> VR module return value when voice is recognized.
buf[0] --> Group mode(FF: None Group, 0x8n: User, 0x0n:System
buf[1] --> number of record which is recognized.
buf[2] --> Recognizer index(position) value of the recognized record.
buf[3] --> Signature length
buf[4]~buf[n] --> Signature
*/
void printVR(uint8_t *buf)
{
Serial.println("VR Index\tGroup\tRecordNum\tSignature");
Serial.print(buf[2], DEC);
Serial.print("\t\t");
if(buf[0] == 0xFF){
Serial.print("NONE");
}
else if(buf[0]&0x80){
Serial.print("UG ");
Serial.print(buf[0]&(~0x80), DEC);
}
else{
Serial.print("SG ");
Serial.print(buf[0], DEC);
}
Serial.print("\t");
Serial.print(buf[1], DEC);
Serial.print("\t\t");
if(buf[3]>0){
printSignature(buf+4, buf[3]);
}
else{
Serial.print("NONE");
}
Serial.println("\r\n");
}
void setup()
{
/** initialize */
myVR.begin(9600);
Serial.begin(115200);
Serial.println("Elechouse Voice Recognition V3 Module\r\nControl LED sample");
pinMode(led, OUTPUT);
if(myVR.clear() == 0){
Serial.println("Recognizer cleared.");
}else{
Serial.println("Not find VoiceRecognitionModule.");
Serial.println("Please check connection and restart Arduino.");
while(1);
}
if(myVR.load((uint8_t)onRecord) >= 0){
Serial.println("onRecord loaded");
}
if(myVR.load((uint8_t)offRecord) >= 0){
Serial.println("offRecord loaded");
}
}
void loop()
{
int ret;
ret = myVR.recognize(buf, 50);
if(ret>0){
switch(buf[1]){
case onRecord:
/** turn on LED */
digitalWrite(led, HIGH);
break;
case offRecord:
/** turn off LED*/
digitalWrite(led, LOW);
break;
default:
Serial.println("Record function undefined");
break;
}
/** voice recognized */
printVR(buf);
}
}
We also added in a famly member recognition program. Here we are using an ultrasonic sensor which wil be integrated into the clock to sense te height of whoever is in front of the clock. The clock will communicate personally with the family member by name. At thi time I have it to light up LED's as the rcognition, my wife is set for 3 lighs, at the tme of the screen shot it was recognising myself. Below are pictures and programming:
void setup() {
pinMode (2,OUTPUT);//pin 2 to vcc
pinMode (5,OUTPUT);//pin 5 to GND
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(2, HIGH);
long duration, inches, cm;
pinMode(3, OUTPUT);// pin 3 to Trig
digitalWrite(3, LOW);
delayMicroseconds(2);
digitalWrite(3, HIGH);
delayMicroseconds(5);
digitalWrite(3, LOW);
pinMode (4, INPUT);//pin 4 to Echo
duration = pulseIn(4, HIGH);
// time into distance
inches = microsecondsToInches(duration);
Serial.println();
delay(100);
if (inches < 48 && inches > 38)
{
Serial.print("Hi Nicholas");
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
delay(100);
}
if (inches < 38 && inches > 34)
{
Serial.print("Hi Chrystal");
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(100);
}
if (inches < 34 && inches > 30)
{
Serial.print("Hi Mom");
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
delay(100);
}
if (inches < 30 && inches > 25)
{
Serial.print("Hi Dad");
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(100);
}
We have been working with the servo to control the lights and the temperature which is coming along very well. Chrystal is creating this parts of the project, we will update more shortly.
Thank you for reading,
Chrystal and Dale Winhold