วันอาทิตย์ที่ 24 กุมภาพันธ์ พ.ศ. 2562
Arduino and Motor Control
void setup(){
pwmSetup();
}
void loop(){
int Duty = 128;//type in the voltage you want. Refer to guide on limiting comonents
OCR2A = Duty;
}
void pwmSetup(){//just run once at setup
pinMode(11, OUTPUT); //OCR2A
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20); //phase correct pwm 31250hz
TCCR2B = _BV(CS20);//change this as datasheet says to mainly get different pwm frequencies
OCR2A = 0;
OCR2B = 0;
}
Arduino เครื่องตรวจจับควัน MQ-2
โปรแกรม Code Arduino
int LedRED = 12;
int LEDgreen = 11;
int smokeA0 = A0;int sensorThres = 400; //ตั้ง ค่าความหนาของตวัน แก๊ส ก๊าซที่ 400void setup() {
Serial.begin(9600);
pinMode(LedRED, OUTPUT);
pinMode(LEDgreen, OUTPUT);
pinMode(smokeA0, INPUT);
}void loop() {
int analogSensor = analogRead(smokeA0);
Serial.print("Pin A0: ");
Serial.println(analogSensor);if (analogSensor > sensorThres) {
digitalWrite(LedRED, HIGH);
digitalWrite(LEDgreen, LOW);
}else {
digitalWrite(LedRED, LOW);
digitalWrite(LEDgreen, HIGH);
}
delay(100);
}
"Embedded Space"
///////////////////////////////////////////////////////////////////// // Author: RSP @ ESL (Embedded System Lab), KMUTNB // Date: 2014-APR-03 // Target Board: Arduino (ATmega328P, 5V, 16MHz) // Arduino IDE: version 1.0.5 // Description: // This Arduino sketch demonstrates how to implement a simple human // motion detection system based on the AMN34112 sensor module. // When the motion is detected, the system triggers an alarm // (LED blinking and buzzer sound). //////////////////////////////////////////////////////////////////////// /* Board INT0 INT1 INT2 INT3 INT4 INT5 Uno, Ethernet 2 3 Mega2560 2 3 21 20 19 18 Leonardo 3 2 0 1 7 */ #define ALARM_PIN (3) #define BLINK_TIME_MS (1000) #define WAIT_TIME_MS (3000) typedef enum {ST_CHECK=0, ST_ALARM, ST_WAIT} state_type; state_type state; uint32_t ts; volatile uint16_t event_count = 0; void eint_isr() { event_count++; } void setup() { pinMode( ALARM_PIN, OUTPUT ); digitalWrite( ALARM_PIN, LOW ); delay( 3000 ); ts = millis(); event_count = 0; state = ST_CHECK; attachInterrupt( 0, eint_isr, RISING ); // use INT0 } void loop() { static uint8_t led_state = 0; switch (state) { case ST_CHECK: if ( event_count > 1 ) { state = ST_ALARM; // change state to ST_ALARM ts = millis(); // update timestamp } break; case ST_ALARM: if ( millis() - ts >= BLINK_TIME_MS ) { state = ST_WAIT; // change state to ST_WAIT ts = millis(); led_state = 0; digitalWrite( ALARM_PIN, led_state ); // turn off alarm } else { led_state ^= 1; digitalWrite( ALARM_PIN, led_state ); // toggle alarm delay(50); } break; case ST_WAIT: if ( millis() - ts >= WAIT_TIME_MS ) { event_count = 0; // reset event counter state = ST_CHECK; } break; default: state = ST_CHECK; break; } } ////////////////////////////////////////////////////////////////////////
การใช้งาน 7 Segment กับ Arduino ตอนที่ 1 7 Segment หลักเดียว
void setup() {
DDRD = 0xFF; // เซ็ตให้ขา 0 - 7 เป็นเอาต์พุต
PORTD = 0xF9; // เซ็ตให้แสดงค่า 0xF9 ออกไป (แสดงเลข 1 ใน 7 Segment Comon Anode)
}
void loop() { }
หรือ
void setup() {
DDRD = 0xFF; // เซ็ตให้ขา 0 - 7 เป็นเอาต์พุต
PORTD = 0x06; // เซ็ตให้แสดงค่า 0xF9 ออกไป (แสดงเลข 1 ใน 7 Segment Comon Cathode)
}
void loop() { }
เมื่ออัพโหลดโค้ดลงไป ก็จะแสดงเลข 1 ออกทาง 7 Segment
หากต้องการแสดงเลขอื่นๆก็จะต้องทำแบบเดียวกัน คือ การพิจาณาแถบที่ต้องติด นำมาวางเป็นตาราง คิดเป็นเลขฐาน 2 แลัวแปลงเป็นเลขฐาน 16
แต่เพื่อความง่าย ผมได้คิดมาให้แล้ว และเอาลงอาร์เรย์ดังนี้
int num[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F };
เวลาจะใช้งานก็ใช้คำสั่งเพียง PORTD = num[1]; ก็จะแสดงเลข 1 ออกมา และหากใช้เป็น PORTD = num[9]; ก็จะแสดงเลข 9 ออกมา ซึ่งโค้ดเต็มๆ คือ
int num[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F };
void setup() {
DDRD = 0xFF;
PORTD = num[9];
}
Sensor DS18B20 Arduino วัดอุณหภูมิในน้ำ
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 //กำหนดขา
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DallasTemperature sensors(&oneWire);
void setup(void) {
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library"); Serial.println("by 9arduino.com");
sensors.begin();
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library"); Serial.println("by 9arduino.com");
sensors.begin();
}
void loop(void) {
Serial.print(" Requesting temperatures...");
sensors.requestTemperatures(); //อ่านข้อมูลจาก library
Serial.print("Temperature is: ");
Serial.print(sensors.getTempCByIndex(0)); // แสดงค่า อูณหภูมิ sensor 0
delay(1000);
Serial.print(" Requesting temperatures...");
sensors.requestTemperatures(); //อ่านข้อมูลจาก library
Serial.print("Temperature is: ");
Serial.print(sensors.getTempCByIndex(0)); // แสดงค่า อูณหภูมิ sensor 0
delay(1000);
}
Arduino กับ Nodejs
#include <DHT.h> //เรียกใช้ library DHT.h #define DHTPIN 14 // เลือกขา GPIO14 #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE, 15); void setup() { Serial.begin(9600); dht.begin(); //เริ่มเรียกการใช้งาน dht จาก library } void sendJsonString(float temperature, float humidity, String dataStatus, String reason){ /* { "data" : { "temperature" : 0.0, // 0,NaN "humidity" : 0.0 }, "status" : "OK", //OK, Error "reason" : "" } */ String s = ""; s += String("{"); s += String("\"data\" : {"); s += String("\"temperature\" : " + String(temperature) + "," ); s += String("\"humidity\" : " + String(humidity) ); s += String("} ," ); s += String("\"status\" : \"" + dataStatus + "\"" + "," ); s += String("\"reason\" : \"" + error + "\""); s += String("}"); Serial.println(s); } void loop() { // Reading temperature or humidity takes about 250 milliseconds! delayMicroseconds(250); // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) delay(2000); // Set up data float h = dht.readHumidity(); float t = dht.readTemperature(); // check if returns are valid, if they are NaN (not a number) then something went wrong! float temperature = t; float humidity = h; String dataStatus = "OK"; String reason = ""; if (isnan(t) || isnan(h)) { temperature = 0; humidity = 0; dataStatus = "Error"; reason = "Failed to read from DHT"; } // Send data sendJsonString(temperature, humidity, dataStatus, reason);
เซ็นเซอร์วัดความชื้นในดิน Soil Moisture Sensor
Example By ArduinoAll | |
GND - GND | |
VCC - 3.3 หรือ 5V | |
AOUT - A0 | |
*/ | |
void setup() { | |
Serial.begin(9600); | |
} | |
void loop() { | |
int val = analogRead(A0); | |
Serial.println(val); | |
delay(500); |
การใช้งาน 3-axis Accelerometer Module (MMA7361) กับ Arduino
//Programa : Conectando Acelerômetro 3 Eixos MMA7361 no Arduino
//Autor : FILIPEFLOP
#include <AcceleroMMA7361.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
AcceleroMMA7361 accelero;
int
x;
int
y;
int
z;
void
setup()
{
lcd.begin(16, 2);
Serial.begin(9600);
accelero.begin(13, 12, 11, 10, A0, A1, A2);
accelero.setARefVoltage(3.3);
//sets the AREF voltage to 3.3V
accelero.setSensitivity(LOW);
//sets the sensitivity to +/-6G
accelero.calibrate();
lcd.setCursor(0,0);
lcd.print(
"X: "
);
lcd.setCursor(8,0);
lcd.print(
"Y: "
);
lcd.setCursor(0,1);
lcd.print(
"Z: "
);
}
void
loop()
{
x = accelero.getXRaw();
lcd.setCursor(3,0);
lcd.print(x);
y = accelero.getYRaw();
lcd.setCursor(11,0);
lcd.print(y);
z = accelero.getZRaw();
lcd.setCursor(3,1);
lcd.print(z);
Serial.print(
"nx: "
);
Serial.print(x);
Serial.print(
"ty: "
);
Serial.print(y);
Serial.print(
"tz: "
);
Serial.print(z);
delay(500);
}
ต่อวงจร LED ไฟกระพริบ Arduino
ขาดิจิตอลของ Arduino สามารถส่งค่าที่เป็นดิจิตอลออกมาได้ โดยสัญญาณดิจิตอลนั้นถ้าอธิบายให้เข้าใจง่ายๆ มีอยู่ 2 รูปแบบคือ HIGH (มีไฟ) และ LOW (ไม่มีไฟ)
• pinMode(xx, OUTPUT); คือการตั้งค่าให้ให้ขาอะไรเป็นเอาท์พุท เช่น ขา 11 , 12 , 13 เป็นต้น
เปิดโปรแกรม Arduino (IDE) เขียน โค้ดดังนี้
void setup()
• pinMode(xx, OUTPUT); คือการตั้งค่าให้ให้ขาอะไรเป็นเอาท์พุท เช่น ขา 11 , 12 , 13 เป็นต้น
• digitalWrite() คือคำสั่งที่ใช้ควบคุมการจ่ายไฟ สำหรับแบบ Digital จะมีอยู่ 2 ค่าคือ HIGH (มีไฟ) และ LOW (ไม่มีไฟ)
• delay() คือคำสั่งที่ใช้หน่วงเวลา หรือนับเวลานั่นเองโดยจะมีหน่วยเป็น มิลลิวินาที (1 วินาที = 1000 มิลลิวินาที) 500 จึงเท่ากับ ครึ่งวินาที
เปิดโปรแกรม Arduino (IDE) เขียน โค้ดดังนี้
void setup()
{
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
delay(500);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(500);
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
เมื่อเขียนเสร็จแล้วให้เรากด Upload เพื่อตรวจสอบโค้ดโปรแกรมที่เราเขียนว่าถูกต้องหรือไม่พร้อมทั้งส่งโค้ดโปรแกรมที่เราเขียนไปยังบอร์ด Arduino UNO ผ่านทางสาย USB
Button Digital Input
มาลองทำวงจร Arduino ง่ายๆแต่ได้ความรู้ คือวงจรที่มีทั้ง Input และ Output แบบ Digital โดยเราจะทำวงจรที่ใช้ Input Pin ของ Arduino มารับค่าการกดปุ่ม แล้วนำค่านั้นไปควบคุม LED อีกทีโดยใช้ Output Pin โดยเราจะใช้วงจรแบบ Pull-Down เพื่อกำหนดให้ LED ติดเมื่อกดปุ่มเท่านั้น | |||||||||||||
|
สร้างนาฬิกาดิจิตอลด้วยบอร์ด Arduino
เป็นการประยุกต์ใช้โมดูลนับเวลา RTC และโมดูล Clock Display มาใช้ร่วมกัน ควบคุมด้วยบอร์ด Arduino หลักการทำงานเพียงแค่ใช้บอร์ด Arduino ในการเซ็ตค่าเวลาลงไปในโมดูล RTC จากนั้นโมดูล RTC จะนับเวลาไปเรื่อยๆ แล้วจึงให้ Arduino ดึงค่าเวลาออกมาจากโมดูล RTC แล้วนำไปแสดงผลที่โมดูล Clock Display
การตั้งเวลาจะทำผ่าน Serial Monitor เนื่องจากเป็นโค้ดง่ายๆ สำหรับเรียนรู้การใช้โมดูล RTC กับโมดูล Clock Display และเรียนรู้การอ่านข้อมูลที่ส่งผ่าน Serial
- ต่อขา VCC ของ RTC เข้ากับ 5V ของ Arduino
- ต่อขา GND ของ RTC เข้ากับ GND ของ Arduino
- ต่อขา SCL ของ RTC เข้ากับ SCL หรือขา A5 ของ Arduino
- ต่อขา SDA ของ RTC เข้ากับ SDA หรือขา A4 ของ Arduino
- ต่อขา VCC ของโมดูล Clock Display เข้ากับ 5V ของ Arduino
- ต่อขา GND ของโมดูล Clock Display เข้ากับ GND ของ Arduino
- ต่อขา CLK ของโมดูล Clock Display เข้ากับ D2 ของ Arduino
- ต่อขา DIO ของโมดูล Clock Display เข้ากับ D3 ของ Arduino
โค้ด
/* DigitalClockRTC1307 By IOXhop.com */ #include <Wire.h> #include <Time.h> #include <DS1307RTC.h> #include <TM1637Display.h> // Module connection pins (Digital Pins) #define CLK 2 #define DIO 3 unsigned long previousMillis; bool showdot = false; String SerialGET = ""; TM1637Display display(CLK, DIO); void setup() { Serial.begin(9600); } void loop() { tmElements_t tm; if (!RTC.read(tm)) { tm.Hour = 0; tm.Minute = 0; tm.Second = 0; RTC.write(tm); } display.write(tm.Hour/10, 0); display.write(tm.Hour%10, 1); display.write(tm.Minute/10, 2); display.write(tm.Minute%10, 3); // Dot blink unsigned long currentMillis = millis(); if (currentMillis-previousMillis>500){ previousMillis = currentMillis; display.dotShow(showdot=!showdot); } while (Serial.available()) { char c = Serial.read(); if (c == '\n') { int Hour, Min, Sec; if (sscanf(SerialGET.c_str(), "%d:%d:%d", &Hour, &Min, &Sec) == 3) { tm.Hour = Hour; tm.Minute = Min; tm.Second = Sec; RTC.write(tm); Serial.print("Set to "); Serial.print(Hour); Serial.print(":"); Serial.print(Min); Serial.print(":"); Serial.print(Sec); Serial.println(); }else{ Serial.println("Invalid format, Please enter Hour:Min:Sec"); } SerialGET = ""; } else SerialGET += c; } }
สมัครสมาชิก:
บทความ (Atom)
มินิโปรเจค Arduino Calculator (แก้ไข)
https://www.electronicshub.org/arduino-calculator/ #include <LiquidCrystal.h> ...
-
void setup() { DDRD = 0xFF; // เซ็ตให้ขา 0 - 7 เป็นเอาต์พุต PORTD = 0xF9 ; // เซ็ตให้แสดงค่า 0xF9 ออกไป (แสดงเลข 1 ใน 7 Segment C...
-
void setup() { pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); pinMode(7, OUTPUT); pinM...
-
https://www.electronicshub.org/arduino-calculator/ #include <LiquidCrystal.h> ...