Show Posts
Pages: [1] 2 3
1  Products / Arduino Yún / Re: Problems with HTTP GET method on: August 30, 2014, 12:40:08 pm
I solved this.

There were SRAM problems, I had to move some variables to a .csv in a SDCard...

Thanks anyway!
2  International / Software / Problema con Arduino Yun y HTTP GET on: August 24, 2014, 03:14:34 pm
Hola!

Estoy intentando crear un programa que acepte GET's de HTTP mediante YunServer, YunClient y HttpClient. Os dejo el programa para descargar que es demasiado largo para copiar aquí.

El problema es el siguiente: funciona todo bien hasta el momento que tiene que "esperarse" a recibir una peticion GET desde un servidor. Cuando la recibe, simplemente se queda congelado (linea 140 del codigo, donde "while(!setup_OK)").

Para intentar saber donde radica el problema, he copiado esa parte y la funcion correspondiente ("llegir_curls()") en otro programa, y..... FUNCIONA!

Osea, que con el programa entero esa parte no funciona, pero separada si! He pensado que sea que no tenga memoria (al cargar me salta el aviso de Low memory.........), porque no se me ocurre nada más.

Cometo algun fallo en algun sitio? Me estoy volviendo loco...

Muchas gracias!
3  Products / Arduino Yún / Problems with HTTP GET method on: August 24, 2014, 02:00:23 pm
Hi everyone.

I'm trying to develop a program with an Arduino Yun which accepts HTTP GET method (and answer with more GET). I attach the code (too large to copy here...)

My problem is that all works good till the Arduino waits for the GET of "setup_OK" (line 140). When I send a GET curl, it just freezes.

I tried to "debug" that part copying it in another program and load it, and IT WORKS!! I don't know why. The whole program does not work, but the part supposed to fail works perfectly in a new program.

Can someone help me?? Thanks in advance!

Albert
4  International / Software / Re: Ayuda librería mpu5060.h on: January 12, 2014, 07:22:20 pm
Hola carlos,

Te recomiendo primero hacer un programa base que te muestre por pantalla (serie) los valores de cada eje del acelerometro y giroscopio.

Con getMotion6 obtienes las 6 lecturas (3 aceleraciones y 3 velocidades angulares), a partir de aquí te tocará calibrar el mpu (hay varias funciones en la librería que lo permiten, offsets, precision, etc) para que trabaje como tu quieras.

Cualquier problema, estoy trabajando en un quadcoptero con justamente ese MPU, osea que puedo ayudarte si hace falta, pero creo que será mejor que primero intentes tu, ya que así aprendes más.

Saludos!
5  International / Software / Re: PROBLEMA CON FLOAT on: December 23, 2013, 07:49:02 am
Cuando dices que te sale 0 es en el monitor Serial??

Para que necesitas esto?? Si es en el monitor, busca que hay creadas ya algunas maneras para mostrar floats "enteros" por monitor.

Saludos
6  International / Software / Re: Recibir numeros tres o mas digitos en mi arduino via serial on: December 18, 2013, 07:12:47 am
Tienes varias opciones: o montarte siempre el mismo mensaje, o montarte un "protocolo" de "inicio-fin" de mensaje, o esperar a recibir la letra, etc.

Por ejemplo, dices que tienes que recibir desde arduino diferentes mensajes. Las 3 soluciones serían:

- Siempre el  mismo mensaje: Letra+ 3 numeros. p.e. A123, A045, B003, etc..... (siempre letra+3 numeros del angulo, rellenando con 0).
- Montar un protocolo de "inicio-fin": crear un inicio de linia y un final de linia, para saber cuando empieza y acaba el mensaje. p.e Inicio: letra Final: \r Mensaje: A120\r B042\r, etc.....
- Esperar a recibir la letra para saber cuando empieza-acaba. p.e. mandar A123B038A003C093 puedes separarlos por: A123/B038/etc.

No se si me he explicado, piensa cual te va mejor (o cual prefieres) y cualquier cosa vuelve aquí!
7  Using Arduino / Programming Questions / Re: Understanding Bits from a byte (i2c) on: December 10, 2013, 02:54:16 pm
When "counting" bits, we do it like 1, 2, 3, 4, 5, 6, 7 and 8. But bitRead starts at 0, so you are missing 1 to the position you are reading.

