Posts tonen met het label Arduino. Alle posts tonen
Posts tonen met het label Arduino. Alle posts tonen

dinsdag 18 oktober 2016

Microduino Temperature and Humidity sensor and display

Microduino Temperature and Humidity sensor and display
Using Mixly (and a little tweak in Arduino IDE)




Mixly 'program':


Schermafbeelding 2016-10-18 om 17.27.15.png

In order to display only 1 decimal I tweaked the resulting Arduino sketch in the Arduino IDE:


#include <Wire.h>
#include <AM2321.h>
#include "U8glib.h"


float temp_reading;
float hum_reading;
char specialK;
String temp;
String hum;
float readByAM2321(int num) {
AM2321 am2321;
am2321.read();
float sensor_tem=am2321.temperature/10.0;
float sensor_hum=am2321.humidity/10.0;
delay(500);
if(num==1) {
return sensor_tem;
}
else if(num==2) {
return sensor_hum;
} else {
return 0.0;
}
}


U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
#define setFont_L u8g.setFont(u8g_font_fur20)
#define setFont_S u8g.setFont(u8g_font_fixed_v0r)
#define setFont_M u8g.setFont(u8g_font_9x18)


void setup()
{
 temp_reading = 0.0;
 hum_reading = 0.0;
 specialK = 176;
 temp = "";
 hum = "";
 Serial.begin(115200);
}


void loop()
{
 temp_reading = readByAM2321(1);
 hum_reading = readByAM2321(2);
 temp = String(temp_reading, 1);
 hum = String(hum_reading,1);
 temp = String(temp) + String(String(String(" ") + String(String("")+specialK)) + String("C"));
 hum = String(hum) + String(" %");


 int(0);


 u8g.undoRotation();
 u8g.firstPage();
 do {
   setFont_L;
   u8g.setPrintPos(20, 20);
   u8g.print(temp);
   setFont_L;
   u8g.setPrintPos(20, 60);
   u8g.print(hum);
 } while( u8g.nextPage() );


 Serial.println(temp_reading, 1);
 Serial.println(hum_reading, 1);
 delay(500);


}


The 'big' difference is the following:


 temp = String(temp_reading, 1);
 hum = String(hum_reading,1);


I used some LEGO Technics parts to put it all together:

IMG_20161018_172117.jpg

zondag 17 maart 2013

Arduino - Experiment 7a - GPIO port expander

In dit experiment heb ik een MCP23017 16 bit port expander op de Arduino aangesloten. De MCP23017 wordt aangestuurd via I2C.

De chip ziet er als volgt uit:
De Chip heeft GPA0-7 en GPB0-7 poorten en A0-2 voor het I2C adres in te stellen. De chip werkt met een basis adres van 0x20 en kan met deze drie pinnen ingesteld worden op een adres tussen 0x20 en 0x27.

Om de poorten aan te sturen gebruiken we ook een adres. Om de A-reeks aan te sturen gebruiken we adres: 0x12, en de eerste poort: 0x1.

Arduino Sketch:

#include <Wire.h>

const byte  mcp_address=0x20;      // I2C Address of MCP23017 Chip
const byte  GPIOA=0x12;            // Register Address of Port A
const byte  GPIOB=0x13;            // Register Address of Port B

void setup()
{
  //Send settings to MCP device
  Wire.begin();              // join i2c bus (address optional for master)

  // IOCON.BANK defaults to 0 which is what we want.
  // So we are using Table 1-4 on page 9 of datasheet
  
  Wire.beginTransmission(mcp_address);
  Wire.write((byte)0x00); // IODIRA register
  Wire.write((byte)0x00); // set all of bank A to outputs
  Wire.write((byte)0x00); // set all of bank B to outputs 
  Wire.endTransmission();
  
}

void loop()
{
  Wire.beginTransmission(mcp_address);
  Wire.write(GPIOA);      // address bank A
  Wire.write((byte)0x1);  // value to send - pin A1 HIGH
  Wire.endTransmission();
  
  delay(500);

  Wire.beginTransmission(mcp_address);
  Wire.write(GPIOA);    // address bank A
  Wire.write((byte)0x2);  // value to send - pin A2 HIGH
  Wire.endTransmission();
  
  delay(500);
}

Bovengenoemde code laat de leds op pin GPA0 en GPA1 om en om branden: