Los punteros laser se pueden usar en nuestros proyectos para señalar la dirección de avance de un vehículo o robot, para detectar un camino no-interrumpido y muchas otras aplicaciones mas.
Los robots no solo ven con los ojos. Muchos “ven” con los oídos. En este tutorial veremos como un robot puede detectar sonido con uno de estos módulos. (sound.ino)
Requisitos:
Computadora (mac)
Arduino UNO o equivalente.
Sensor de Sonido
Breadboard
Arduino IDE (https://www.arduino.cc/en/Main/Software)
El código:
[code]
int currentValue;
int maxValue;
int minValue;
unsigned long timer;
int sampleSpan = 200; // Amount in milliseconds to sample data
int volume; // this roughly goes from 0 to 700
void setup(){
Serial.begin(9600);
resetValues();
}
void loop(){
currentValue = analogRead(A0);
if (currentValue < minValue) {
minValue = currentValue;
}
if (currentValue > maxValue) {
maxValue = currentValue;
}
if (millis() – timer >= sampleSpan) {
volume = maxValue – minValue;
Serial.println(volume);
resetValues();
}
//delay(100);
}
void resetValues(){
maxValue = 0;
minValue = 1024;
timer = millis();
}
[/code]
Automatización de detección sonora es ideal para proyectos industriales o sistemas de seguridad. En el caso de un proyecto tipo robot, ahora nuestro robot podrá reaccionar ante sonidos. También hay sensores para vibraciones!
Si vamos a tener un robot explorador, a veces vamos a querer ver lo que el ve. Podemos perfectamente agregar un modulo para tomar fotos. En este tutorial veremos como controlar un modulo para toma de fotos, una Camara JPEG. TutorialJPEGIRTTLCamerav2.
Requisitos:
Computadora (mac)
Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry… Este tutorial en particular usa una Arduino MEGA.
Modulo Camara JPEG
Modulo SD para almacenar la imágen
Breadboard
Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino Tutorial Camara JPEG
Veamos el código:
[code]
//*******************************************************
// www.linksprite.com
// Note:
// 1. SD must be formated to FAT16
// 2. As the buffer of softserial has 64 bytes,
// so the code read 32 bytes each time
// 3. Please add the libaray to the lib path
//
// * SD card attached to SPI bus as follows:
// * MOSI – pin 11
// * MISO – pin 12
// * CLK – pin 13
// * CS – pin 4
//*******************************************************
#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
SoftwareSerial mySerial(5,6); // Set Arduino pin 4 and 5 as softserial
byte ZERO = 0x00;
byte incomingbyte;
long int j=0,k=0,count=0,i=0x0000;
uint8_t MH,ML;
boolean EndFlag=0;
File myFile;
void SendResetCmd(){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x26);
mySerial.write(ZERO);
}
/*************************************/
/* Set ImageSize :
/* <1> 0x22 : 160*120
/* <2> 0x11 : 320*240
/* <3> 0x00 : 640*480
/* <4> 0x1D : 800*600
/* <5> 0x1C : 1024*768
/* <6> 0x1B : 1280*960
/* <7> 0x21 : 1600*1200
/************************************/
void SetImageSizeCmd(byte Size){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x54);
mySerial.write(0x01);
mySerial.write(Size);
}
/*************************************/
/* Set BaudRate :
/* <1> 0xAE : 9600
/* <2> 0x2A : 38400
/* <3> 0x1C : 57600
/* <4> 0x0D : 115200
/* <5> 0xAE : 128000
/* <6> 0x56 : 256000
/*************************************/
void SetBaudRateCmd(byte baudrate){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(baudrate);
}
void SendTakePhotoCmd(){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(ZERO);
}
void SendReadDataCmd(){
MH=i/0x100;
ML=i%0x100;
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x32);
mySerial.write(0x0c);
mySerial.write(ZERO);
mySerial.write(0x0a);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(MH);
mySerial.write(ML);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(0x20);
mySerial.write(ZERO);
mySerial.write(0x0a);
i+=0x20;
}
void StopTakePhotoCmd(){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(0x03);
}
void setup(){
Serial.begin(38400);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print(“Initializing SD card…”);
pinMode(10, OUTPUT);
if (!SD.begin(4)) {
Serial.println(“initialization failed!”);
return;
}
Serial.println(“initialization done.”);
Serial.println(“please waiting ….”);
}
void loop(){
byte a[32];
int ii;
mySerial.begin(115200);
delay(200);
SendResetCmd();//Wait 2-3 second to send take picture command
delay(2000);
SetBaudRateCmd(0x2A);
delay(500);
mySerial.begin(38400);
delay(100);
SetImageSizeCmd(0x21);
delay(100);
SendTakePhotoCmd();
delay(3000);
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
}
myFile = SD.open(“picture.jpg”, FILE_WRITE);
while(!EndFlag)
{
j=0;
k=0;
count=0;
SendReadDataCmd();
delay(5);
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
k++;
delayMicroseconds(100);
if((k>5)&&(j<32)&&(!EndFlag))
{
a[j]=incomingbyte;
if((a[j-1]==0xFF)&&(a[j]==0xD9)) //tell if the picture is finished
EndFlag=1;
j++;
count++;
}
}
for(j=0;j<count;j++){
if(a[j]<0x10) Serial.print(“0″);
Serial.print(a[j],HEX); // observe the image through serial port
Serial.print(” “);
}
for(ii=0; ii<count; ii++)
myFile.write(a[ii]);
Serial.println();
}
myFile.close();
Serial.print(“Finished writing data to file”);
while(1);
}
[/code]
Ahora repasemos las conexiones:
Arduino Tutorial Conexiones Camara JPEG
En este caso consultamos el manual del modulo y notamos que el cable rojo no es Vcc. Así que hay que tener cuidado.
Ese proyecto se puede ver aquí:
Excelente! Podemos hacer varias cosas con estas imágenes, desde almacenarlas en una SD hasta postearlas a internet!