So, bit 7 of the datasheet is bit 6 for bitRead.

Look at the reference, bitRead's LSB is 0, not 1, and MSB is 7 (if it's a byte). So bit 7 when "counting" is bit 6 for bitRead.
8  International / Español / Re: Tareas simultaneas on: December 10, 2013, 02:46:52 pm
Solo tienes que insertar el for que inicia el encendido del segundo LED dentro del for que apaga el primero.

Intenta escribirtelo en pseudocódigo primero, a ver si así lo ves más claro. Sino, aquí estamos (tampoco creo que te sea útil que te de el programa directamente, así también aprendes) : )
9  Using Arduino / Programming Questions / Re: On button state change run loop once on: December 02, 2013, 03:09:07 pm
If you use a while loop checking when the button is HIGH in the setup(), it will only run once. You can leave loop() blank.
10  Using Arduino / Programming Questions / Re: Problem with Quadcopter code on: December 01, 2013, 02:40:49 pm
Ok, now it seems to work perfectly.

Thanks!!
11  International / Hardware / Re: duda motor DC y resistencia pull down on: December 01, 2013, 02:16:06 pm
Podríamos decir que "da igual" si está en el positivo o en el negativo. Solo tiene que permitir el paso de esta corriente que se crea en la bobina en el momento de desconectarlo del circuito, negandolo en el sentido contrario (ya que destruiría el circuito!). Es por eso que se usa un diodo, porque solo permite el paso de la corriente hacia un sentido.

No se si me explico
12  International / Hardware / Re: duda motor DC y resistencia pull down on: December 01, 2013, 07:48:31 am
A ver si me explico:

1.- La resistencia de pulldown se usa para fijar una tensión cuando el circuito está en "reposo". Osea, que si el Arduino lee un estado mientras nada cambia, ese valor sea el de tierra. Además, y mucho más importante, las resistencias juegan el papel de limitar la tensión que entrará por un pin de Arduino (o saldrá), usando la Ley de Ohm (corriente máxima de unos 40mA). La contraria a la resistencia de pulldown es la de pullup: esta cambia el estado lógico normal (osea, un 0 en arduino es "activado" y un 1 en arduino es "desactivado" en el circuito).

2.- El diodo se usa para proteger el circuito, ya que el motor incluye una bobina. Esta bobina se carga con un campo magnético al pasar corriente por ella. Cuando esta corriente deja de aplicarse, el campo magnético sucumbe, creando una corriente residual en esta bobina, de dirección contraria a la que habías aplicado tu previamente. Eso provoca muchos problemas en los circuitos. Mediante el diodo se evita que esta corriente residual penetre en tu circuito de control y dañe los componentes.

No se si se entiende todo bien, cualquier duda que te haya quedado (o aparecido nueva) no dudes en preguntar.

Saludos
13  Using Arduino / Programming Questions / Re: Problem with Quadcopter code on: November 27, 2013, 07:33:02 pm
Code:
_Left_Front_M.attach(_Left_Front_M_pin);
_Right_Front_M.attach(_Right_Front_M_pin);
_Left_Back_M.attach(_Left_Back_M_pin);
_Right_Back_M.attach(_Right_Back_M_pin);
The hardware is not ready when your constructor is called.

You, like everybody else, need a begin() method where the hardware setup is done, called in the setup() function.

Mmmm... So I need a new function to "attach" the servos in spite of doing it in the constructor, and call that function in setup()?

Ok thank you. I'm new in this world, gonna try this!
14  Using Arduino / Programming Questions / Re: Problem with Quadcopter code on: November 27, 2013, 05:38:36 pm
I simply cannot know what is causing this behaviour, because when I acces the "loop" function, it suddenly does that.

I don't know if it's something caused with the timers of wire or I2C, because separately the library I developed works greatly.

Or maybe I simply use the "updateSpeeds" function I developed too fast or too slow...
15  Using Arduino / Programming Questions / Problem with Quadcopter code on: November 27, 2013, 03:59:58 pm
Hello!

