Go Down

Topic: Arduino Controller android app (Read 61787 times) previous topic - next topic

RichieC

Hi Marque

Thanks for the app I have downloaded it and with your sketch I would like to intranet enable my heating system. I have my heating system running on Arduino Uno for 6 months now I have copied the sketch below.
What I would like to do is change some of the values in the program from your app, is this possible? I also want to be able to turn on the gas boiler form your app, which if I understand correctly is what your app could do now?

As you will see from my sketch my heating system is be-spoke!! I have two separate systems

1) I have two heat sources which run into a tank called a Neutralizer I use the Arduino to control the heat dissipation via heating pump, under floor heating pump, and over temperature control.

2) I use the Arduino to control the hot water system, a Honeywell valve and a contactor for my immersion heater

Both system used temperature sensors. The next stage is to add a circulating pump to pump hot water the top of the tankto the bottom of the tank. This is the last peice of code in the sketch but I haven't installed the pump or bottom cylinder sensor yet.

Do you think you can help???

Thanks in advance

Rich



RichieC

Quote

//declare variables
int imm = 65;
int coil = 53;
int flow = 47;
int und = 62;
int mix = 57;
int hyst = 3;
int hyst1 =6;
int hyst2 =10;

float tempTop;
float tempMid;
float tempBot;
float tempFlow;
float tempRet;
float tempSol;

int tempPin = 0;
int tempPin1 = 1;
int tempPin2 = 2;
int tempPin3 = 3;
int tempPin4 = 4;

int NeutValve = 2; // Valve from neutralizer to Cylinder
int MPump = 3; // Mixer Pump
int HeatPump = 4; // Central Heating Main Pump
int ImmOn = 6; //Relay confirming Immersion running
int GasBoiler = 7; // Gas boiler run output
int UndFlor = 8; // Underfloor heating run output
int GasBurn = 9; // Gas Boiler run contact.
int Imm = 10; // Immersion Heater control
int FlorLiv = 11; // Underfloor Heating Living Room Output

void setup()

