Difference between revisions of "Galileo"

From Earlham CS Department
Jump to navigation Jump to search
(Resources)
(XYZ + tilt using arrays, v0.24)
Line 94: Line 94:
  
 
=Code=
 
=Code=
==XYZ + tilt using arrays, v0.24==
+
==Pins==
<code>
+
You must specify which pin you're using to read/write to the Galileo. Declare variables for each of the pins you're using at the top of your code. It'll make life simpler.
// having trouble using an array of char arrays
 
  
// include directives
+
For example use,
// #include <string>
+
*const int pin_temp = A0;
//#include <Ethernet.h>
+
*const int pin_tilt = 4;
//#include <IoTkit.h>
+
to give your pin a useful name and to make the pin number easier to change.
#include <sstream>
 
#include <string>
 
using namespace std;
 
  
// pin declarations
+
==Analog vs Digital==
const int pin_temp = A0;
 
const int pin_magnet = 4;
 
  
// delay on loop
+
Analog pins return a range of values between 0-255, or rather 8 bits. In order to reference an analog pin you must place an "A" in front of it, like A0 above. If your sensor needs a range of values then you must use analog pins. In addition, if necessary analog pins can be used as digital pins.
const int delay_time = 100;
 
  
// output separators
+
Digital pins return either 0 or 1. They can be referenced by number. Digital pins can not be used as analog pins.
char csv[] = ", ";
 
char columns[] = " | ";
 
  
// sensors
+
==Setting PinMode==
float temp;
+
The pinmode ensures that you only read/write from a pin. It helps prevent bugs.
int magnet;
 
int magnet_digital;
 
int flame;
 
  
// xyz sensors
+
for input use,
const int size = 3;
+
*pinMode(pin, INPUT);
int pin[] = {0, 1, 2};
 
boolean val[size];
 
boolean last[size];
 
boolean change[size];
 
  
//IoTkit iotkit;
+
for output use,
 +
*pinMode(pin, OUTPUT);
  
// intializing pin modes
+
==Read and Write==
void setup() {
 
  Serial.begin(115200);
 
 
 
  //iotkit.begin();
 
  //iotkit.registerMetric("x", "string", "X Change");
 
 
 
  pinMode(pin_temp, INPUT);
 
  //pinMode(pin_magnet, INPUT);
 
 
 
  for(int i = 0; i < size; i++) {
 
    pinMode(pin[i], INPUT);
 
  }
 
}
 
  
void loop() {
 
  setArray(change, size, false);
 
 
 
  readTemp();
 
  readAxes();
 
  //readMagnet();
 
  output(change, size, csv);
 
 
 
  delay(delay_time);
 
}
 
  
void readFlame() {
 
  //flame = analogRead(pin_flame);
 
  //float f = flame * (5.0 / 1023.0);
 
  //output("F ", f);
 
}
 
  
void readTemp() {
+
==Printing to the Serial Interface==
  temp = analogRead(pin_temp);
+
Serial.begin(9600);
  temp = (temp * 500) / 1024.0;
+
Serial.println(str);
  temp = ((temp*9)/5) + 32;
 
  temp = temp / 10.0;
 
  //output("T ", temp);
 
}
 
 
 
void readMagnet() {
 
  magnet = analogRead(pin_magnet);
 
  //magnet -= 460;
 
  //output("M ", magnet);
 
}
 
 
 
void readAxes() {
 
  for(int i = 0; i < size; i++) {
 
    val[i] = digitalRead(pin[i]);
 
   
 
    //change[i] = val[i];
 
    if(val[i] != last[i]) {
 
      change[i] = true;
 
      last[i] = val[i];
 
    }
 
  }
 
}
 
 
 
void setArray(boolean arr[], int size, boolean val) {
 
  for(int i = 0; i < size; i++) {
 
    arr[i] = val;
 
  }
 
}
 
 
 
string blank = "      ";
 
void output(boolean arr[], int size, char sep[]) {
 
  stringstream os; // output stream;
 
 
 
  for(int i = 0; i < size; i++) {
 
    if(arr[i])
 
      os << "change";
 
    else
 
      os << "      ";
 
   
 
    //if(i != size - 1)
 
      os << sep;
 
  }
 
 
 
  os << temp;
 
 
 
  Serial.println(os.str().c_str());
 
 
 
  stringstream oc; // output command
 
  oc << "printf \"" << os.str().c_str() << "\\n\" >> output.dat";
 
  //oc << "printf " << os.str().c_str() << " >> output.dat \n";
 
  system(oc.str().c_str());
 
 
 
  //Serial.println(oc.str().c_str());
 
}
 
 
 
void outputIOTkit() {
 
  //iotkit.send("x", change[0]);
 
}
 
</code>
 
  
 