I'm trying to develop my own quadcopter code (with libraries, etc), but I have arrived to some kind of problem.

Here is all what I did:

Quadrotor.cpp:
Code:
#include <Arduino.h>
#include <Servo.h>
#include <Quadrotor.h>



/* Default constructor assigns Digital Pins 6,7,8,9 as
** Pin 6 = Left Front Motor
** Pin 7 = Right Front Motor
** Pin 8 = Left Back Motor
** Pin 9 = Right Back Motor
*/
QUADROTOR::QUADROTOR()
{
_Left_Front_M_pin = 6;
_Right_Front_M_pin = 7;
_Left_Back_M_pin = 8;
_Right_Back_M_pin = 9;
_Left_Front_M.attach(_Left_Front_M_pin);
_Right_Front_M.attach(_Right_Front_M_pin);
_Left_Back_M.attach(_Left_Back_M_pin);
_Right_Back_M.attach(_Right_Back_M_pin);
}

/* If other pins want to be used, use this constructor
** to pass the pins of each motor
*/
QUADROTOR::QUADROTOR(int Left_Front_M_pin, int Right_Front_M_pin, int Left_Back_M_pin, int Right_Back_M_pin)
{
_Left_Front_M_pin = Left_Front_M_pin;
_Right_Front_M_pin = Right_Front_M_pin;
_Left_Back_M_pin = Left_Back_M_pin;
_Right_Back_M_pin = Right_Back_M_pin;
_Left_Front_M.attach(_Left_Front_M_pin);
_Right_Front_M.attach(_Right_Front_M_pin);
_Left_Back_M.attach(_Left_Back_M_pin);
_Right_Back_M.attach(_Right_Back_M_pin);
}

/* Use this to configure one ESC. Use configureAllESC()
** in order to configure the four ESC at once
*/
void QUADROTOR::configureESC(int ESC_pin)
{
  Serial.println("Program begin...");
  Serial.println("This program will calibrate the ESC.");
  _ESC.attach(ESC_pin);
delay(10);
  Serial.println("Now writing maximum output.");
  Serial.println("Turn on power source, then wait 2 'beeps' and press any key.");
  // Send max output
  _ESC.writeMicroseconds(MAX_SIGNAL);
delay(10);
  // Wait for input
  while (!Serial.available());
  Serial.read();
  // Send min output
Serial.println("Sending minimum output");
Serial.println("Wait until battery cell number 'beeps' and a long at end, then press a key..");
_ESC.writeMicroseconds(MIN_SIGNAL);
delay(10);
while (!Serial.available());
  Serial.read();
Serial.println("The ESC has been configured successfully");
}

void QUADROTOR::configureAllESC()
{
  Serial.println("Program begin...");
  Serial.println("This program will calibrate the four ESC at once.");
Serial.println("Attach the ESC to the pins used when calling the constructor");
Serial.println("with the power source disconnected, and press any key + INTRO.");
Serial.println("(in case of using the default constructor, use pins 6,7,8,9");
while (!Serial.available());
  Serial.read();
Serial.println("Now writing maximum output.");
  Serial.println("Turn on power source, then wait 2 'beeps' and press a key.");
_Left_Front_M.writeMicroseconds(MAX_SIGNAL);
delay(10);
_Right_Front_M.writeMicroseconds(MAX_SIGNAL);
delay(10);
_Left_Back_M.writeMicroseconds(MAX_SIGNAL);
delay(10);
_Right_Back_M.writeMicroseconds(MAX_SIGNAL);
delay(10);
while (!Serial.available());
  Serial.read();
Serial.println("Wait until battery cell number 'beeps' and a long at end, then press a key.");
_Left_Front_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
_Right_Front_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
_Left_Back_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
_Right_Back_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
while (!Serial.available());
  Serial.read();
Serial.println("The four ESC has been configured successfully");
}
/* Write min_signal to the ESC in order to make it
** start the control of the motors
*/
void QUADROTOR::initiate()
{
_Left_Front_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
_Right_Front_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
_Left_Back_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
_Right_Back_M.writeMicroseconds(MIN_SIGNAL);
delay(10);
}