{
Serial.begin(9600); //opens serial port, sets data rate to 9600 bps
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, INPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,INPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop()

{
Serial.println("");
tempTop = analogRead(tempPin);           //read the value from the Cylinder Top sensor
tempTop = (5.0 * tempTop * 100.0)/1024.0+6;  //convert the analog data to temperature
Serial.print((byte)tempTop);
Serial.println(" *C Cylinder Top");//send the data to the computer

tempMid = analogRead(tempPin1);           //read the value from the sensor Cylinder Middle
tempMid = (5.0 * tempMid * 100.0)/1024.0+8;  //convert the analog data to temperature
Serial.print((byte)tempMid);
Serial.println(" *C Cylinder Middle");//send the data to the computer

//tempBot = analogRead(tempPin2);           //read the value from the sensor Cylinder Bottom
//tempBot = (5.0 * tempBot * 100.0)/1024.0;  //convert the analog data to temperature
//Serial.print((byte)tempBot);
//Serial.println(" *C Cylinder Bottom");//send the data to the computer

tempFlow = analogRead(tempPin3);           //read the value from the sensor Neutraziler Flow Temp
tempFlow = (5.0 * tempFlow * 100.0)/1024.0;  //convert the analog data to temperature
Serial.print((byte)tempFlow);
Serial.println(" *C Flow Temp");//send the data to the computer

tempRet = analogRead(tempPin4);           //read the value from the sensor Return Temp
tempRet = (5.0 * tempRet * 100.0)/1024.0;  //convert the analog data to temperature
Serial.print((byte)tempRet);
Serial.println(" *C Return Temp");//send the data to the computer

int ImmOn1 = digitalRead (ImmOn);
Serial.print (" Immersion On ");
Serial.println(ImmOn1);

int Pump1 = digitalRead (HeatPump);
Serial.print (" Central Heating Pump On ");
Serial.println(Pump1);

int Pump2 = digitalRead (UndFlor);
Serial.print ("Underfloor Heating ON ");
Serial.println(Pump2);

int Coil1 = digitalRead (NeutValve);
Serial.print ("Water Heating Coil Reversed ");
Serial.println(Coil1);

if (Imm == HIGH) Serial.print ("IMM Contact ");
else Serial.println (" IMM No Contact ");

int Mix1 = digitalRead (MPump);
Serial.print ("mixer pump");
if (Mix1 == HIGH) Serial.print ("Mixing");
else Serial.print(" no mix");

delay(2000);                           //wait one second before sending new data
// Heating Circulating pump

if (tempRet > flow + hyst1)
digitalWrite(HeatPump, HIGH);

if (tempRet < flow - hyst1)
digitalWrite(HeatPump, LOW);

// Underfloor Heating Control
if (tempFlow > (und + hyst))
digitalWrite (UndFlor, HIGH);

if (tempFlow < (und - hyst2))
digitalWrite (UndFlor, LOW);

//Over Temperature Protection
if (tempFlow > 85)
digitalWrite (FlorLiv, HIGH);

if (tempFlow < 65)
digitalWrite (FlorLiv, LOW);

// Neutralizer Valve Control
if(tempTop >(coil + hyst)) // Neutralizer to Cylinder Valve Close Temperature
digitalWrite(NeutValve, HIGH);

if (tempTop <(coil - hyst)) // Neutralizer to Cylinder Open Temperature
digitalWrite(NeutValve, LOW);

// Immersion Control
if (tempTop >( imm + hyst)) // Immersion Temperature Off
digitalWrite(Imm,LOW );

else if (tempTop <( imm - hyst)) // Immersion on Temperature
digitalWrite(Imm, HIGH);

// Cylinder Circulating Pump Control

if (tempTop < (mix + hyst) && (ImmOn == HIGH))

digitalWrite (MPump, HIGH);

if (tempTop >(mix - hyst) || (ImmOn == LOW))

digitalWrite (MPump, LOW);

}



Alesz

Hi Marque

Thanks for the excellent app very useful and easy to adapt to my needs.
Is it possible to make any login to access to the application for security reason (I like close and open a door, switch off on alarm, ..).
And is it possible in settings button for reset change to button for save configuration, because I use this app to access to different arduino board with different functionality.

thx

Thanks in advance

Lesz

RichieC

HI Marque

Is it possible through the Arduino Sketch to alter the size of the window at the top of the page?

Or is it pre programmed in to the Android App?

Thanks

Rich

marque

@ Alesz & RichieC,
Thanks for your input. Both functions need adjustments to sketch and application and will come back in future versions.

Micke

Hello Marque,

I am very happy that I found your project. I am working at my own project and have some problems. First I want to suggest my project.

I use an arduino mega to read out some sensors. The values I want to send to my android phone. I tried to use and adapt another project working with the same WifiShield(RedFly WifiShield) (you can find this project here: http://android-arduino-redfly.npage.de/)  but there I got the problem that i only can send small values(0...255). For my project I need to send bigger values.

Because I am using the RedFly WifiShield to connect to the LAN I have to use other libraries in my sketch so that I can't copy your code. I tried to get your code working with my WifiShield but there are some problems I don't understand.
I attached my code named ARDUINO_CONTROLLER.ino because when I post it the post exceeds the maximum allowed length(9500 characters).

Errorlog:
Quote

ARDUINO_CONTROLLER:17: error: 'RedFlyServer' does not name a type
ARDUINO_CONTROLLER.ino: In function 'void checkclient()':
ARDUINO_CONTROLLER:78: error: 'server' was not declared in this scope
ARDUINO_CONTROLLER:86: error: 'sentheader' was not declared in this scope
ARDUINO_CONTROLLER:137: error: 'action' was not declared in this scope
ARDUINO_CONTROLLER:154: error: 'action' was not declared in this scope
ARDUINO_CONTROLLER.ino: In function 'void action(int, RedFlyClient (*)())':
ARDUINO_CONTROLLER:176: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:177: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:182: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:183: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:188: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:189: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:194: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:195: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:200: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:201: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:206: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:207: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:212: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:213: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'



I am sure that the follwing code is right because it works with the other project. This setup connects the Arduino Mega with RedFly Shield to my Wifi.
Quote

void setup()
{
 uint8_t ret;
 //init the WiFi module on the shield
 ret = RedFly.init();
 if(ret)
 {
   debugoutln("INIT ERR"); //there are problems with the communication between the Arduino and the RedFly
 }
 else
 {
   //scan for wireless networks (must be run before join command)
   RedFly.scan();

   //join network
   //ret = RedFly.join("WLAN-SSID", "passwort123", INFRASTRUCTURE);
   ret = RedFly.join("Connectify-arduinopc", "12345678", INFRASTRUCTURE);
   if(ret)
   {
     debugoutln("JOIN ERR");
     for(;;); //do nothing forevermore
   }
   else
   {
     //set ip config
     ret = RedFly.begin(ip, 0, 0, netmask);
     if(ret)
     {
       debugoutln("BEGIN ERR");
       RedFly.disconnect();
       for(;;); //do nothing forevermore
     }
   }
 }
 Serial.begin(9600); // open the serial connection at 9600bps
}


I attached the RedFly libraries. But I am sure these are the same like the normal HTTPClient library and so on. The only difference is that they are adapted to work with the RedFly Shield.

Can you help me to get your code working with my RedFly Wifi Shield?

Another option for me could be that you give me only the code I need  for arduino to send something to an android phone and the code  I need in the android-app to receive the data. If I understand your project right it's a normal HTTP request needed to send data. I can make HTTP Requests with my arduino and the RedFly Shield.
For Example the following code works with CouchDB.

Code: [Select]

         if(client.connect(server, 5984))
          {
            //make a HTTP request
            //client.print_P(PSTR("GET / HTTP/1.1\r\nHost: "HOSTNAME"\r\n\r\n"));
           
            //Delte Database
            //client.println_P(PSTR("DELETE /test2/ HTTP/1.0"));
            //client.println_P(PSTR("Content-Type: application/json\r\n"));
           
            //Create Database
            //client.println_P(PSTR("PUT /test9/ HTTP/1.0"));
            //client.println_P(PSTR("Content-Type: application/json\r\n"));
             
            //Put a document to the database              THIS DOESN'T WORK           
            /*client.println_P(PSTR("POST /test1/ HTTP/1.0"));
            client.println_P(PSTR("Content-Type: application/json\r\n"));
            client.println_P(PSTR("{"));
            client.println_P(PSTR("\"Subject\":\"I like Plankton\","));
            client.println_P(PSTR("\"Author\":\"Rusty\","));
            client.println_P(PSTR("\"PostedDate\":\"2006-08-15T17:30:12-04:00\","));
            client.println_P(PSTR("\"Tags\":[\"plankton\", \"baseball\", \"decisions\"],"));
            client.println_P(PSTR("\"Body\":\"I decided today that I don't like baseball. I like plankton.\""));
            client.println_P(PSTR("}"));
            */
          }



Thank you in advance!

Micke

hello Marque,

I worked a little bit with my adapted Sketch. I will attach the new Sketch to this post. The new Errorlog is this:
Quote

ARDUINO_CONTROLLER.ino: In function 'void checkclient()':
ARDUINO_CONTROLLER:141: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER:142: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER:143: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER:144: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER:145: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER:146: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER:147: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER:158: error: cannot convert 'RedFlyClient' to 'RedFlyClient (*)()' for argument '2' to 'void action(int, RedFlyClient (*)())'
ARDUINO_CONTROLLER.ino: In function 'void action(int, RedFlyClient (*)())':
ARDUINO_CONTROLLER:180: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:181: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:186: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:187: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:192: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:193: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:198: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:199: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:204: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:205: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:210: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:211: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:216: error: request for member 'print' in 'client', which is of non-class type 'RedFlyClient (*)()'
ARDUINO_CONTROLLER:217: error: request for member 'println' in 'client', which is of non-class type 'RedFlyClient (*)()'

marque


There is a new version of the arduino controller android app available in google play. This app will cost you a beer for my effort but it has a some new features and it will let you costumize it so it looks specialy disigned for your arduino project.

Changes made to this version:
-The size of the webview automaticaly ajusts to the content
-Improved use of resources and battery usage
-URL and IP support (eg. www.mysite.com or 143.34.175.45)
-Custom activity name  (the name you see on the main screen of the app)
-More buttons (32!)
-Buttons are hidden when you dont use them
-Strings can contain all alpha numeric symbols


Arduino Controller Pro can be found in google play.
And the example sketch on dropbox.

 


Alesz

Hi Marque

Thanks for the excellent update, very useful and easy to adapt to my needs.
Suggestion for next update:
- login to access to the application for security reason (switch off on alarm, ..).
- in settings - add button for save profile for save configuration (conf. A, conf B, ..(I use this app to access to different arduino board with different functionality: alarm, control heat pump, lights, ...)

thx

Lesz

marque


Hi Marque

Thanks for the excellent update, very useful and easy to adapt to my needs.
Suggestion for next update:
- login to access to the application for security reason (switch off on alarm, ..).
- in settings - add button for save profile for save configuration (conf. A, conf B, ..(I use this app to access to different arduino board with different functionality: alarm, control heat pump, lights, ...)

thx

Lesz


Profiles willen be implemented in the next version, coming next week.  Login feature is still on the drawingboard.

ruediger64

Hello Marque,
is it possible to control more than one Arduino with different IP-Adresses?
(Home Automation for different Rooms)

thx
Ruediger

marque


Hello Marque,
is it possible to control more than one Arduino with different IP-Adresses?
(Home Automation for different Rooms)

thx
Ruediger


Hi, In the next version there is support for three profiles with diferent ip adresses. I hope to finish it next week.

marque


Now there is a free version with ads as well.


On rooted phones it is already possible to back up your settings by backing up the XML file in data/data/com.marquesoft.arduinocontroller/shared_prefs

marque

#44
Apr 02, 2013, 09:48 pm Last Edit: Apr 02, 2013, 09:53 pm by marque Reason: 1
I received a question in my mail, but i prefer to give support in this forum.
Quote
Hey,

Thanks for making the app I just have one quick question.  I was looking at your example sketch (http://dl.dropbox.com/u/29369544/Arduino%20Controller/ArduinoController/ArduinoController.ino) and I am confused as to where you are sending an html line back to the app?  Can you please point me to the line of code where you send the simple html line that you can view in the browser on the phone?

Thanks, W


Hi W,
Just above setup are the html lines that are send to the android aplication;
Code: [Select]
char content_main_top[] = "<body bgcolor=black><font color=white><center>";
char S1[] = "1 is on" ;
char S2[] = "1 is off" ;
char S3[] = "2 is on";
char S4[] = "2 is off";
char S5[] = "up";
char S6[] = "down";
char S404[] = "Not Found";

The first line sets background `black`, text `white` and allignment `centered`.  The last line is the defaul one so when there is no command recognized.
The rest of the lines can be customised.

They are send in the following code;
Code: [Select]
if (x == 1)
 {client.print (content_main_top);
  client.println(S1);
  Serial.println(S1);


You donĀ“t need to use the static references, you can do the following as well;
Code: [Select]
if (x == 1)
 {client.print (content_main_top);
client.print(" Software version: ");
   client.print(sketchname);
   client.print("<br> ");
   client.print("Free Ram: ");
   client.print(freeRam());
   client.print("<br> ");
   client.print(" System time: ");
   client.print(time);


I hope you get it working! Else, please let me know.

Go Up