Speech Pod will be a speech-interactive design project that controls switch boards at home. Along with that it includes facilities to control the speech pod with android device and motion sensors of the device.
Speech pod remain stable and maintain the overall automation structure of particular switch board and in advance, it will maintain the automation of full house or office floors.
Speech Pod is nothing but a vast view of future technologies which indeed shows the beginning of brighter and wider side of information technology.
It controls the switch board through various interactions with different smart devices and appliance. One can just order their hope to do particular task which is connected with Speech Pod
In the nut shell ‘Command Speech Pod, It will do it for you’.
2. Project Details
2.1 Basic Objective
Get rid of the pains to reach and operate your switch board. Demand your switches to work on your voice commands for your entire house.
With the evolution of new smart gadgets era, the home automation is one of the disruptive innovations which can result in decrease most of the manual works at home.
Speech pod helps in getting done work smartly just by your voice and gives to accessibility to most electronic products on your finger steps.
2.2 Working Principal
Home automation has made it possible to have what is often referred to as a ‘smart home’, a home that can detect and identify your commands, automatically adjust lighting to your predefined time and orders, open doors automatically, play your favorite music, switch on the security lights at night and switch them off in morning, ‘Speech Pod’ exactly does the work.
The Speech Pod works with the help of an android phone, a self-made circuit which joins android cell phone commands to a newly revolutionary hardware popular over the world named as ‘Arduino’.
The arduino triggers the other electronic appliances based on the commands given by the android phone.
3. Introduction
3.1 Background Details
Integration of hardware and software has been the most challenging and exciting tasks of technology.
After decades of research and false starts, the competition in voice interfaces is now heating up thanks to its appearance on mobile devices, and the race is on to shape the definitive voice interface for the mass market.
Voice control technology used in our daily lives, basically hands-free control, is perceived as a luxury. A remote control, for instance, can be better suited for home automation because often, it is easier to push a button or say a command than get up and go to the switch board. But you also have to look for the device and take pains to have it in your hands. For people with a physical impairment, pushing a button is not always as easy as it is for most people.
While the last five years have made touch interaction ubiquitous, the next interface frontier could be voice. People are becoming more inclined to speak instead of prodding and poking machines.
3.2 Overall Description
Automation plays an increasingly important role in the global economy and in daily experience. Engineers strive to combine automated devices with mathematical and organizational tools to create complex systems for a rapidly expanding range of applications and human activities.
Many roles for humans in industrial processes presently lie beyond the scope of automation. Human-level pattern recognition, language recognition, and language production ability are well beyond the capabilities of modern mechanical and computer systems.
Tasks requiring subjective assessment or synthesis of complex sensory data, such as scents and sounds, as well as high-level tasks such as strategic planning, currently require human expertise. In such a rapidly developing generation, Speech pod can really contribute a lot.
Speech Pod will be a speech-interactive design project that controls switch boards at home. No more pains to reach and operate your switch board. Demand your switches to work on your voice commands for your entire house.
3.3 Tools and Technology
3.3.1 Android Phone
Android powers hundreds of millions of mobile devices in more than 190 countries around the world. It’s the largest installed base of any mobile platform and growing fast’every day another million users power up their Android devices for the first time and start looking for apps, games, and other digital content.
Building on the contributions of the open-source Linux community and more than 300 hardware, software, and carrier partners, Android has rapidly become the fastest-growing mobile OS. Various speech libraries and other initiatives can be taken with this open source mobile OS.
3.3.2 Arduino Circuit
A whole new breed of projects can now be built that can be controlled from a computer.
Arduino is an open source electronics prototyping platform based on flexible, easy-to-use hardware and software. It’s intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.
It’s an open-source physical computing platform based on a microcontroller board, and a development environment for writing software for the board. In simple words, Arduino is a small microcontroller board with a USB plug to connect to your computer and a number of connection sockets that can be wired up to external electronics, such as motors, relays, light sensors, laser diodes, loudspeakers, microphones, etc. They can either be powered through the USB connection from the computer or from a 9V battery. They can be controlled from the computer or programmed by the computer and then disconnected and allowed to work independently.
3.3.2.1 Microcontroller
Microcontroller can be described as a computer embedded on a rather small circuit board.To describe the function of a microcontroller more precisely,it is a single chip that can perform various calculations and tasks,and send/receive signals from other devices via the available pins. Precisely what tasks and communication with the world it does, is what is governed by what instructions we give to the Microcontroller. It is this job of telling the chip what to do, is what we refer to as programming on it.
However, the uC by itself, cannot accomplish much; it needs several external inputs: power, for one; a steady clock signal, for another. Also, the job of programming it has to be accomplished by an external circuit. So typically, a uC is used along with a circuit which provides these things to it; this combination is called a microcontroller board. The Arduino Uno that you have recieved, is one such micro controller board. The actual microcontroller at its heart is the chip called Atmega328. The advantages that Arduino offers over other microcontroller boards are largely in terms of reliability of the circuit hardware as well as the ease of programming and using it.
3.3.2.2 Open-source hardware
Open-source hardware shares much of the principles and approach of free and open-source software. The founders of Arduino wanted people to study their hardware, to understand how it works, make changes to it, and share those changes with the world. To facilitate this, they release all of the original design files(Eagle CAD)for the Arduino hardware.
The Arduino software is also open-source. The source code for the Java environment is released under the GPL and the C/C++ microcontroller libraries are under the LGPL.
3.3.2.3 ARDUINO Board Layout
3.3.2.4 ARDUINO pin diagram
3.3.2.4.1 ATmega8(Microcontroller)
‘ 16 MHz
‘ 8 Kbyte Flash RAM(1K taken by the boot loader)
‘ 1 Kbyte RAM(eg.for auto/local variables and stack)
‘ 14 digital Input/Output Ports
3.3.4.2.2 Single chip USB to async. Serial data transfer interface
‘ USB 2.0 compatible
‘ Transmit and receive LED frive signals
‘ 256 Byte receive,128 Byte transmit buffer
‘ Data transfer rate from 300bits/sec to 2 Mb/sec
3.3.4.2.3 EXTERNAL power
Figure 7 ARDUINO can run off with USB or EXTERNAL power source
The power requirement for ARDUINO is 9 to 12V DC, 250mA or more, 2.1mm plug, centre pin positive.
3.3.3 JAVA SDK
Since the introduction of the Java platform, it has been by far the most widely used Software Development Kit (SDK). Sun announced that it would be released under the GNU General Public License (GPL), thus making it free software. This happened in large part on 8 May 2007, when Sun contributed the source code to the OpenJDK.
With the help of JAVA SDK , many systems can be build and can be control, in fact most of the embedded systems now a days uses the java sdk in order to provide reliable and secure access to the product being delivered. Majority of hardware now a days are configured with java and the sdk of java is being used and accepted worldwide in order to get a consistency and reliability in the generation of smart devices.
3.4 Environmental Characteristics
3.4.1 Hardware and peripherals
‘ Android phone to use speech libraries and apps for initial level
‘ Arduino Circuit (with LEDs, Bread board, wires, batteries)
‘ Digitize wall mount switch board
‘ Computer
3.4.2 Software
‘ Java SDK
‘ RXTX COMM Library
4. Requirement Analysis
4.1 Functional Requirement
Basic Functional requirement includes majority of inputs , their behavior and outputs. In the particular project, the following are the various inputs, behaviors and outputs which needs to be consider under functional requirement.
Inputs :
‘ By an android device (phone / tablet)
‘ By a digital switch.
‘ By an input from computer.
Behaviour :
‘ Sending data to Ardunio circuit by speech recognition by either computer or android device.
‘ Sending data to Arduino circuit by using motion sensor or touch on android device using a custom made application.
‘ Sending data to Arduino using a remote control or using digital switch board.
Outputs:
‘ Controlling switchboards attached with the arduino circuits.
‘ Controlling level of Fan and lights.
4.2 Non-Functional Requirement
The non-functional requirement includes the following few points which specifies the requirement for the operating of the system.
‘ Availability of connection reaches to the device from the android phone.
‘ Needs the UNO / Basic Kit of Arduino board to control the inputs and send proper output.
‘ Android device with good system specification can be considered as an asset.
‘ Low interference of same band frequency devices.
‘ Proper battery source or AC supply of minimum household needs.
‘ Proper earthing with all the electronic devices which needs to be controlled in order to provide safety against any leakage.
‘ Availability of a digital switch board can be considered as an asset.
‘ The Range of the device needs to be controlled should be either within the range of the Speech Pod or an android phone is needed.
‘ The Android phone should be capable of catching the dictations in appropriate measures with minimum system requirements.
4.3 Behavioral Description
a. System States
The Speech Pod consist of many states occur throughout its lifecycle from an initial start of the device to the end trigger point when it shows the live result as action being performed.
‘ Initialization
During the initialization state, the overall system is being configured by setting up all the devices together and installing the android app in the particular android device and configuring the circuit with the switch board.
‘ Active
In the active state, the power supply is being provided to the circuit being attached to the switch board and the android app started in the android phone.
‘ Working
In this state, the activities and events are being performed through either voice controlled method or by using android device as remote control.
‘ Waiting
In this state, the Arduino board is waiting for an input from the android device.
‘ Ideal
The ideal state basically shows that there are not actions being performed right now and the board is just ideal and waiting.
‘ Blocked
Due to some error or problem in the communication between the circuit and the input device (phone or computer) the process can be sent to blocked state until it gets the positive response.
‘ Stopped
After the action is being performed the android app can be closed and thus it enters in the stopped state, where no further actions can be performed.
‘ Deactivate
Deactivate state describes the device can no further communicate with the input handlers as all the connections and physical configurations are removed.
b. Events and Actions
The Speech Pod interacts with various devices such as remote control, android phone, etc and so various events are been generated and various actions are being performed according to events.
‘ Loading Android App
At the time of loading the android app, the connection with the circuit is being made, either through router or Bluetooth module.
‘ Toggle Buttons
In the android device, there will be toggle buttons for all the respective electronic devices connected with arduino,switching of the devices can either be performed by voice interaction or either by using android as remote control.
When the buttons are being toggled, the data is being send to the arduino device with the information of and unique id of the particular device which needs to be turned ON / OFF.
After getting the information of respective device, the logic build under the circuit of arduino decides what actions to be performed with the particular electronic device based on the inputs.
5. Scheduling
‘ October end
‘ Studying various operations and circuit design for Arduino.
‘ Deciding major classes and basic diagrams
‘ Designing main UI- home screen
‘ December to mid-January
‘ Individual modules of the project ready
Module flow:
‘ Building circuit
‘ Adding logic to Ardunio circuit
‘ Developing UI of android app
a. By Touch
b. By Voice
‘ January 2nd half
‘ Integrating modules of Ardunio and android app
‘ Testing the overall system
6. Data Flow Diagram
6.1 Context Level Diagram
6.2 1-Level Diagram
‘?
7 UML Diagram
7.1 Use case Diagram
7.1.1 Speech Pod with Touch
7.1.2 Speech Pod with Mic
7.2 Sequence Diagram
7.2.1 Speech Pod with Touch
7.2.2 Speech Pod with Microphone
8 Design And Code
8.1 Android Application Design
Server Connection Page
Toggle Operation Page
8.2 Android Application Code
Intial.java ( Server Connection Code)
package com.joker.graphicsexample;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Initial extends Activity {
private Button bConnect;
private EditText etServer, etPort;
static String serverno;
int portno;
private TextView tvConnectStatus;
boolean conn_flag = false;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.initial);
context = this;
bConnect = (Button) findViewById(R.id.bConnect);
etServer = (EditText) findViewById(R.id.etServer);
etPort = (EditText) findViewById(R.id.etPort);
tvConnectStatus = (TextView) findViewById(R.id.tvConnectStatus);
bConnect.setOnClickListener(new MyListner());
// ServerObject.getInstance();
}
private class ConnectOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String… arg0) {
try {
ServerObject.getInstance().connect(serverno, portno);
} catch (Exception e) {
onError(e); // maybe like this?
}
return null;
}
protected void onError(Exception ex) {
tvConnectStatus.append("Error" + ex);
}
@Override
protected void onPreExecute() {
try {
Thread.sleep(2000);
tvConnectStatus.append("Connecting.."+ "n");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onPostExecute(String result) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conn_flag = true;
if(conn_flag){
tvConnectStatus.append("Connected" + "n");
Intent openmain = new Intent(context,
MultiTask.class);
finish();
startActivity(openmain);
} else {
tvConnectStatus.append("Cannot Connect"+ "n");
Toast.makeText(context, "Please check IP and port",
Toast.LENGTH_SHORT).show();
}
}
}
class MyListner implements View.OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.bConnect:
try {
serverno = etServer.getText().toString();
portno = Integer.parseInt(etPort.getText().toString());
new ConnectOperation().execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
default:
break;
}
}
}
}
MultiTask.java (Toggle Operation Code)
package com.joker.graphicsexample;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.speech.RecognizerIntent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
public class MultiTask extends Activity{
//private static SeekBar seekBar1;
private static ImageView imageView1,imageView2,imageView3,imageView4;
public Socket myClient;
public PrintWriter out = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_layout);
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView2 = (ImageView) findViewById(R.id.imageView2);
imageView3 = (ImageView) findViewById(R.id.imageView3);
imageView4 = (ImageView) findViewById(R.id.imageView4);
//seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
//seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
// init();
PrintWriter printWriter = null;
try {
printWriter = new PrintWriter(ServerObject.getInstance().getSocket().getOutputStream(), true);
} catch (Exception e) {
e.printStackTrace();
}
imageView1.setOnClickListener(new MyOnClickListener(printWriter));
imageView2.setOnClickListener(new MyOnClickListener(printWriter));
imageView3.setOnClickListener(new MyOnClickListener(printWriter));
imageView4.setOnClickListener(new MyOnClickListener(printWriter));
//seekBar1.setOnSeekBarChangeListener(new MyOnSeekBarChangeListener());
//seekBar2.setOnSeekBarChangeListener(new MyOnSeekBarChangeListener());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
MenuInflater mymenu = getMenuInflater();
mymenu.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
super.onOptionsItemSelected(item);
if(item.getItemId() == R.id.close){
System.exit(0);
}
return true;
}
/*private void init() {
toggleBulb();
toggleFan();
}*/
public static void toggleBulb(int bulb_no) {
switch(bulb_no){
case 1:
if ( UtilVariables.bulbFlag1 == "b1-on") {
imageView1.setImageResource(R.drawable.bulb_on);
} else if(UtilVariables.bulbFlag1 == "b1-off") {
imageView1.setImageResource(R.drawable.bulb_off);
}
break;
case 2:
if ( UtilVariables.bulbFlag2 == "b2-on") {
imageView2.setImageResource(R.drawable.bulb_on);
} else if(UtilVariables.bulbFlag2 == "b2-off") {
imageView2.setImageResource(R.drawable.bulb_off);
}
break;
case 3:
if ( UtilVariables.bulbFlag3 == "b3-on") {
imageView3.setImageResource(R.drawable.bulb_on);
} else if(UtilVariables.bulbFlag3 == "b3-off") {
imageView3.setImageResource(R.drawable.bulb_off);
}
break;
case 4:
if ( UtilVariables.bulbFlag4 == "b4-on") {
imageView4.setImageResource(R.drawable.bulb_on);
} else if(UtilVariables.bulbFlag4 == "b4-off") {
imageView4.setImageResource(R.drawable.bulb_off);
}
break;
}
}
public static class UserInterfaceHandler extends Handler {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
toggleBulb(1);
} else if (msg.what == 2) {
toggleBulb(2);
}else if (msg.what == 3) {
toggleBulb(3);
}else if (msg.what == 4) {
toggleBulb(4);
}else if (msg.what == 6) {
}
super.handleMessage(msg);
}
}
}
MainServer.java (Server Code)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MainServer {
public static void main(String[] args) throws Exception {
SerialHandler mySerialHandler = new SerialHandler();
Socket clientSocket = null;
BufferedReader in;
String statusBuffer;
int PortNumber = 1547;
int clientNumber = 0;
ServerSocket serverSocket = new ServerSocket(PortNumber);
//PrintWriter toClient = new PrintWriter(clientSocket.getOutputStream(), true);
try {
while (true) {
mySerialHandler.initialize();
clientSocket = serverSocket.accept();
new ServerThread(clientSocket, clientNumber++,
mySerialHandler).start();
}
} finally {
System.out.println("Server Closed!");
serverSocket.close();
mySerialHandler.close();
}
}
private static class ServerThread extends Thread {
private Socket socket;
private int clientNumber;
boolean run = true;
String inputValue = "";
PrintWriter toClient = null;
Socket clientSocket = null;
BufferedReader in;
String statusBuffer;
SerialHandler mySerialHandler;
public ServerThread(Socket clientSocket, int clientNumber,
SerialHandler mySerialHandler) {
System.out.println("Accepting Data From Client" + clientNumber);
this.clientSocket = clientSocket;
this.clientNumber = clientNumber;
this.mySerialHandler = mySerialHandler;
this.toClient= toClient;
}
public void run() {
try {
in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
String intputLine;
String decryptedtext;
while ((intputLine = in.readLine()) != null) {
if (intputLine.equals("q")) {
System.out.println("Closing the connection");
break;
} else
//decryptedtext = AESexample.decrypt("SAASASASADFSGMGNK NS", intputLine);
System.out.println("Client-"+clientNumber+" message:" + intputLine);
}
//toClient.println();
in.close();
clientSocket.close();
//mySerialHandler.close();
System.out.println("Closed ! Client-" + clientNumber);
clientNumber–;
} catch (IOException e) {
System.out.println(e);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void log(String message) {
System.out.println(message);
}
}
}
SerialHandler.java (Serial Handler Code to Connect with Arduino)
import java.io.OutputStream;
import java.io.PrintStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.util.Enumeration;
public class SerialHandler {
SerialPort serialPort;
/** The port we’re normally going to use. */
private static final String PORT_NAMES[] = {
"/dev/tty.usbserial-A9007UX1", // Mac OS X
"/dev/ttyS80", // Linux
"COM3"//, // Windows
};
/** The output stream to the port */
private OutputStream output;
/** The prinstream wrapper */
private PrintStream printWrapper;
/** Milliseconds to block while waiting for port open */
private static final int TIME_OUT = 2000;
/** Default bits per second for COM port. */
private static final int DATA_RATE = 9600;
public void initialize() {
CommPortIdentifier portId = null;
Enumeration<?> portEnum = CommPortIdentifier.getPortIdentifiers();
// iterate through, looking for the port
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}
try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);
// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
output = serialPort.getOutputStream();
printWrapper = new PrintStream(output);
} catch (Exception e) {
System.err.println(e.toString());
}
}
/**
* This should be called when you stop using the port.
* This will prevent port locking on platforms like Linux.
*/
public synchronized void close() {
if (serialPort != null) {
serialPort.removeEventListener();
serialPort.close();
}
}
public void print(String s){
printWrapper.print(s);
}
}
Arduino MicroController Code
const byte ledPin1 = 13;
const byte ledPin2 = 12;
const byte ledPin3 = 11;
const byte ledPin4 = 10;// the pin that the LED is attached to
byte incomingByte; // a variable to read incoming serial data into
boolean ledState1 = false;
boolean ledState2 = false;
boolean ledState3 = false;
boolean ledState4 = false;
void setup() {
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pin as an output:
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}
void loop() {
// see if there’s incoming serial data:
if (Serial.available() > 0) {
// read the oldest byte in the serial buffer:
incomingByte = Serial.read();
// if it’s a capital H (ASCII 72), turn on the LED:
switch (incomingByte) {
case b1-on:
ledState1 = HIGH;
break;
case b1-off:
ledState1 = LOW;
break;
case b2-on:
ledState2 = HIGH;
break;
case b2-off:
ledState2 = LOW;
break;
case b3-on:
ledState3 = HIGH;
break;
case b3-off:
ledState3 = LOW;
break;
case b4-on:
ledState4 = HIGH;
break;
case b4-off:
ledState4 = LOW;
break;
default:
break;
// if nothing else matches, do the default
// default is optional
}
digitalWrite(ledPin1, ledState1);
digitalWrite(ledPin2, ledState2);
digitalWrite(ledPin3, ledState3);
digitalWrite(ledPin4, ledState4);
}
}
9 Conclusion
It is evident from this project work that an individual control home automation system can be cheaply made from low-cost locally available components and can be used to control multifarious home appliances ranging from the security lamps, the television to the air conditioning system and even the entire house lighting system.
The Speech can be beneficial at many instance of time which handle different appliances at home. As in the initial basis the Speech Pod is capable of handling the Switch Board with mechanism of automation.
As the android phone / microphone are different options available, one can switch the devices connected with the switch board by using microphone if the person is near to the switch board or can use android phone to operate that switch while the person is far away from the room.
Finally, this Speed Pod system can be also implemented over Bluetooth, Infrared and WAP connectivity without much change to the design and yet still be able to control a variety of home appliances. Hence, this system is scalable and flexible.
10 REFERENCES
Brief History of Arduino ‘ ‘http://en.wikipedia.org/wiki/Arduin’
Circuit Details ‘ ‘http://arduino.cc/en/Main/ArduinoStarterKit’
Starter Kit Speech Pod ‘
‘Courtesy of http://www.robotshop.com/media/files/images/robotshop-arduino-basic-kit-small.jpg’
Working of Arduino ‘ ‘http://lifehacker.com/turn-off-a-lamp-by-tapping-your-nightstand-with-this-di-1074112146’
Configuration of Java SDK ‘ ‘http://arduino.cc/en/Tutorial/HomePage’