void QUADROTOR::updateSpeeds(int speed_M1, int speed_M2, int speed_M3, int speed_M4)
{
_Left_Front_M.writeMicroseconds(speed_M1);
delay(5);
_Right_Front_M.writeMicroseconds(speed_M2);
delay(5);
_Left_Back_M.writeMicroseconds(speed_M3);
delay(5);
_Right_Back_M.writeMicroseconds(speed_M4);
delay(5);
}

Quadrotor.h:
Code:
#ifndef _QUADROTOR_H_
#define _QUADROTOR_H_

#include <Servo.h>
#include <Arduino.h>

/* Change this values if another range of
** work is wanted. Keep in mind that this
** values are MAX and MIN, so bigger or
** lower values for speed in the main program
** will result in errors while flying!!!
*/
#define MAX_SIGNAL 2000
#define MIN_SIGNAL 800


class QUADROTOR {

public:
QUADROTOR();
QUADROTOR(int Left_Front_M_pin, int Right_Front_M_pin, int Left_Back_M_pin, int Right_Back_M_pin);
void configureESC(int ESC_pin);
void configureAllESC();
void initiate();
void takeOff();
void land();
void updateSpeeds(int speed_M1, int speed_M2, int speed_M3, int speed_M4);

private:
int _Left_Front_M_pin;
int _Right_Front_M_pin;
int _Left_Back_M_pin;
int _Right_Back_M_pin;
int _pin;
Servo _ESC;
Servo _Left_Front_M;
Servo _Right_Front_M;
Servo _Left_Back_M;
Servo _Right_Back_M;

};

#endif

Program:
Code:
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
#include "Quadrotor.h"
#include "Servo.h"


MPU6050 accelgyro;

int16_t ax, ay, az;
float axf, ayf, azf;

int speed_M1;
int speed_M2;
int speed_M3;
int speed_M4;
//{FL, FR, BL, BR} refer to the schematics at top
QUADROTOR Quadcopter;

void setup()
{
    Wire.begin();
    Serial.begin(38400);

    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();
    Serial.println("Testing device connections...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
   
    Serial.println("Updating internal sensor offsets...");
    accelgyro.setXAccelOffset(-1480);
    accelgyro.setYAccelOffset(-310);
    accelgyro.setZAccelOffset(1300);
    Serial.println("Offsets updated. Press a key to continue");
    delay(100);
    Quadcopter.configureAllESC();
    Quadcopter.initiate();
}

void loop()
{
    accelgyro.getAcceleration(&ax, &ay, &az);
    axf = (float)ax;
    ayf = (float)ay;
    azf = (float)az;
    accel_conversion(&axf, &ayf, &azf);
   
    speed_M1 = 1000 - ayf*20; // - pitch*Pp + roll*Pr
    speed_M2 = 1000 - axf*20; // - pitch*Pp - roll*Pr
    speed_M3 = 1000 + axf*20; // + pitch*Pp + roll*Pr
    speed_M4 = 1000 + ayf*20; // + pitch*Pp - roll*Pr

    Serial.print("Motor 1: ");
    Serial.print(speed_M1);
    Serial.print(" Motor 2: ");
    Serial.print(speed_M2);
    Serial.print(" Motor 3: ");
    Serial.print(speed_M3);
    Serial.print(" Motor 4: ");
    Serial.println(speed_M4);
    Serial.print("ax: ");
    Serial.print(axf);
    Serial.print(" ay: ");
    Serial.println(ayf);
    Quadcopter.updateSpeeds(speed_M1, speed_M2, speed_M3, speed_M4);
}

void accel_conversion(float* x, float* y, float* z)
{
    *x = *x/16384.0;
    *y = *y/16384.0;
    *z = *z/16384.0;
}
(I know all can be optimized, but first I want to have the library working good...)

It all compiles and uploads greatly, but when the loop starts, suddenly the Motor goes up to max speed and turns off.

Is there any conflict within the libraries?? I'm stucked here  smiley-confuse
Pages: [1] 2 3