Sei sulla pagina 1di 18

CODIGO EN ARDUINO:

#include <Servo.h> // Añade la libreria Servo


Servo leftRightServo; // Crea una variable servo
int leftRightPos = 0; // Variable para la posición del servo
(grados)
int index = 0; // Contador para el número de lectura
long total = 0; // Variable para calcular el pormedio
int average = 0;// Variable para calcular el promedio
long duration = 0; // Variable para calcular el tiempo de
llegada de la señal
int distance = 0; // Variable para calcular la distancia
// CONFIGURACIÓN:
int echoPin = 10;
int trigPin = 9;
int servoPin = 8; // Pin para el cable de señal del servo
int servoMin = 700; // Anchura del pulso, en microsegundos,
correspondiente al mínimo (0 grados) ángulo en del servo (por
defecto 544)
int servoMax = 2400; // Anchura del pulso, en microsegundos,
correspondiente al máximo (180 grados) ángulo en del servo (por
defecto 2400)
const int numReadings = 2; // Número de lecturas en cada
posición
void setup() {
leftRightServo.attach(servoPin,700,2400); // Pin de salida para
el servo, recorrido minimo, recorrido maximo
Serial.begin(9600); // Establece la velocidad de datos del
puerto serie
pinMode(trigPin, OUTPUT); // Establece pin como salida
pinMode(echoPin, INPUT); // Establece pin como entrada
digitalWrite(trigPin, LOW); // Pone el pin a un estado
logico bajo
}

void loop() {
for(leftRightPos = 0; leftRightPos < 180; leftRightPos++) {
// De izquierda a derecha.
leftRightServo.write(leftRightPos);
for (index = 0; index<numReadings; index++) { // Repite
tantas veces como número de lecturas en cada posicion
// Pulso de 10us para inicial el modulo
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH, 17400); // Devuelve la


longitud del pulso del pin Echo en us (3metros maximo)
if (!duration){ // Si la duracción es 0
duration = 17400; // La señal se a perdido. Se
establece distancia maxima
}
distance = duration/58; // Calculamos distancia en
centrimetros
total = total + distance; // Almacenamos la distancia para
calcular promedio
delay(50); // Esperamos hasta la siguiente medida
}

average = total/numReadings; // Calcula el promedio


total = 0; // Resetea variable

// Envia datos por el puerto serie


Serial.print("X"); // Identificador X para la posicion
del servo
Serial.print(leftRightPos); // Posición del servo
Serial.print("V"); // Identificador V para el promedio
de distancia
Serial.println(average); // Promedio de distancia
}
for(leftRightPos = 180; leftRightPos > 0; leftRightPos--) {
// De derechas a izquierda
leftRightServo.write(leftRightPos);
for (index = 0; index<numReadings; index++) {
// Pulso de 10us para inicial el modulo
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH, 17400);


if (!duration){
duration = 17400;
}
distance = duration/58;
total = total + distance;
delay(10);
}
//average es el promedio
average = total/numReadings;
total = 0;

Serial.print("X");
Serial.print(leftRightPos);
Serial.print("V");
Serial.println(average);
}
}

CÓDIGO EN PROCESSING
Este programa es para gráficos, en este proyecto
dibujaremos un radar, en el que detectara objetos
estáticos asi como objetos en movimiento.
import processing.serial.*; // Importa la libreria serie
Serial myPort; // Declara el puerto serie
float x, y; // Variable para almacenar las
coordenadas
int radius = 350; // Establece el radio de los
objetos
int w = 300; // Establece un valor de anchura
arbitraria
int degree = 0; // Varible para la posición del
servo en grados
int value = 0; // Variable para el valor del
sensor
int motion = 0; // Variable para indicar el
sentido del barrido del servo
int[] newValue = new int[181]; // Matriz para almacenar cada
valor nuevo de cada posición del servo
int[] oldValue = new int[181]; // Matriz para almacenar cada
valor previo de cada posición del servo
PFont myFont; // Variable para configuración
de fuente
int radarDist = 0; // set value to configure Radar
distance labels
int firstRun = 0; // value to ignore triggering
motion on the first 2 servo sweeps
int lf = 10; // ASCII retorno de carro
void setup()
{
size(750, 450); // Establece el tamaño de la
ventana
background (0); // Establece a negro del fondo
de la ventana
myFont = createFont("verdana", 16); // Parametros de la fuente
textFont(myFont); // Establece los parametros de
la fuente
println(Serial.list()); // Lista todos los puertos
series
myPort = new Serial(this, Serial.list()[0], 9600); // Establece
un puerto serie
myPort.bufferUntil(lf); // Almacena en el bufer
hasta llegar un retorno de carro
}
/* draw the screen */
void draw(){
fill(0); // set the following
shapes to be black
noStroke(); // set the following
shapes to have no outline
ellipse(radius, radius, 750, 750); // draw a circle with a
width/ height = 750 with its center position (x and y) set by
the radius
rectMode(CENTER); // set the following
rectangle to be drawn around its center
rect(350,402,800,100); // draw rectangle (x, y,
width, height)
if (degree >= 179) { // if at the far right
then set motion = 1/ true we're about to go right to left
motion = 1; // this changes the
animation to run right to left
}
if (degree <= 1) { // if servo at 0 degrees
then we're about to go left to right
motion = 0; // this sets the animation
to run left to right
}
/* setup the radar sweep */