==Accelerometer, v0.1==
 
==Accelerometer, v0.1==

Revision as of 13:08, 12 May 2014

The Galileo is a fusion of a Linux PC running Intel's architecture and an Arduino. The purpose is to provide the benefits of a pc (connectivity, power, storage, ports) with the benefits of an Arduino (an open-platform hardware interface.)

This page specifically discusses the Galileo. Anything Arduino-specific should get relegated to here.

Notes

NOTES!

Photos

This is a photo.
This is a description.
This is a photo.
This is a description.
This is a photo.
This is a description.
This is a photo.
This is a description.
This is a photo.
This is a description.

Design Philosophy

  • Test after every change. Seriously, this saves a lot of time.
  • When success has been reached, repeat it: do it again.
  • When success has been repeated, replicate it: have others do it.

Troubleshooting Checklist

  1. Are you using Galileo's Arduino ide?
  2. Are you using the correct pin numbers? Is it using analog or digital?
  3. Are the pin modes set correctly??
  4. On the breadboard are the ground and power connected correctly?
  5. Do you have pin terminators on all power columns being used?
  6. If too many sensors are connected, you might run out of power. Try reducing the number of sensors.
  7. When researching sensors / project feasibility talk to scientists.
  8. Research if your sensor needs a resistor and what strength the resistor must be. (330m or 10k)
  9. If nothing else works, try a different piece of hardware.
    • This includes cables / breadboards / sensors / Galileo's.
  10. If you're still having trouble, ask a TA.

Info Dump

IoTkit handles ethernet transactions. It connects to a host and sends a packet with [string, val] where val is the value you wish to send. You can save information locally and push it to a server later. A watch battery can be used to preserve machine state between power-on's. [validate]

There are no packages installed on Intel's Linux distro.

There's an interface for C++ that lets you access the Arduino.

Always connect the power first.

When flashing the firmware, YOU MUST HAVE THE POWER CONNECTED. Otherwise you risk bricking the board.

There are example sketches for every sensor included in Intel's sensor kit. Where? Good question.

Costs $60+ as of 2/5/14. Purchase is currently cheapest at [Micro Center] and [Amazon].

Resources

[Installation Guide]

[Technical Overview of Galileo] (written by Arduino)

[Release Notes] (supported software/hardware and bugs)

[Intel Maker forums] (forum for Galileo)

Downloads

[Software Packages]

[Drivers]

Installation

You're impossible to please. Read the documentation from [Intel] or [Sparkfun] instead.

Disasters

These are notes and observations after research.

Earthquake

  • occur due to movement in tectonic plates
  • only seconds of notice, 5-10 seconds
  • [p waves] are much faster than [s waves] and the actual waves that cause the earthquake.
    • earthquakes travel at about the same speed as data networks
  • can be measured by motion (on surface or underground) and pressure (underground)
    • downside of underground monitoring is 1) power and 2) transmission
      • can use repeaters or solar power to solve these issues
    • advantage of being underground is distance from noise (such as animals and humans) and being closer to the source of the earthquake
    • being attached to or submersed in denser materials is good (?)

Resources

[introduction]

[wave types]

Tsunami

  • in the deep sea pressure sensors are used to measure the relatively small sea-level change (in centimeters)
  • nearer to shore, where waves start to form, altitude could be measured by buoy
  • travel at hundreds of miles per hour
  • tsunami headquarters in Hawaii
  • notification could be minutes to hours in advance depending on distance from source of tsunami
  • height/speed of wave reduces with distance

Code

Pins

You must specify which pin you're using to read/write to the Galileo. Declare variables for each of the pins you're using at the top of your code. It'll make life simpler.

For example use,

  • const int pin_temp = A0;
  • const int pin_tilt = 4;

to give your pin a useful name and to make the pin number easier to change.

Analog vs Digital

Analog pins return a range of values between 0-255, or rather 8 bits. In order to reference an analog pin you must place an "A" in front of it, like A0 above. If your sensor needs a range of values then you must use analog pins. In addition, if necessary analog pins can be used as digital pins.

Digital pins return either 0 or 1. They can be referenced by number. Digital pins can not be used as analog pins.

Setting PinMode

The pinmode ensures that you only read/write from a pin. It helps prevent bugs.

for input use,

  • pinMode(pin, INPUT);

for output use,

  • pinMode(pin, OUTPUT);

Read and Write

Printing to the Serial Interface

Serial.begin(9600); Serial.println(str);

Accelerometer, v0.1

Available in the google drive.

Specs

  • 400mhz cpu
  • 256mb ram
  • max of 32gb micro sd
  • 10/100 ethernet
  • PCI Express mini-card with up to PCIe 2.0
  • USB host and client
  • 5v/3.3v power
  • same Arduino pin layout