viernes, 23 de noviembre de 2012

Proyecto Cosm Temperatura

Los gráficos no funcionan pq los elimine. En el siguiente post subo los nuevos.

Bueno he tenido un poco botado el blog... la verdad es que muy muy botado y no subía nada hace mil años.
Bueno para los que me conocen he estado trabajando como loco para ganar como el orto, la vida del electrónico.

Tengo este nuevo proyecto con un arduino mega y un shild ethernet que están de miedo. El proyecto consiste en un simple sensor de temperatura que envía la info a cosm.com y se almacena hay. Ustedes dirán que mie"#$"# es "cosm.com"  es un servicio gratis M2M en el cual podemos subir info de nuestros dispositivos y hacer simples gráficos de nuestra variable vs. tiempo.

Ese es la temperatura en mi oficina. El sensor es malo y tiene una precisión de +/- 1°C
Lo interesante de esta experiencia es poder ver la info que se acumulado durante el tiempo. Por esto pense en hacer una comparación entre una señal tratada y una sin tratamiento.
El resultado fue este:
La señal cruda o sin tratamiento
El metodo para tratar la señal lo saque de Smoothing de los ejemplos de arduino en la sección analog. Aqui esta el programa completo Smoothing.
/*

  Smoothing

  Reads repeatedly from an analog input, calculating a running average
  and printing it to the computer.  Keeps ten readings in an array and 
  continually averages them.
  
  The circuit:
    * Analog sensor (potentiometer will do) attached to analog input 0

  Created 22 April 2007
  By David A. Mellis  
  modified 9 Apr 2012
  by Tom Igoe
  http://www.arduino.cc/en/Tutorial/Smoothing
  
  This example code is in the public domain.


*/


// Define the number of samples to keep track of.  The higher the number,
// the more the readings will be smoothed, but the slower the output will
// respond to the input.  Using a constant rather than a normal variable lets
// use this value to determine the size of the readings array.
const int numReadings = 10;

int readings[numReadings];      // the readings from the analog input
int index = 0;                  // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average

int inputPin = A0;

void setup()
{
  // initialize serial communication with computer:
  Serial.begin(9600);                   
  // initialize all the readings to 0: 
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
    readings[thisReading] = 0;          
}

void loop() {
  // subtract the last reading:
  total= total - readings[index];         
  // read from the sensor:  
  readings[index] = analogRead(inputPin); 
  // add the reading to the total:
  total= total + readings[index];       
  // advance to the next position in the array:  
  index = index + 1;                    

  // if we're at the end of the array...
  if (index >= numReadings)              
    // ...wrap around to the beginning: 
    index = 0;                           

  // calculate the average:
  average = total / numReadings;         
  // send it to the computer as ASCII digits
  Serial.println(average);   
  delay(1);        // delay in between reads for stability            
}

El programa que ocupe para subir la info a cosm.com es este y tiene que cambiar lo que esta en esta parte

/*#define APIKEY         "YOUR API KEY GOES HERE" // replace your Pachube api key here
#define FEEDID         00000 // replace your feed ID
#define USERAGENT      "My Project" // user agent is the project name
*/
Por los datos de su proyecto cosm.com



/*
  Pachube sensor client with Strings

 This sketch connects an analog sensor to Pachube (http://www.pachube.com)
 using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
 the Adafruit Ethernet shield, either one will work, as long as it's got
 a Wiznet Ethernet module on board.

 This example has been updated to use version 2.0 of the pachube.com API. 
 To make it work, create a feed with two datastreams, and give them the IDs
 sensor1 and sensor2. Or change the code below to match your feed.

 This example uses the String library, which is part of the Arduino core from
 version 0019.  

 Circuit:
 * Analog sensor attached to analog in 0
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 15 March 2010
 modified 9 Apr 2012
 by Tom Igoe with input from Usman Haque and Joe Saavedra
 modified 8 September 2012
 by Scott Fitzgerald

 http://arduino.cc/en/Tutorial/PachubeClientString
 This code is in the public domain.

 */

#include
#include
#include

#define APIKEY "xxxxxxxxxxxxxxxxxxxxxxx"  // replace your Cosm api key here
#define FEEDID xxxxx // replace your feed ID
#define USERAGENT "xxxxxxxx

// assign a MAC address for the ethernet controller.
// fill in your address here:
  byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(192,168,2,10);  //Cambiar por la ip de su shild arduino

// initialize the library instance:
EthernetClient client;

// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(216,52,233,121);      // numeric IP for api.pachube.com
//char server[] = "api.pachube.com";   // name address for pachube API

unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
boolean lastConnected = false;                 // state of the connection last time through the main loop
const unsigned long postingInterval = 5000;  //delay between updates to pachube.com

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // give the ethernet module time to boot up:
  delay(1000);
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // DHCP failed, so use a fixed IP address:
    Ethernet.begin(mac, ip);
  }
}

void loop() {
  // read the analog sensor:
  int sensorReading = analogRead(A0);   
  // convert the data to a String to send it:
  float tmp = ((0.16129*sensorReading)-55);  //linealisacion del sensor de temperatura
  //dataString += sensorReading;
  char buffer[25];
  floatToString(buffer, tmp, 3);
  //floatToString(tmp_stg, tmp, 3);
  String dataString = "sensor1,";  
  dataString += buffer;
  
  // you can append multiple readings to this String if your
  // pachube feed is set up to handle multiple values:
  int otherSensorReading = analogRead(A0);
  dataString += "\nadc,";
  dataString += otherSensorReading;

  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }

  // if you're not connected, and ten seconds have passed since
  // your last connection, then connect again and send data: 
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    sendData(dataString);
  }
  // store the state of the connection for next time through
  // the loop:
  lastConnected = client.connected();
}

// this method makes a HTTP connection to the server:
void sendData(String thisData) {
  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    // send the HTTP PUT request:
    client.print("PUT /v2/feeds/");
    client.print(FEEDID);
    client.println(".csv HTTP/1.1");
    client.println("Host: api.pachube.com");
    client.print("X-pachubeApiKey: ");
    client.println(APIKEY);
    client.print("User-Agent: ");
    client.println(USERAGENT);
    client.print("Content-Length: ");
    client.println(thisData.length());

    // last pieces of the HTTP PUT request:
    client.println("Content-Type: text/csv");
    client.println("Connection: close");
    client.println();

    // here's the actual content of the PUT request:
    client.println(thisData);
  } 
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
  // note the time that the connection was made or attempted:
  lastConnectionTime = millis();
}

Velocidad variable de un motor PAP

Después de tanto pedir me apiadare de sus almas malditas en pena y les he subido el programa de este vídeo.
El programa esta explicado como el poto en el vídeo, pero bueno... es lo que hay.
Este es el esquemático para los que quieran armar el circuito.

El programa completo esta en esta dirección https://www.dropbox.com/sh/ir6f0drjqtwqwox/t08AhE7Byu

Si quieren mas proyectos Suscriban a mi Youtube. https://www.youtube.com/user/chinooxyla 

Mira mis programadores de pic via USB ehacks-chile.blogspot.com

martes, 3 de julio de 2012

Cartel indicador de velocidad.


Hace ya un tiempo realice este proyecto con un modulo GPS y una tarjeta arduino pro. Por encargo de la gente de AVOD system. Tengo entendido que se esta comercializando en Chile, mi país. Buena onda a la gente de AVOD y que les vaya bien con su iniciativa tecnología.