strokeWeight(7); // set the thickness of


the lines
if (motion == 0) { // if going left to right
for (int i = 0; i <= 20; i++) { // draw 20 lines with
fading colour each 1 degree further round than the last
stroke(0, (10*i), 0); // set the stroke colour
(Red, Green, Blue) base it on the the value of i
line(radius, radius, radius +
cos(radians(degree+(180+i)))*w, radius +
sin(radians(degree+(180+i)))*w); // line(start x, start y, end
x, end y)
}
} else { // if going right to left
for (int i = 20; i >= 0; i--) { // draw 20 lines with
fading colour
stroke(0,200-(10*i), 0); // using standard RGB
values, each between 0 and 255
line(radius, radius, radius +
cos(radians(degree+(180+i)))*w, radius +
sin(radians(degree+(180+i)))*w);
}
}
/* Setup the shapes made from the sensor values */
noStroke(); // no outline
/* first sweep */
fill(0,50,0); // set the fill colour of
the shape (Red, Green, Blue)
beginShape(); // start drawing shape
for (int i = 0; i < 180; i++) { // for each degree in the
array
x = radius + cos(radians((180+i)))*((oldValue[i])); //
create x coordinate
y = radius + sin(radians((180+i)))*((oldValue[i])); //
create y coordinate
vertex(x, y); // plot vertices
}
endShape(); // end shape
/* second sweep */
fill(0,110,0);
beginShape();
for (int i = 0; i < 180; i++) {
x = radius + cos(radians((180+i)))*(newValue[i]);
y = radius + sin(radians((180+i)))*(newValue[i]);
vertex(x, y);
}
endShape();
/* average */
fill(0,170,0);
beginShape();
for (int i = 0; i < 180; i++) {
x = radius + cos(radians((180+i)))*((newValue[i]
+oldValue[i])/2); // create average
y = radius + sin(radians((180+i)))*((newValue[i]
+oldValue[i])/2);
vertex(x, y);
}
endShape();
/* if after first 2 sweeps, highlight motion with red circle*/
if (firstRun >= 360) {
stroke(150,0,0);
strokeWeight(1);
noFill();
for (int i = 0; i < 180; i++) {
if (oldValue[i] - newValue[i] > 35 || newValue[i] -
oldValue[i] > 35) {
x = radius + cos(radians((180+i)))*(newValue[i]);
y = radius + sin(radians((180+i)))*(newValue[i]);
ellipse(x, y, 10, 10);
}
}
}
/* set the radar distance rings and out put their values, 50,
100, 150 etc.. */
for (int i = 0; i <=6; i++){
noFill();
strokeWeight(1);
stroke(0, 255-(30*i), 0);
ellipse(radius, radius, (100*i), (100*i));
fill(0, 100, 0);
noStroke();
text(Integer.toString(radarDist+50), 380, (305-radarDist),
50, 50);
radarDist+=50;
}
radarDist = 0;
/* draw the grid lines on the radar every 30 degrees and write
their values 180, 210, 240 etc.. */
for (int i = 0; i <= 6; i++) {
strokeWeight(1);
stroke(0, 55, 0);
line(radius, radius, radius + cos(radians(180+(30*i)))*w,
radius + sin(radians(180+(30*i)))*w);
fill(0, 55, 0);
noStroke();
if (180+(30*i) >= 300) {
text(Integer.toString(180+(30*i)), (radius+10) +
cos(radians(180+(30*i)))*(w+10), (radius+10) +
sin(radians(180+(30*i)))*(w+10), 25,50);
} else {
text(Integer.toString(180+(30*i)), radius +
cos(radians(180+(30*i)))*w, radius + sin(radians(180+(30*i)))*w,
60,40);
}
}
/* Write information text and values. */
noStroke();
fill(0);
rect(350,402,800,100);
fill(0, 100, 0);
text("Grados: "+Integer.toString(degree), 100, 380, 100, 50);
// use Integet.toString to convert numeric to string
as text() only outputs strings
text("Distancia: "+Integer.toString(value), 100, 400, 100,
50); // text(string, x, y, width, height)
//text("www.tuelectronica.es", 540, 380, 250, 50);
fill(0);
rect(70,60,150,100);
fill(0, 100, 0);
text("Screen Key:", 100, 50, 150, 50);
fill(0,50,0);
rect(30,53,10,10);
text("Primer barrido", 115, 70, 150, 50);
fill(0,110,0);
rect(30,73,10,10);
text("Segundo barrido", 115, 90, 150, 50);
fill(0,170,0);
rect(30,93,10,10);
text("Promedio", 115, 110, 150, 50);
noFill();
stroke(150,0,0);
strokeWeight(1);
ellipse(29, 113, 10, 10);
fill(150,0,0);
text("Movimiento", 115, 130, 150, 50);
}
/* get values from serial port */
void serialEvent (Serial myPort) {
String xString = myPort.readStringUntil(lf); // read the
serial port until a new line

if (xString != null) { // if theres data in between the


new lines
xString = trim(xString); // get rid of any whitespace just
in case
String getX = xString.substring(1,
xString.indexOf("V")); // get the value of the servo position
String getV = xString.substring(xString.indexOf("V")+1,
xString.length()); // get the value of the sensor reading
degree = Integer.parseInt(getX); // set the values to
variables
value = Integer.parseInt(getV);
oldValue[degree] = newValue[degree]; // store the values in
the arrays.
newValue[degree] = value;
/* sets a counter to allow for the first 2 sweeps of the
servo */
firstRun++;
if (firstRun > 360) {
firstRun = 360; // keep the value at 360
}
}
}

