Arduino Basic

ตัวอย่างพื้นฐานการใช้ Arduino  ในส่วน Digital Analog  และ ตัว DS18B20 Temperature sensor ทั้งในด้าน Input และ Output       

 

  • Digital Output     
  • Digital Input
  • Analog Input  
  • DS18B20 Temperature sensor          

 

Digital Output 

การป้อนค่า output ออกมาจาก Board Arduino  ไปแสดงผลที่ LED


Device  Digital Output   

1

ตัวอย่างการต่อวงจร 

digital input

Code ที่ใช้โหลดลง Board

// the setup function runs once when you press reset or power the board
void setup() {
 // initialize digital pin 13 as an output.
 pinMode(12, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
 digitalWrite(12, HIGH); // turn the LED on (HIGH is the voltage level)
 delay(1000); // wait for a second
 digitalWrite(12, LOW); // turn the LED off by making the voltage LOW
 delay(1000); // wait for a second
}

   Video ผลการทำงาน

================================================

Digital Input

การรับค่า Input จากการกด pushButton แล้วนำค่าที่ได้ไปแสดงผลที่ LED


Device  Digital Input2

ตัวอย่างการต่อวงจร 

digital input1

Code ที่ใช้โหลดลง Board

// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 12; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
 // initialize the LED pin as an output:
 pinMode(ledPin, OUTPUT);
 // initialize the pushbutton pin as an input:
 pinMode(buttonPin, INPUT);
}

void loop() {
 // read the state of the pushbutton value:
 buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
 // if it is, the buttonState is HIGH:
 if (buttonState == HIGH) {
 // turn LED on:
 digitalWrite(12, HIGH);
 } else {
 // turn LED off:
 digitalWrite(12, LOW);
 }
}

Video ผลการทำงาน

================================================

Analog Input 

การรับค่า Input แบบ Analog โดยใช้ ตัวต้านทานที่ปรับค่าได้ จะแสดงที่ Moniter


Device  Analog  Input3

ตัวอย่างการต่อวงจร 

Analog input

Code ที่ใช้โหลดลง Board

const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
void setup() {
 // initialize serial communications at 9600 bps:
 Serial.begin(9600);
}
void loop() {
 // read the analog in value:
 sensorValue = analogRead(analogInPin);
 // map it to the range of the analog out:
 outputValue = map(sensorValue, 0, 1023, 0, 255);
 // change the analog out value:
 analogWrite(analogOutPin, outputValue);
 // print the results to the serial monitor:
 Serial.print("sensor = ");
 Serial.print(sensorValue);
 Serial.print("\t output = ");
 Serial.println(outputValue);
 // wait 2 milliseconds before the next loop
 // for the analog-to-digital converter to settle
 // after the last reading:
 delay(2);
}

 Video   ผลการทำงาน

 

================================================

DS18B20 Temperature sensor    

การรับผลจากตัววัดอุณหภูมิ DS18B20 แล้วแสดงผลที่ Moniter เป็นอุญหภูมิที่วัดได้


Device  DS18B20 Temperature sensor     4

ตัวอย่างการต่อวงจร 

DS18S20-hookup

Code ที่ใช้โหลดลง Board

// test_DS1820
#include <OneWire.h>
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(" Temperature = ");
 Serial.print(celsius);
 Serial.print(" Celsius, ");
 Serial.print(fahrenheit);
 Serial.println(" Fahrenheit");
 }
}


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);

}

Video ผลการทำงาน

================================================

Advertisements