วันจันทร์ที่ 6 มิถุนายน พ.ศ. 2559

อุปกรณ์การทดลอง

ปฏิบัติการครั้งที่ 1 วันศุกร์ ที่ 11 มีนาคม 2559

ในวันแรก ผมตื่นเต้นกับการที่จะได้เขียนโปรแกรมฝังเข้าไปในบอร์ด Arduino มากๆ
ทั้งวิธีการ และ การ อธิบาย ของ อ.วิชัย  ศรีสุรักษ์ 
ณ ห้องปฏิบัติการณ์ F3 มหาวิทยาลัยเทคโนโลยีสุรนารี
อ. ท่านได้สอน วิธีการต่อวงจร เข้ากับ ระหว่าง 
เบรดบอร์ด และ บอร์ด Arduino ใช้รุ่น Duemilanov 
ขนาดมันเล็กกระทัดรัดน่ารักเหมาะมือ ฟรุ้งฟริ้งกระดิ่งแมว 
เอ้ยย ไม่ใช่แล้ว เข้าเรื่องกันดีกว่าครับ
ก่อนอื่นผมก็ขอแนะนำ 
อุปกรณ์ ที่ใช้ในการทำการทดลองทั้งหมดตั้งแต่สัปดาห์แรกจนถึง
สัปดาห์สุดท้ายที่ต้องส่งคืน อาจารย์ครับ

อุปกรณ์ที่ใช้ได้แก่

1.Arduino Duemilanove Extended                          
2.TickTock Shield                                   
3.Ethernet Shield                                       
4.DS18B20 Waterproof Temperature Pro (ตัววัดอุณหภูมิ)      
5.Bread Board                                           
6.LED@100 + Switch@100                                 
7.BOX(กล่องพลาสติกธรรมดาสำหรับใส่อุปกรณ์)                   
8.Support and Stand                                    
9.Cable M-M (สายจั้มป์ ผู้-ผู้)                             
10.Cable M-F  (สายจั้มป์ ผู้-เมีย)                          
11.Cable F-F (สายจั้มป์ เมีย-เมีย)
12.RaspberryPi Board
13.สายLan                      
จากอุปกรณ์ดังที่กล่าวมาข้างต้นก็เพียงพอต่อการที่จะนำมาทำขนมเอ้ย มาทดลองกันได้เลยครับ หมายเหตุ อาจมีอุปกรณ์ที่เพิ่มเข้ามา และ จะอธิบายรายละเอียดของอุปกรณ์นั้น เพิ่มเติมนะครับ
Share:

วันอาทิตย์ที่ 5 มิถุนายน พ.ศ. 2559

LED Arduino

LED Arduino

Digital Output LED

สำหรับการทดลองนี้จะเป็นการทดลองต่อ
LED เข้ากับบอร์ด Arduino แล้วเขียนโปรแกรม
เพื่อสั่งให้ไฟ LED ติดดับได้ครับ
อุปกรณ์การทดลอง
1.LED
2.Arduino Duemilanove Board
3.สายจัมป์เปอร์
4.Program Arduino 1.6.9
วิธีการทดลอง
1.เปิดโปรแกรม Arduino 1.6.9
2.ทดลองใช้ code ด้านล่าง
3.ต่อวงจร ตาม pin ของบอร์ด Arduino ครับ
4.Load Source code ใส่ลงในบอร์ด
5.สามารถดูผลการทดลองได้ตามคลิปด้านบนเลยครับ

คำเตือน!:
อย่าลืมปรับ port และ บอร์ด ในโปรแกรม
ให้ตรงกับ port และ บอร์ด ที่ตนเองใช้ครับ

Source Code