/* Arduino Control House By: http://www.elprofegarcia.com/


.... Contorl digital on/off del pin 13 al pin 6
.... Dimer de los Pin 3 y 5
.... Control de Servo por PIN 4
.... Lectura analoga del Puerto AO

Conexion del Modulo Bluetooth al Arduino


usando Pin 0 y 1
Componentes conprados en la tienda: http://www.dinastiatecnologica.com/
*/

#include <Servo.h>
Servo servo1; // Crea el servo1 con las librerias de Servo.h

int estado=0;
int retardo=100;
int analogo=0;

void setup(){
servo1.attach(4);
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
delay(1000);
}
void loop(){
if(Serial.available()>0){ // Si el puerto serie esta habilitadp
estado = Serial.read(); // Lee lo que llega por el puerto Serie
}

if(estado== 'a'){ // on/off de los pin 13 al pin 6


digitalWrite(13,HIGH);
}
if(estado== 'b' ){
digitalWrite(13,LOW);
}
if(estado== 'c'){
digitalWrite(12,HIGH);
}
if(estado== 'd' ){
digitalWrite(12,LOW);
}
if(estado== 'e'){
digitalWrite(11,HIGH);
}
if(estado== 'f' ){
digitalWrite(11,LOW);
}
if(estado== 'g' ){
digitalWrite(10,HIGH);
}
if(estado== 'h' ){
digitalWrite(10,LOW);
}
if(estado== 'i' ){
digitalWrite(9,HIGH);
}
if(estado== 'j' ){
digitalWrite(9,LOW);
}
if(estado== 'k' ){
digitalWrite(8,HIGH);
}
if(estado== 'l' ){
digitalWrite(8,LOW);
}
if(estado== 'm' ){
digitalWrite(7,HIGH);
}
if(estado== 'n' ){
digitalWrite(7,LOW);
}
if(estado== 'o' ){
digitalWrite(6,HIGH);
}
if(estado== 'p' ){
digitalWrite(6,LOW);
}
if(estado== 'A' ){ // Movimiento del SERVO
servo1.write(0);
}
if(estado== 'B' ){
servo1.write(90);
}
if(estado== 'C' ){
servo1.write(180);
}

if(estado=='s'){ // Dimer 1 conectado al pin 5


analogWrite(5,0);
}

if(estado=='t'){
analogWrite(5,3);
}
if(estado=='u'){
analogWrite(5,8);
}
if(estado=='v'){
analogWrite(5,20);
}
if(estado=='w'){
analogWrite(5,30);
}
if(estado=='x'){
analogWrite(5,60);
}
if(estado=='y'){
analogWrite(5,125);
}
if(estado=='z'){
analogWrite(5,255);
}

if(estado=='1'){ // Dimer 2 conectado al pin 3


analogWrite(3,0);
}

if(estado=='2'){
analogWrite(3,3);
}
if(estado=='3'){
analogWrite(3,8);
}
if(estado=='4'){
analogWrite(3,20);
}
if(estado=='5'){
analogWrite(3,30);
}
if(estado=='6'){
analogWrite(3,60);
}
if(estado=='7'){
analogWrite(3,125);
}
if(estado=='8'){
analogWrite(3,255);
}

if(estado=='q'){ // envia el valor leido del puerto analogo A0


analogo=analogRead(A0);
Serial.print(analogo);
Serial.println("°C");
delay (retardo);
estado=0;
}
delay(retardo);
}
/* Arduino Control Car V2 By: El Profe Garcia
ARDUINO L293D(Puente H)
5 10
6 15
9 7
10 2
5V 1, 9, 16
GND 4, 5, 12, 13

El motor 1 se conecta a los pines 3 y 6 del Puente H


El motor 2 se conecta a los pines 11 y 14 del Puente H

La fuente de alimentacion de los Motores se conecta a tierra y


el positivo al pin 8 del puennte H.

Conexion del Modulo Bluetooth HC-06 y el Arduino


ARDUINO Bluetooth HC-06
0 (RX) TX
1 (TX) RX
5V VCC
GND GND
!!Cuidado!! Las conexiones de TX y RX al modulo Bluetooth deben estar
desconectadas
en el momento que se realiza la carga del codigo (Sketch) al Arduino.

Conexion Sensor Ultrasonido HC-SR04


ARDUINO Ultrasonido HC-SR04
2 Echo
3 Trig
5V VCC
GND Gnd

Conexion Servo SG90


ARDUINO Ultrasonido HC-SR04
11 Signal
5V VCC
GND Gnd
*/

#include <Servo.h> // Incluye la libreria Servo


Servo servo1; // Crea el objeto servo1 con las
caracteristicas de Servo

int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'c'; // inicia detenido

int pecho = 2; // define el pin 2 como (pecho) para el Ultrasonido


int ptrig = 3; // define el pin 3 como (ptrig) para el Ultrasonido
int duracion, distancia; // para Calcular distacia

void setup() {
Serial.begin(9600); // inicia el puerto serial para comunicacion con el
Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);

pinMode(pecho, INPUT); // define el pin 2 como entrada (pecho)


pinMode(ptrig,OUTPUT); // define el pin 3 como salida (ptrig)
pinMode(13,OUTPUT);

servo1.attach(11,660,1400); // Asocia el servo1 al pin 11, define el min


y max del ancho del pulso
// eso depende del fabricante del servo
}

void loop() {

if(Serial.available()>0){ // lee el bluetooth y almacena en estado


estado = Serial.read();
}
if(estado=='a'){ // Boton desplazar al Frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
if(estado=='b'){ // Boton IZQ
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
}
if(estado=='c'){ // Boton Parar
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='d'){ // Boton DER
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}

if(estado=='e'){ // Boton Reversa


analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(derB, vel);
analogWrite(izqB, vel);
}

if (estado =='f'){ // Boton ON, se mueve sensando distancia

digitalWrite(ptrig, HIGH); // genera el pulso de trigger por 10us


delay(0.01);
digitalWrite(ptrig, LOW);

duracion = pulseIn(pecho, HIGH); // Lee el tiempo del Echo


distancia = (duracion/2) / 29; // calcula la distancia en
centimetros
delay(10);

if (distancia <= 15 && distancia >=2){ // si la distancia es menor de


15cm
digitalWrite(13,HIGH); // Enciende LED

analogWrite(derB, 0); // Parar los motores por 200 mili


segundos
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
delay (200);

analogWrite(derB, vel); // Reversa durante 500 mili segundos


analogWrite(izqB, vel);
delay(500);

analogWrite(derB, 0); // Girar durante 1100 milisegundos


analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
delay(600);

digitalWrite(13,LOW);
}
else{ // Si no hay obstaculos se desplaza al
frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
}
if(estado=='g'){ // Boton SER, activa el Servomotor
servo1.write(30); // Gira el servo a 30 grados
delay(1000); // Espera 1000 mili segundos a que el
servo llegue a la posicion

servo1.write(90); // Gira el servo a 90 grados


delay(700); // Espera 700 mili segundos a que el
servo llegue a la posicion

servo1.write(150); //Gira el servo a 150 grados


delay(700);
}

if(estado=='h'){ //Programacion de los botones 13-10-9-6-5


digitalWrite(13,1);
}
if(estado=='m'){
digitalWrite(13,0);
}
if(estado=='i'){
digitalWrite(derB,1);
}
if(estado=='n'){
digitalWrite(derB,0);
}
if(estado=='j'){
digitalWrite(derA,1);
}
if(estado=='o'){
digitalWrite(derA,0);
}
if(estado=='k'){
digitalWrite(izqB,1);
}
if(estado=='p'){
digitalWrite(izqB,0);
}
if(estado=='l'){
digitalWrite(izqA,1);
}
if(estado=='q'){
digitalWrite(izqA,0);
}

}
Programa
final domotica
#include <Servo.h>

Servo servo1; // Crea el servo1 con las librerias de Servo.h

int izqA = 5;

int izqB = 6;

int derA = 9;

int derB = 10;

int vel = 255; // Velocidad de los motores (0-255)

int estado = 'b'; // inicia detenido

int retardo=100;

int analogo=0;

int T = 1000;

void setup() {

Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth

servo1.attach(4);

pinMode(derA, OUTPUT);

pinMode(derB, OUTPUT);

pinMode(izqA, OUTPUT);

pinMode(izqB, OUTPUT);

pinMode(13,OUTPUT);
pinMode(12,OUTPUT);

pinMode(11,OUTPUT);

pinMode(8,OUTPUT);

pinMode(7,OUTPUT);

pinMode(4,OUTPUT);

pinMode(3,OUTPUT);

pinMode(2,OUTPUT);

delay(100);

void loop() {

if(Serial.available()>0){ // Si el puerto serie esta habilitadp

estado = Serial.read(); // Lee lo que llega por el puerto Serie

if(estado== 'o' ){

digitalWrite(8, HIGH);

delay(T);

digitalWrite(8, LOW);

delay(T);

if(estado== 'k' ){

digitalWrite(8, LOW);

if(Serial.available()>0){ // lee el bluetooth y almacena en estado

estado = Serial.read();

if(estado== 'd'){ // on/off de los pin 13 al pin 6

digitalWrite(13,HIGH);
}

if(estado== 'e' ){

digitalWrite(13,LOW);

if(estado== 'f'){

digitalWrite(12,HIGH);

if(estado== 'g' ){

digitalWrite(12,LOW);

if(estado== 'h'){

digitalWrite(11,HIGH);

if(estado== 'i' ){

digitalWrite(11,LOW);

if(estado== 'l' ){

digitalWrite(7,HIGH);

if(estado== 'm' ){

digitalWrite(7,LOW);

if(estado== 'n' ){

digitalWrite(2,HIGH);

if(estado== 'p' ){

digitalWrite(2,LOW);

if(estado=='1'){ // Dimer 2 conectado al pin 3


analogWrite(3,0);

if(estado=='2'){

analogWrite(3,3);

if(estado=='3'){

analogWrite(3,8);

if(estado=='4'){

analogWrite(3,20);

if(estado=='5'){

analogWrite(3,30);

if(estado=='6'){

analogWrite(3,60);

if(estado=='7'){

analogWrite(3,125);

if(estado=='8'){

analogWrite(3,255);

if(estado== 'A' ){ // Movimiento del SERVO

servo1.write(0);

if(estado== 'B' ){

servo1.write(90);

if(estado== 'C' ){
servo1.write(160);

if(estado=='a'){ // Boton desplazar al Frente

analogWrite(derB, 0);

analogWrite(derA, vel);

if(estado=='b'){ // Boton Parar

analogWrite(derB, 0);

analogWrite(izqB, 0);

analogWrite(derA, 0);

analogWrite(izqA, 0);

if(estado=='c'){ // Boton Reversa

analogWrite(derA, 0);

analogWrite(derB, vel);

if(estado=='q'){ // Boton desplazar al Frente

analogWrite(izqB, 0);

analogWrite(izqA, vel);

if(estado=='s'){ // Boton Reversa

analogWrite(izqA, 0);

analogWrite(izqB, vel);

if(estado=='r'){ // envia el valor leido del puerto analogo A0

analogo=analogRead(A0);

Serial.print(analogo);
Serial.println("°C");

delay (retardo);

estado=0;

delay(retardo);

Potrebbero piacerti anche