void setup() {
  // initialize digital pin 13 as an output.
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(6, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(7, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(8, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(9, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(10, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(11, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(12, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(6, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(7, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(8, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(9, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(10, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(11, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(12, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}
Share:

วันเสาร์ที่ 4 มิถุนายน พ.ศ. 2559

Switch LED Arduino

Switch LED Arduino

Digital Input LED

สำหรับการทดลองนี้จะเป็นการทดลองต่อ
LED เข้ากับบอร์ด Arduino แล้วเขียนโปรแกรม
เพื่อสั่งให้เมื่อกด Switch แล้วทำให้ไฟ LED ติด
และเมื่อปล่อยมือออกให้ LED ดับ ได้ครับ
อุปกรณ์การทดลอง
1.LED
2.Arduino Duemilanove Board
3.สายจัมป์เปอร์
4.Program Arduino 1.6.9
วิธีการทดลอง
1.เปิดโปรแกรม Arduino 1.6.9
2.ทดลองใช้ code ด้านล่าง
3.ต่อวงจร ตาม pin ของบอร์ด Arduino ครับ
4.Load Source code ใส่ลงในบอร์ด
5.สามารถดูผลการทดลองได้ตามคลิปด้านบนเลยครับ

คำเตือน!:
อย่าลืมปรับ port และ บอร์ด ในโปรแกรม
ให้ตรงกับ port และ บอร์ด ที่ตนเองใช้ครับ

Source Code

void setup() {
  Serial.begin(9600); 
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {

  if(digitalRead(6)==LOW){ 
    digitalWrite(10,LOW);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(11,LOW);
    digitalWrite(12,LOW);
    digitalWrite(13,LOW);
    delay(15); 
  }
  else if(digitalRead(6)==HIGH){
    digitalWrite(10,HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(11,HIGH);
    digitalWrite(12,HIGH);
    digitalWrite(13,HIGH);
    delay(15); 
  }
 
}

สามารถลองประยุกต์ใช้กับอุปกรณ์อื่นได้นะครับ

Share:

วันศุกร์ที่ 3 มิถุนายน พ.ศ. 2559

Analog Read R potential Arduino

Analog Read R potential Arduino

Digital Input LED

สำหรับการทดลองนี้จะเป็นการทดลองต่อ
ตัวต้านทานปรับ เข้ากับ บอร์ด Arduino
เพื่อรับค่าจาก R potential แบบ Analog
หรือ ปรับค่าจากมือของเรานั่นเองครับ
อุปกรณ์การทดลอง
1.R potential (ตัวต้านทานปรับค่าได้)

2.Arduino Duemilanove Board 3.สายจัมป์เปอร์ 4.Program Arduino 1.6.9
วิธีการทดลอง
1.เปิดโปรแกรม Arduino 1.6.9
2.ทดลองใช้ code ด้านล่าง
3.ต่อวงจร ตาม pin ของบอร์ด Arduino ครับ
4.Load Source code ใส่ลงในบอร์ด
5.สามารถดูผลการทดลองได้ตามคลิปด้านบนเลยครับ
6.เมื่อเราลองหมุนตัวต้านทานแล้วให้ลองกดที่ 
Serial Monitor มีลักษณะคล้ายแว่นขยาย
7.เมื่อได้หน้าต่างขึ้นมาแล้วให้เราลองหมุน ตัวต้านทานดูจะทำให้ ค่าเปลี่ยนแปลงตามที่เราหมุนไปเรื่อยๆ
คำเตือน!: อย่าลืมปรับ port และ บอร์ด ในโปรแกรม ให้ตรงกับ port และ บอร์ด ที่ตนเองใช้ครับ

Source Code

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}

สามารถลองนำไปประยุกต์ใช้กับอุปกรณ์อื่นได้นะครับ

Share:

วันพฤหัสบดีที่ 2 มิถุนายน พ.ศ. 2559

Tick Tock Counter EEPROM


Tick Tock Counter EEPROM

ขั้นตอนที่ 1 นำ Code ข้างล่างนี้โหลดลงบอร์ด

#include <EEPROM.h>    
#include "TM1636.h"   
TM1636 tm1636(7, 8);
int8_t disp[4];
int count = 2008;
int counter = count;
int buttonMenu = 11;
int buttonUp = 10;
int buttonDown = 9;
int voice = 6;
int temp = count ;
int sensorPin = A0;
int sensorValue = 0;
void setup()
{
  Serial.begin(9600);
  Serial.println(EEPROM.read(0), HEX);
  tm1636.init();
  pinMode(buttonMenu, INPUT_PULLUP);
  pinMode(buttonUp, INPUT_PULLUP);
  pinMode(buttonDown, INPUT_PULLUP);
  pinMode(voice, OUTPUT);
  while (!Serial) {

  }

}

void loop()
{
  disp[0] = EEPROM.read(0);
  disp[1] = EEPROM.read(1);
  disp[2] = EEPROM.read(2);
  disp[3] = EEPROM.read(3);
  tm1636.display(disp);

  if (digitalRead(buttonMenu) == 0) {
    count = 2008;
    temp = count;
    disp[0] = temp / 1000; temp = count % 1000;
    disp[1] = temp / 100;  temp = count % 100;
    disp[2] = temp / 10;   temp = count % 10;
    disp[3] = temp;
    delay(160);
    EEPROM.write(0, disp[0]);
    EEPROM.write(1, disp[1]);
    EEPROM.write(2, disp[2]);
    EEPROM.write(3, disp[3]);
    digitalWrite(voice, HIGH);
    while (buttonMenu == 0) {}
    delay(5);
    digitalWrite(voice, LOW);
    Serial.print("MonitorValue = ");
    Serial.println(count);
    tm1636.display(disp);
    delay(100);
  }

  if (digitalRead(buttonUp) == 0) {
    count = 0;
    count = count + (disp[0] * 1000);
    count = count + (disp[1] * 100);
    count = count + (disp[2] * 10);
    count = count + (disp[3] * 1);
    count++;
    temp = count;
   
    disp[0] = temp / 1000; temp = count % 1000;
    disp[1] = temp / 100;  temp = count % 100;
    disp[2] = temp / 10;   temp = count % 10;
    disp[3] = temp;
    delay(160);
    
    EEPROM.write(0, disp[0]);
    EEPROM.write(1, disp[1]);
    EEPROM.write(2, disp[2]);
    EEPROM.write(3, disp[3]);
    digitalWrite(voice, HIGH);
    delay(5);
    while (buttonUp == 0) {}
    digitalWrite(voice, LOW);
    Serial.print("MonitorValue = ");
    Serial.println(count);

    tm1636.display(disp);
    delay(100);
  }
  if (digitalRead(buttonDown) == 0) {
    count = 0;
    count = count + (disp[0] * 1000);
    count = count + (disp[1] * 100);
    count = count + (disp[2] * 10);
    count = count + (disp[3] * 1);
    count--;
    temp = count;
 
    disp[0] = temp / 1000; temp = count % 1000;
    disp[1] = temp / 100;  temp = count % 100;
    disp[2] = temp / 10;   temp = count % 10;
    disp[3] = temp;
    delay(160);
  
    EEPROM.write(0, disp[0]);
    EEPROM.write(1, disp[1]);
    EEPROM.write(2, disp[2]);
    EEPROM.write(3, disp[3]);
    digitalWrite(voice, HIGH);
    delay(5);
    while (buttonDown == 0) {}
    digitalWrite(voice, LOW);
    Serial.print("MonitorValue = ");
    Serial.println(count);
    tm1636.display(disp);
    delay(100);
  }

}
2.นำบอร์ด TickTock Shield มาประกอบร่างเข้ากับบอร์ด Arduino ดังรูปเลยค้าบบบ
3.ลองถอดสายบอร์ดออกเพื่อทดสอบว่ามีการ save ข้อมูลเข้าไปจริงไหม
4.ลองโหลดโค้ดลงบอร์ดีอกหนึ่งครั้ง เพื่อดูว่าเลขที่เรากดไปครั้งล่าสุด กำลังแสดงอยู่หรือไม่
5.ลองทดสอบกับ labView ว่าค่าที่ได้แสดงใน read String ไหม
Share:

Tick Tock Shield LED

Tick Tock Shield LED
อุปกรณ์ที่ใช้
1.Tick Tock Shield
2.Arduino Duemilanove
3.สายสำหรับโหลดข้อมูลลองบอร์ด Arduino
วิธีการทดลอง
1.นำบอร์ด Tick Tock Shield เสียบเข้ากับ
บอร์ด Arduino

2.เสียบสาย Load code ด้านล่างลง Arduino
Source code
void setup() {
    pinMode(5, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(2, OUTPUT);
}
void loop() {
  digitalWrite(5, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(3, LOW);
  digitalWrite(2, LOW);
  delay(100);
  digitalWrite(5, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(2, LOW);
  delay(100);
  digitalWrite(5, LOW);
  digitalWrite(4, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(2, LOW);
  delay(100);
  digitalWrite(5, LOW);
  digitalWrite(4, LOW);
  digitalWrite(3, LOW);
  digitalWrite(2, HIGH);
  delay(100);
  digitalWrite(5, LOW);
  digitalWrite(4, LOW);
  digitalWrite(3, LOW);
  digitalWrite(2, HIGH);
  delay(100);
  digitalWrite(5, LOW);
  digitalWrite(4, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(2, LOW);
  delay(100);
  digitalWrite(5, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(2, LOW);
  delay(100);
  digitalWrite(5, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(3, LOW);
  digitalWrite(2, LOW);
  delay(100);
}
Share:

วันพุธที่ 1 มิถุนายน พ.ศ. 2559

Labview Switch Control 8 LED


Lab Week03 HomeWork 1/3
ครับสำหรับการทำการทดลองนี้ก็คือการทดลอง ใช้บอร์ด Arduino
ควบคุมโดยโปรแกรม LabView เพื่อทดลองว่าสามารถใช้งาน
LabView ทำเป็นสวิช เพื่อควบคุม LED ผ่านบอร์ด Arduino ครับ

ขั้นตอนที่ 1 นำ Source Code โหลดลงบอร์ด

source code อย่าลืมเลือก port ให้ถูกต้องด้วยนะครับ

int led = 3;  
int led2 = 4; 
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
int led7 = 9;
int led8 = 10;
int inByte = 0;    
int sensorPin = A0;
int sensorValue = 0;
void setup() 
  { Serial.begin(9600);
    pinMode(led, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(led4, OUTPUT);
    pinMode(led5, OUTPUT);
    pinMode(led6, OUTPUT);
    pinMode(led7, OUTPUT);
    pinMode(led8, OUTPUT);
  }
void loop()
  { if (Serial.available() > 0)
    { inByte = Serial.read();
      if(inByte == '0') digitalWrite(led, LOW);
      if(inByte == '1') digitalWrite(led, HIGH);
      if(inByte == '2') digitalWrite(led2, LOW);
      if(inByte == '3') digitalWrite(led2, HIGH);
      if(inByte == '4') digitalWrite(led3, LOW);
      if(inByte == '5') digitalWrite(led3, HIGH);
      if(inByte == '6') digitalWrite(led4, LOW);
      if(inByte == '7') digitalWrite(led4, HIGH);
      if(inByte == '8') digitalWrite(led5, LOW);
      if(inByte == '9') digitalWrite(led5, HIGH);
      if(inByte == 'a') digitalWrite(led6, LOW);
      if(inByte == 'b') digitalWrite(led6, HIGH);
      if(inByte == 'c') digitalWrite(led7, LOW);
      if(inByte == 'd') digitalWrite(led7, HIGH);
      if(inByte == 'e') digitalWrite(led8, LOW);
      if(inByte == 'f') digitalWrite(led8, HIGH);
      }
    //sensorValue = analogRead(sensorPin); 
    //Serial.print("sensorValue = ");
    //Serial.println(sensorValue); 
    //delay(100); 
  }

ขั้นตอนที่ 2 ต่อวงจรบอร์ด Arduino Duemilanov เข้ากับวงจร LED@100 ดังรูป


ขั้นตอนที่ 3 เขียน LAB VIEW ดังภาพ


3.1 ต่อสวิทช์ ON OFF ดังภาพ

3.2 กด CTRL+E จะมีหน้าต่าง วงจร loop while ต่างๆ ของ lab view 
ไม่ต้องไปใส่ใจมาก ให้เราเข้าไปแก้ค่าที่รับส่งของ สวิทช์ ให้ตรงกับ code ด้านบน เพื่อให้มีการส่งค่ากันเกิดขึ้น และ ส่งผลให้สวิทช์ ติด หรือ ดับ
จากนั้นเราก็มาดูกันว่าผลการทดสอบเป็นอย่างไร
Share:

วันอังคารที่ 31 พฤษภาคม พ.ศ. 2559

LabView Temp on Excel

LabView Temp on Excel

ขั้นตอนที่ 1 นำ code โหลดลงบอร์ด Arduino

// test_DS1820
#include 
float celsius, fahrenheit;

OneWire  ds(10);  // on pin 10

void setup(void) {
  Serial.begin(9600);
}
void loop(void) { celsius = ReadTempDS1820(); if (celsius!=99999.9) { fahrenheit = celsius * 1.8 + 32.0; Serial.print("sensorValue = "); Serial.print(celsius); } } float ReadTempDS1820(void) { byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if ( !ds.search(addr)) { //Serial.println("No more addresses."); //Serial.println(); ds.reset_search(); delay(250); return 99999.9; } //Serial.print("ROM ="); for( i = 0; i < 8; i++) { //Serial.write(' '); //Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { //Serial.println("CRC is not valid!"); return 99999.9; } //Serial.println(); // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: //Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: //Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: ////Serial.println(" Chip = DS1822"); type_s = 0; break; default: //Serial.println("Device is not a DS18x20 family device."); return 99999.9; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
//Serial.print(" Data = "); //Serial.print(present,HEX); //Serial.print(" "); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); //Serial.print(data[i], HEX); //Serial.print(" "); } //Serial.print(" CRC="); //Serial.print(OneWire::crc8(data, 8), HEX); //Serial.println(); // convert the data to actual temperature unsigned int raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // count remain gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms // default is 12 bit resolution, 750 ms conversion time } return ((float)raw / 16.0); }

ขั้นตอนที่2 ต่อวงจรตามภาพด้านล่างเลยครับผม

ขั้นตอนที่3 ลองใช้ LabViewเพื่อทดสอบว่ามีการรีบค่าเข้ามาจาก Sensor จริงไหม

ขั้นตอนที่4 ผลที่ได้จะแสดงเป็นไฟล์ Excel (.xls) ในโฟลเดอร์ที่เราบันทึก

Share:

วันจันทร์ที่ 30 พฤษภาคม พ.ศ. 2559

Arduino TPIC6B595

Arduino TPIC6B595
สำหรับ การทดลองนี้จะมี Item ใหม่เข้ามาเพิ่มนั่นก็คือ ET-MINI TPIC6B595 
เป็นการทดลองเกี่ยวกับการทดลองใช้สายแพ เพื่อความสะดวกในการเชื่อมต่อ 
LED เข้ากับบอร์ด Arduino และลดจำนวนสายจัมป์เปอร์ลง
เพื่อทดลองควบคุม TPIC6B595 ผ่านสายแพด้วย Arduino โดยจะมีการ
เขียน code เพื่อควบคุม pin ต่างๆที่ได้กำหนดไว้แล้ว ต่อเข้ากับ Switch
และ LED แล้วใช้ Switch กดดูว่า LED ติดหรือไม่ สามารถทำตามขั้นตอน
ด้านล่างนี้ได้เลยครับ

Source Code สำหรับการทดลอง

//Pin to clear the register  
const int clearPin = 12;
//Pin connected to latch pin (RCK) of TPIC6B595
const int latchPin = 10;
//Pin connected to clock pin (SRCK) of TPIC6B595
const int clockPin = 11;
////Pin connected to Data in (SER IN) of TPIC6B595
const int dataPin = 9;

int counter = 0;
int numLedsInUse = 8;
int switch1 = 2;
int switch2 = 3;
int switch3 = 4;
int switch4 = 5;
int switch5 = 6;
int switch6 = 7;
int switch7 = 8;
int switch8 = A0;

void setup() {
//set pins to output because they are addressed in the main loop
pinMode(clearPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(switch1, INPUT_PULLUP);
pinMode(switch2, INPUT_PULLUP);
pinMode(switch3, INPUT_PULLUP);
pinMode(switch4, INPUT_PULLUP);
pinMode(switch5, INPUT_PULLUP);
pinMode(switch6, INPUT_PULLUP);
pinMode(switch7, INPUT_PULLUP);
pinMode(switch8, INPUT_PULLUP);

Serial.begin(9600);
Serial.println("*");

// Always start by setting SRCLR high
digitalWrite( clearPin, HIGH);

// delay a little and then set
delay(100);
}

void loop() {

if(digitalRead(switch1) == 0){
while(digitalRead(switch1)==0){
counter = 0;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

if(digitalRead(switch2) == 0){
while(digitalRead(switch2)==0){
counter = 1;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

if(digitalRead(switch3) == 0){
while(digitalRead(switch3)==0){
counter = 2;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

if(digitalRead(switch4) == 0){
while(digitalRead(switch4)==0){
counter = 3;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

if(digitalRead(switch5) == 0){
while(digitalRead(switch5)==0){
counter = 4;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

if(digitalRead(switch6) == 0){
while(digitalRead(switch6)==0){
counter = 5;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

if(digitalRead(switch7) == 0){
while(digitalRead(switch7)==0){
counter = 6;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

if(digitalRead(switch8) == 0){
while(digitalRead(switch8)==0){
counter = 7;
registerWrite(counter, HIGH);
delay(10);
}
registerWrite(counter, LOW);
delay( 100 );
}

}

// This method sends bits to the shift register:
void registerWrite(int whichPin, int whichState) {
Serial.println(whichPin);
// the bits you want to send
byte bitsToSend = 0;
// write number as bits
bitWrite(bitsToSend, whichPin, whichState);

// turn off the output so the pins don't light up
// while you're shifting bits:
digitalWrite(latchPin, LOW);
Serial.println(bitsToSend);
Serial.println("_");
// shift the bits out
shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);
// turn on the output so the LEDs can light up:
digitalWrite(latchPin, HIGH);
}


1.อัพโค้ดลงบอร์ดโลดเลยจร้า

2.ต่อวงจรตามที่ได้เขียนโค้ดเอาไว้

ในบอร์ด TPIC6B595 จะต้องต่อไฟเลี้ยงจากBoard Arduino และ Ground ให้กับบอร์ด ดังภาพ

และก็ต่อตามภาพหรือ โค้ดด้านบนเลยครับผม

ต้องต่อให้ถูกนะครับ ไม่งั้นไฟไม่ติดกดปุ่มไม่ได้
ส่วนผลการทดลองก็จะเป็นไปตา่ม Video ด้านบนเลยครับผม

Share:

วันอาทิตย์ที่ 29 พฤษภาคม พ.ศ. 2559

Node MCU(Client) Connect to Network

Node MCU(Client) Connect to Network
การทดลองนี้ทำเพื่อทดสอบว่า NodeMCU ของเรา
สามารถเชื่อมต่อเข้ากับ Internet ได้หรือไม่
ได้หากได้ จะแสดงผลลัพธ์ ออกมาเป็น
หมายเลข IP ของ NodeMCU
อุปกรณ์การทดลอง
1.Node MCU ESP8266
2.สายDATA Android
3.Notebook ของเรา 1 เครื่อง
4.โทรศัพท์ที่สามารถแชร์ Hotspot ได้
วิธีการทดลอง
1.ติดตั้ง Library ESP8266
2.ทดลองเปิดโปรแกรม Arduino IDE
3.ลองแชร์ Wifi จากโทรศัพท์ของเรา
4.โหลด code ด้านล่างลงบอร์ด
5.ดูผลลัพธ์ที่ได้
Code
#include 
const char* ssid = "sleep"; //อย่าลืมแก้เป็นชื่อ SSID ของตัวเอง
const char* password = "22222222"; //อย่าลืมแก้เป็นชื่อ password ของ
void setup()
{
Serial.begin(115200); //ตั้งค่าใช้งาน serial ที่ baudrate 115200
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to "); //แสดงข้อความ “Connecting to”
Serial.println(ssid); //แสดงข้อความ ชื่อ SSID
WiFi.begin(ssid, password); // เชื่อมต่อไปยัง AP
while (WiFi.status() != WL_CONNECTED) //รอจนกว่าจะเชื่อมต่อสำเร็จ
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); //แสดงข้อความเชื่อมต่อสำเร็จ
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //แสดงหมายเลข IP ของ ESP8266(DHCP)
}
void loop() {}
ผลลัพธ์

Share:

วันเสาร์ที่ 28 พฤษภาคม พ.ศ. 2559

Node MCU GPIO Input

Node MCU GPIO Input
การทดลองนี้เพื่อทดลอง Input ของบอร์ด
ESP8266ว่าสามารถใช้ได้หรือไม่
อุปกรณ์
1.Node MCU ESP8266
2.สายจัมป์เปอร์
3.LED
4.Switch
5.Notebook ของเรา
วิธีการทดลอง
1.ทดลองต่อวงจรตาม code ที่เขียนไว้ โดยต่อ Input เป็น GPIO 04
ให้กับ Switch และต่อ Output เป็น GPIO 05 ให้ LED 
2.เมื่อต่อเสร็จแล้วนำโค้ด Load ลง ESP8266
3.ดูผลลัพธ์ ลองกดสวิทช์ ที่ต่อกับ
ESP8266 ว่าไฟ LED ติดหรือไม่
Code
void setup() {
     pinMode(5,OUTPUT);
     pinMode(4,INPUT_PULLUP);
}
void loop()
{ 
     if(!digitalRead(4))
          digitalWrite(5,LOW);
     else
          digitalWrite(5,HIGH);
}
Share:

วันศุกร์ที่ 27 พฤษภาคม พ.ศ. 2559

NodeMCU esp8266 Web server

esp8266 Web server
การทดลองนี้มีจุดประสงค์เพื่อทดสอบว่า
ESP8266 สามารถควบคุมจาก PC ผ่าน IP ของ
ESP8266 ได้หรือไม่

อุปกรณ์

1.LED
2.ESP8266
3.สายจัมป์เปอร์
4.Notebook 
5.โทรศัพท์ที่สามารถแชร์ Wifi ได้

วิธีการทดลอง

1.Load Code ลงบอร์ด
2.ต่อ LED ตาม GPIO ที่ได้เขียนไว้ใน Code
3.แชร์ Wifi จากโทรศัพท์ของเรา
4.ทดสอบเข้า IP ของ ESP8266 ด้วย Browser
5.ลองกด Switch LED ON ,LED OFF

Code

#include 
#define LED D0 //กำหนดขาที่ต่อ LED เป็นขา D0
const char* ssid = "sleep"; //กำหนด SSID (อย่าลืมแก้เป็นของตัวเอง)
const char* password = "22222222"; //กำหนด Password(อย่าลืมแก้เป็นของตัวเอง)
unsigned char status_led = 0; //กำหนดตัวแปร ที่เก็บค่าสถานะของ LED
WiFiServer server(80); //กำหนดใช้งาน TCP Server ที่ Port 80
void setup() {
Serial.begin(115200); //เปิดใช้ Serial
pinMode(LED, OUTPUT); //กำหนด Pin ที่ต่อกับ LED เป็น Output
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password); //เชื่อมต่อกับ AP
while (WiFi.status() != WL_CONNECTED) //รอการเชื่อมต่อ
{ delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); //แสดงข้อความเชื่อมต่อสำเร็จ
server.begin(); //เปิด TCP Server
Serial.println("Server started");
Serial.println(WiFi.localIP()); // แสดงหมายเลข IP ของ Server
}
void loop() {
WiFiClient client = server.available(); //รอรับ การเชื่อมต่อจาก Client
if (!client) { //ถ้าไม่มี Client เข้ามาให้เริ่มกับไปวน loop รอรับใหม่
return;
}
Serial.println("new client");
while (!client.available())
{
delay(1);
}
String req = client.readStringUntil('\r'); //อ่านค่าที่ได้รับจากclient จากข้อมูลแรกถึง ‘\r’
Serial.println(req); //แสดงค่าที่ได้รับทาง Serial
client.flush();
if (req.indexOf("/ledoff") != -1) //ตรวจสอบว่า data ที่เข้ามามีข้อความ”/ledoff”หรือไม่
{
status_led = 0; //ถ้ามีให้กำหนดค่า ในตัวแปรใน status_led=0
digitalWrite(LED, HIGH); //ให้ LED ดับ
Serial.println("LED OFF");
}
else if (req.indexOf("/ledon") != -1) //ตรวจสอบว่า data ที่เข้ามามีข้อความ”/ledon”หรือไม่
{
status_led = 1; //ถ้ามีให้กำหนดค่า ในตัวแปรใน status_led=1
digitalWrite(LED, LOW); //ให้ LED ติด
Serial.println("LED ON");
}
String web = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
web += "\r\n";
web += "\r\n";
web += "

LED Status

\r\n"; web += "

\r\n"; if(status_led==1) web += "LED On\r\n"; else web += "LED Off\r\n"; web += "

\r\n"; web += "

\r\n"; web += "\r\n"; web += "\r\n"; web += "\r\n"; web += "

\r\n"; web += "\r\n"; web += "\r\n"; web += "\r\n"; web += "\r\n"; web += "\r\n"; client.print(web); }

ผลลัพธ์:




Share:

วันพฤหัสบดีที่ 26 พฤษภาคม พ.ศ. 2559

NodeMCU TCP Hercules server

การทดลองนี้จะเป็นการทดลองใช้โปรแกรมHercules กับ ESP8266 
โดยให้ Hercules เป็น Server แล้ว ESP8266 เป็น Client 
ใน Arduino IDE จะต้องเขียนโปรแกรมให้เชื่อมต่อ กับ IP ของ Notebook 
และ SSID กับ Password ของ Wifi ที่ Notebook กำลังเชื่อมต่ออยู่
อุปกรณ์การทดลอง
1.โปรแกรม Hercules
2.Board MCU ESP8266
3.Notebook
4.โปรแกรม Arduino IDE
วิธีการทดลอง
1.เปิดโปรแกรม Hercules เลือกtab TCP Server แล้วตั้ง Port เป็น 8000
2.โหลด code ลง ESP8266 3.กดที่ Serial port มีลักษณะคล้ายแว่นขยาย 4.ทดสอบดูผลลัพธ์ว่า มีการเชื่อมต่อเข้ามาจาก Client หรือไม่ คำเตือน! อย่าลืมตั้ง Baudrate ให้ตรงกับที่ set ไว้ใน code จาก code จะเห็นว่า Baudrate คือ 115200
Code
#include 
#define SERVER_PORT 8000 //ค่า port ที่ต้องการเชื่อมต่อ
IPAddress server_ip = {192, 168, 43, 215}; //ค่า ip ของ Server (อย่าลืมแก้เป็น IP ของตัวเอง)
const char* ssid = "sleep"; //ค่าของ SSID (อย่าลืมแก้เป็น ชื่อ SSID ของตัวเอง)
const char* password = "22222222"; //ค่าของ SSID (อย่าลืมแก้เป็น password ของตัวเอง)
WiFiServer server(SERVER_PORT); //สร้าง object server และกำหนด port ที่ต้องการเชื่อมต่อกับ server
WiFiClient client; //สร้าง object client
void setup()
{
Serial.begin(115200); //เปิดใช้ Serial
WiFi.begin(ssid, password); //เชื่อมต่อกับ AP
while (WiFi.status() != WL_CONNECTED) //รอการเชื่อมต่อ
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //แสดงหมายเลข IP
Serial.println("Connect TCP Server");
while (!client.connect(server_ip, SERVER_PORT)) //เชื่อมต่อกับ Server
{
Serial.print(".");
delay(100);
}
Serial.println("Success");
ESP.wdtDisable(); //ปิด watch dog Timer
}
void loop()
{
while (client.available()) //ตรวจเช็ตว่ามี Data ส่งมาจาก Server หรือไม่
{
uint8_t data = client.read(); //อ่าน Data จาก Buffer
Serial.write(data); //แสดงผล Data ทาง Serial
}
client.println("Hello"); //ส่งค่าที่ได้รับกลับไปยัง Server
delay(1000);
}
ผลลัพธ์ :
คราวนี้มาลองให้ Hercules เป็น Client แล้วให้ ESP8266 เป็น Server ดูบ้างครับ
#include 
#define SERVER_PORT 8000 //กำหนด Port ใช้งาน
const char* ssid = "sleep"; //กำหนด SSID
const char* password = "22222222"; //กำหนด Password
WiFiServer server(SERVER_PORT); //สร้าง object server และกำหนด port
void setup()
{ Serial.begin(115200); //เปิดใช้ Serial
Serial.println("");
Serial.println("");
WiFi.begin(ssid, password); //เชื่อมต่อกับ AP
while (WiFi.status() != WL_CONNECTED) //รอการเชื่อมต่อ
{ delay(500);
Serial.print(".");
}
Serial.println("WiFi connected"); //แสดงข้อความเชื่อมต่อสำเร็จ
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //แสดงหมายเลข IP
server.begin(); //เริ่มต้นทำงาน TCP Server
Serial.println("Server started"); //แสดงข้อความ server เริ่มทำงาน
ESP.wdtDisable(); //ปิด watch dog Timer
}
void loop()
{ WiFiClient client = server.available(); //รอรับ การเชื่อมต่อจาก Client
if (client) //ตรวจเช็คว่ามี Client เชื่อมต่อเข้ามาหรือไม่
{
Serial.println("new client"); //แสดงข้อความว่ามี Client เชื่อมต่อเข้ามา
while (1) //วนรอบตลอด
{ while (client.available()) //ตรวจเช็ตว่ามี Data ส่งมาจาก Client หรือไม่
{ uint8_t data = client.read(); //อ่าน Data จาก Buffer
Serial.write(data); //แสดงผล Data ทาง Serial
}
if (server.hasClient()) //ตรวจเช็คว่ายังมี Client เชื่อมต่ออยู่หรือไม่
{ return; //ถ้าไม่มีให้ออกจาก ลูป ไปเริ่มต้นรอรับ Client ใหม่
}
}
}
ผลลัพธ์:
Share:

วันพุธที่ 25 พฤษภาคม พ.ศ. 2559

NODEMCU-DS18B20 with ThingSpeak

NodeMCU-DS18B20-ThingSpeak

NODEMCU-DS18B20-ThingSpeak


เขียนโค้ดและโหลดลงบอร์ด NODEMCU ได้ดังนี้

#include <esp8266wifi .h>  
#include <onewire .h>  
#include <dallastemperature .h> 
#define ONE_WIRE_BUS D3 
const char* ssid = "MKY_true_FTTx"; // กำหนด SSID[Wifi] (อย่าลืมแก้เป็นของตัวเอง) 
const char* password = "08199928031"; // กำหนด Password [Wifi](อย่าลืมแก้เป็นของตัวเอง)"; 
String apiKey = "XY0S5VLCFF5BMNDK";  // API KEY ที่ได้จาก ThingSpeak
const char* server = "api.thingspeak.com";  
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire); 
WiFiClient client; 
void setup()
{ Serial.begin(115200); 
delay(1000);
sensors.begin();
Serial.println(); 
Serial.println(); 
Serial.print("Connecting to "); 
Serial.println(ssid);
WiFi.begin(ssid, password); 
while (WiFi.status() != WL_CONNECTED)
{ delay(500); 
Serial.print("."); 
}
Serial.println("");
Serial.println("WiFi connected"); 
Serial.println("IP address: "); 
Serial.println(WiFi.localIP()); 
} 
void loop() 
{ Serial.println("-------------------------");
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures 
float cTemp = sensors.getTempCByIndex(0); 
Serial.print("Temperature is: "); Serial.println(cTemp, 4); // Display Temperature 
if (client.connect(server, 80)) // "184.106.153.149" or api.thingspeak.com 
{ String postStr = apiKey;  
postStr += "&field1="; 
postStr += String(cTemp); 
postStr += "\r\n\r\n"; 
client.print("POST /update HTTP/1.1\n");  
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n"); 
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); 
client.print("Content-Type: application/x-www-form-urlencoded\n"); 
client.print("Content-Length: "); 
client.print(postStr.length()); 
client.print("\n\n"); 
client.print(postStr); 
Serial.print("Temperature('C)= "); 
Serial.println(cTemp, 4); 
} 
client.stop(); 
Serial.println("Waiting..."); 
delay(20000); // thingspeak needs minimum 15 sec delay between updates 
} 
   
Share:

วันอังคารที่ 24 พฤษภาคม พ.ศ. 2559

How to Remote Desktop Raspberry pi by Window(Raspberry Pi 2)

How to Remote Desktop(Raspberry Pi 2)

วิธีการ Remote เพื่อเข้าไปควบคุม Raspberry Pi

อุปกรณ์ที่ใช้
-Raspberry Pi 2 (Board)
-สาย Lan (Cross) ใช้เพื่อทำการแชร์ internet ให้กับ Raspberry pi
-Notebook หรือ PC ของเรา
-micro SD card (แนะนำเป็นขนาด 8 GB Class10 ขึ้นไป)
-สาย USB adroid เพื่อจ่ายไฟเลี้ยงให้กับบอร์ด
-หน้าจอMonitor (เพื่อความชัวร์ หรือ อาจไม่ใช้ก็ได้)
-สายHDMI (หรือ อาจไม่ใช้ก็ได้)
-หัวแปลง HDMI to VGA หรือ DVI (อาจไม่ใช้ก็ได้)

1.ขั้นตอนแรก Download Raspbian Jessie Install Raspberry Pi ใส่เข้าไปยัง micro SD card

-สามารถทำการ Download ได้ตามลิงค์ด้านล่างนี้ครับ
Download Raspberry Pi Jessie(Offline Network Install)
Link Reference->(Download NOOBS)
-เมื่อได้File Zip มาให้ทำการแตกไฟล์จะได้ 2016-05-10-raspbian-jessie.img -ทำการ Download Win32DiskManager เพื่อ Write file .img ใส่เข้าไปยัง micro SD card ให้สามารถรัน Raspberry Pi ได้ -
-คลิกที่
-เลือก Open
-Write
-นำ micro SD card ที่เตรียมไว้ใส่เข้าไปยัง board

2.ทำการ Install xrdp เพื่อให้สามารถ Remote เข้าไปยัง Raspberrypi(Rpi) ได้

เมื่อเข้ามาที่ Board (สำหรับผู้ที่มี หน้าจอMonitor)

ทำการเปิด Terminal บน Rpi ขึ้นมา
sudo apt-get install xrdp
ทำการ Expand Filesystem เพื่อให้สามารถใช้พื้นที่ได้อย่างเต็มเนื้อที่บน micro SD card

-Menu->Preference->-Raspberry Pi Configuration
-System->Filesystem: Expand Filesystem
-เรียบร้อย ทำการ Restart Raspberry pi ได้

3.ทำการ ตั้งค่า Remote Desktop

-Control panel -> System and Security -> System

-เลือก Remote Setting

-ติ๊กเครื่องหมายถูก Allow Remote Assistance connections to this computer -เปิด Remote Desktop Connection ขึ้นมา (Start->Remote Desktop Connection)
-กรอก ip ของเครื่อง Raspberry Pi -> connect -> Yes
-username:pi password:raspberry

Happy Ending(ขอบคุณครับ)

ปล.วิธีการหากรณีที่ไม่มีจอMonitor ip อาจจะใช้โปรแกรม Advance IP Scanner แล้ว แสกน ไปที่ขอบเขต ipตั้งแต่ (192.168.137.0 - 192.168.137.255) -เลือก Name:raspberrypi.mshome.net IP:192.168.137.XXX Manufacturer:Raspberry Pi Foundation MAC address X7:89:1X:11:12:XX จากนั้น ให้ใช้โปรแกรม putty เพื่อ remote เข้าไปยัง บอร์ด Raspberry pi username:pi password:raspberry
Share:

วันจันทร์ที่ 23 พฤษภาคม พ.ศ. 2559

Raspberry Pi Blink 3 LED by Python (Left to Right)

Blink 3 LED by Python (Left to Right)
การทดลองเพื่อเปิดไฟ LED จากซ้ายไปขวา
โดยใช้ GPioของบอร์ด Raspberry Pi

อุปกรณ์ที่ผมใช้ทำได้แก่

1.Raspberry pi board
2.สายไฟ Jumper (F-F)
3.LED@100

Link install RPi GPIO Library -> link 
ภาพแสดง GPIO ของบอร์ด RPi


sudo idle

File -> New File &-> save (ชื่อไฟล์).py



Run(F5)

ต่อวงจรตามที่ได้เขียนโค้ดไว้ได้เลยครัชผม
Share:

วันอาทิตย์ที่ 22 พฤษภาคม พ.ศ. 2559

Raspberry Pi Blink 3 LED Switch(Left to Right || Right to Left)

Raspberry Pi Blink 3 LED Switch(Left to Right || Right to Left)
การทดลอง เพื่อใช้สวิทช์กดปุ่มหนึ่ง เพื่อให้ LED เลื่อนตำแหน่ง
การกระพริบจาก ซ้ายไปขวด และ อีกปุ่มหนึ่ง เพื่อให้ LED
เลื่อนตำแหน่งจาก ขวาไปซ้าย
อุปกรณ์
1.Raspberry pi Board
2.LED 3 LED
3.Switch 2 Switch
วิธีการทดลอง
  ขั้นแรก พิมพ์
  sudo idle 
  File -> new หรือ open -> save  (ชื่อไฟล์).py
  ใส่ code รัวๆ


  run code (F5)
  จากนั้น ต่อวงจรตามที่ ได้ SET GPIO ไว้ตาม code ครับ
  ทดลอง กด สวิทช์ ที่ต่อกับ GPIO 16 จะทำให้ LED ขยับจาก GPIO 11 -> GPIO 12 -> GPIO 15 
        กดสวิทช์ ที่ต่อกับ GPIO 18 จะทำให้ LED ขยับจาก GPIO 15 -> GPIO 12 -> GPIO 11
Share:

วันเสาร์ที่ 21 พฤษภาคม พ.ศ. 2559

Raspberry Pi Read Temperature DS18B20 python

Read Temperature DS18B20
การทดลองอ่านค่าอุณหภูมิ ด้วย DS18B20 sensor เพื่อรู้ว่าขณะนี้อุณหภูมิ 
ในที่ๆเราอยู่ตอนนี้ มีอุณหภูมิเป็นตัวเลขกี่องศา
อุปกรณ์
1.DS18B20 Sensor
2.Raspberry Pi Board
3.Resistor 10k

สามารถ ทำได้ตามการทดลองดังนี้

sudo apt-get update
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio

sudo nano /boot/config.txt

you will see some syntax like this.

dtparam=i2c0=on
dtparam=spi=on
dtparam=is2=on
dtoverlay=w1-gpio

ทำการทดสอบ Sensor เพื่อให้รู้ว่า Sensor ทำงานหรือไม่

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices
ls
cd 28-xxxxxxxxxxxx
ls
cat w1_slave


เขียน code (ชื่อไฟล์).py

import os
import glob
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
        f = open(device_file, 'r')
        lines = f.readlines()
        f.close()
        return lines

def read_temp():
        lines = read_temp_raw()
        while lines[0].strip()[-3:] != 'YES':
                time.sleep(0.2)
                lines = read_temp_raw()
        equals_pos = lines[1].find('t=')
        if equals_pos != -1:
                temp_string = lines[1][equals_pos+2:]
                temp_c = float(temp_string) / 1000.0
                temp_f = temp_c * 9.0 / 5.0 + 32.0
                return temp_c, temp_f


while True:
        print"temperature = " + str(read_temp())
        time.sleep(0.3)


You Will See Result Below on Picture:
อ้างอิงจาก
ds3noob.org
matthewmoisen.com
Share:

วันศุกร์ที่ 20 พฤษภาคม พ.ศ. 2559

Raspberrypi-Temperature-ThingSpeak

Rpi-Temp-ThingSpeak
การทดลองอ่านค่าจาก DS18B20 เพื่อส่งอุณหภูมิจาก Raspberry Pi
เข้าไปยัง Web Thingspek เพื่อรู้ว่าอุณหภูมิที่ ตำแหน่งของบอร์ด 
Raspberry Pi มีกี่องศา อาจใช้ส่งข้อมูลอุณหภูมิระยะไกลได้
อุปกรณ์
1.Raspberry Pi Board
2.DS18B20 Sensor
3.Resistor 10k

Raspberrypi Temperature ThingSpeak

sudo nano /boot/config.txt

แก้ไขที่บรรทัด #dtoverlay=w1-gpio and เอาcommentออก dtoverlay=w1-gpio

Install DS18B20

sudo pip install ds18b20
sudo modprobe w1-gpio
sudo modprobe w1-therm

ทดสอบว่า sensor ใช้ได้ไหม

cat /sys/bus/w1/devices/28-XXXXXXXXXXX/w1_slave

ถ้าใช้ได้จะแสดงภาพดังนี้

จากนั้นก็ละเลงโค้ดสร้างไฟล์.py python

import requests
import httplib, urllib
import urllib2
import os
import glob
import time

api_key='7X4YOL4NSS4TYQ4S'
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
        f = open(device_file, 'r')
        lines = f.readlines()
        f.close()
        return lines

def read_temp():
        lines = read_temp_raw()
        while lines[0].strip()[-3:] != 'YES':
                time.sleep(0.2)
                lines = read_temp_raw()
        equals_pos = lines[1].find('t=')
        if equals_pos != -1:
                temp_string = lines[1][equals_pos+2:]
                temp_c = float(temp_string) / 1000.0
                temp_f = temp_c * 9.0 / 5.0 + 32.0
                return temp_c


while True:
        temp = str(read_temp())
        payload = {'api_key':api_key,'field1':temp}
        r = requests.post('https://api.thingspeak.com/update',params=payload)
        print"temperature = " + str(read_temp())
        time.sleep(0.3)

จะได้ผลลัพธ์ตามภาพดังนี้ อย่าลืมใส่ API KEY(Write) ที่ได้จากThingSpeak ของท่านด้วยนะครับ



Share: