Translate

Monitor Suhu & Kelembaban (Temperature & Humidity) Sensor DHT22 dan NodeMCU ESP8266 Interface 7Segment Modul

Monitor Suhu & Kelembaban (Temperature & Humidity) Sensor DHT22 dan NodeMCU ESP8266 Interface 7Segment Modul


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor suhu dan kelembaban atau temperature dan humidity dengan menggunakan sensor DHT22. alat ini menggunakan interface 7Segment modul yang mana untuk menampilkan nilai suhu dan nilai kelembaban. untuk lebih jelasnya berikut adalah koding dan skemanya.



a. Skema dan Komponen






b. Program Arduino IDE

#include <TM1637Display.h>
#include "DHT.h"

#define DHTPIN D7

#define CLK D2
#define DIO D1
#define CLK2 D5
#define DIO2 D6

#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

float t,h;
int dataadc;
TM1637Display display1(CLK, DIO);
TM1637Display display2(CLK2, DIO2);
void setup()
{
  display1.setBrightness(0x0f); //seting brightness maksimal  
  display2.setBrightness(0x0f); //seting brightness maksimal   
  dht.begin();
}

void loop()
{  
  
 h = dht.readHumidity();
 t = dht.readTemperature();
  
display1.showNumberDec(t); 
display2.showNumberDec(h); 

delay(200);  
}



c. VIDEO HASILNYA




Monitor PH dan Flow Air via Blynk 2.0 WEMOS D1

Monitor PH dan Flow Air via Blynk 2.0 WEMOS D1


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara untuk membuat sebuah alat yang dapat memonitor PH dan Flow air dengan menggunakan aplikasi Blynk 2.0. untuk mikrokontroller yang dipakai yaitu Wemos D1 sehingga bisa digunakan untuk IOT. untuk lebih jelasnya berikut adalah komponen dan kodingnya.


a. Komponen dan Skema





b. Program Arduino IDE

#define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "YTRE6wKQ--abc"
#define BLYNK_TEMPLATE_NAME "monitor phflow"
#define BLYNK_AUTH_TOKEN "k8HmPp9dHXPjalYVO9cymS30_imbh6ty"

#include <Wire.h>
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

#define SENSOR  2
 
long currentMillis = 0;
long previousMillis = 0;
int interval = 1000;
boolean ledState = LOW;
float calibrationFactor = 4.5;
volatile byte pulseCount;
byte pulse1Sec = 0;
float flowRate;
unsigned long flowMilliLitres;
unsigned int totalMilliLitres;
float flowLitres;
float totalLitres;
int cacah;
int dataadc;
float ph;

BlynkTimer timer;

char ssid[] = "hotspothpku";
char pass[] = "123456789";

void kirimdata()
{
  Blynk.virtualWrite(V0,ph);
  Blynk.virtualWrite(V1,flowRate);
}
 
void IRAM_ATTR pulseCounter()
{
  pulseCount++;
}

void setup() 
{
  Serial.begin(115200);
  lcd.begin(); //setting lcd
  lcd.clear(); //clear screen
  lcd.noCursor(); //tidak ada kursor
  
  pinMode(SENSOR, INPUT_PULLUP);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  timer.setInterval(1000L, kirimdata);
  
  pulseCount = 0;
  flowRate = 0.0;
  flowMilliLitres = 0;
  totalMilliLitres = 0;
  previousMillis = 0;
 
  attachInterrupt(digitalPinToInterrupt(SENSOR), pulseCounter, FALLING);
}

void loop() 
{

dataadc = analogRead(A0);
ph = (dataadc + 11.026)/59.3;

 currentMillis = millis();
  if (currentMillis - previousMillis > interval) 
  {
    
    pulse1Sec = pulseCount;
    pulseCount = 0;
 
    flowRate = ((1000.0 / (millis() - previousMillis)) * pulse1Sec) / calibrationFactor;
    previousMillis = millis();
 
    flowMilliLitres = (flowRate / 60) * 1000;
    flowLitres = (flowRate / 60);
 
    totalMilliLitres += flowMilliLitres;
    totalLitres += flowLitres;
     
}

lcd.setCursor(0,0);
lcd.print("P/F:");  
lcd.print(ph,1);  
lcd.print("/");
lcd.print(flowRate,1);  
lcd.print("  ");

if(flowRate > 30.0){  
lcd.setCursor(0,1);
lcd.print("BOCOR     ");  
}

if(flowRate <= 30.0){  
lcd.setCursor(0,1);
lcd.print("TDK BOCOR");  
}

if(ph > 7 ){
lcd.setCursor(10,1);
lcd.print("BASA  ");    
}

if(ph < 5 ){
lcd.setCursor(10,1);
lcd.print("ASAM  ");    
}

if((ph > 5 )&&(ph <= 8)){
lcd.setCursor(10,1);
lcd.print("NORMAL");    
}

Blynk.run();
timer.run(); // Initiates BlynkTimer
}



c. VIDEO HASILNYA



Cara Upload Koding ke Arduino Nano (Terbaru)

Cara Upload Koding ke Arduino Nano (Terbaru)


         Seringnya error terjadi saat upload koding ke Arduino nano disebabkan firmware yang dipakai oleh arduino nano berbeda sehingga cara uploadnya juga ada sedikit perubahan yang harus dilakukan yaitu menyamakan versi arduinonya sesuai firmware yang dipakai arduino nano. berikut adalah tutorial cara upload koding ke arduino nano step by step.

File PDF bisa di download di link berikut. LINK DOWNLOAD









Kendali Motor Stepper Driver TB6600 Fitur Kendali Arah Putaran Menggunakan Potensio

Kendali Motor Stepper Driver TB6600 Fitur Kendali Arah Putaran Menggunakan Potensio


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat diatur arah putaran dan sudutnya dengan menggunakan potensio, jadi jika potensio ini berputar ke kanan maka motor stepper juga berputar ke kanan, jika potensio berputar ke arah kiri maka motor stepper juga akan bergerak ke arah kiri. jika potensio diam/stop maka motor stepper juga berhenti. untuk lebih jelasnya berikut adalah koding dan skemanya.
 


a. Skema Alat



b. Program Arduino IDE

#include <Wire.h>

#define dirPin 12
#define stepPin 11

int dataadc1,dataadc2,dataadcold;
int i;
int batasatas;
int batasbawah;

void setup() {
  Serial.begin(9600);
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
}

void loop() {

  dataadc1 = analogRead(A0);
  delay(100);

  Serial.print(dataadc1);
  Serial.print(" : ");
  Serial.println(dataadc2);
  batasatas = dataadc2 + 15;
  batasbawah = dataadc2 - 15;


if(dataadc1 > batasatas){ 
  Serial.println("KIRI");  
  for(i=0;i<30;i++){       
  digitalWrite(dirPin, LOW); // putar CW jarum jam
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  digitalWrite(stepPin, LOW);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  }
  }

  if(dataadc1 < batasbawah){  
  Serial.println("KANAN");   
  for(i=0;i<30;i++){    
  digitalWrite(dirPin, HIGH); // putar CCW jarum jam
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  digitalWrite(stepPin, LOW);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  }
  }

  if(dataadc1 == dataadc2){  
  Serial.println("STOP"); 
  }
  
dataadc2 = analogRead(A0);
delay(100);  
}


c. VIDEO HASILNYA


Kendali Motor Stepper Menggunakan Driver TB6600 dan Fitur Kendali Arah Putar dan Sudut Serta Kembali ke Posisi Awal

Kendali Motor Stepper Menggunakan Driver TB6600 dan Fitur Kendali Arah Putar dan Sudut Serta Kembali ke Posisi Awal


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat dikendalikan menggunakan pushbutton untuk arahnya dan potensio untuk mengatur sudut dari putaran motor stepper. alat ini juga tersedia fitur kembali ke posisi awal. untuk lebih jelasnya berikut adalah koding skemanya.


a. Skema Alat



b. Program Arduino IDE

#include <Wire.h>
#define dirPin 13
#define stepPin 12

int btkiri = 11;
int btkanan = 10;
int btreset = 9;
int dataadc;
int btkirix;
int btkananx;
int btresetx;
int kiri;
int kanan;
int pusat;
int langkah1,langkah2;
int derajat;
int i;

void setup() {
  Serial.begin(9600);
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
  pinMode(btkiri,INPUT_PULLUP);
  pinMode(btkanan,INPUT_PULLUP);
  pinMode(btreset,INPUT_PULLUP);  
}

void loop() {
dataadc = analogRead(A0);
btkirix = digitalRead(btkiri);
btkananx = digitalRead(btkanan);
btresetx = digitalRead(btreset);

derajat = map(dataadc,0,1023,0,180);
Serial.print(pusat);
Serial.print(" : ");
Serial.print(langkah1);
Serial.print(" : ");
Serial.print(langkah2);
Serial.print(" : ");
Serial.println(derajat);

if(btkirix == 0){
  delay(500);
  for(i=0;i<derajat;i++){       
  digitalWrite(dirPin, LOW); // putar CW jarum jam
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  digitalWrite(stepPin, LOW);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  }
  kanan++;    
}

if(btkananx == 0){
  delay(500);
  for(i=0;i<derajat;i++){       
  digitalWrite(dirPin, HIGH); // putar CCW jarum jam
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  digitalWrite(stepPin, LOW);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  }
  kiri++;    
}


  pusat = kanan - kiri;
  langkah1 = kiri * derajat;
  langkah2 = kanan * derajat;
 
if(btresetx == 0){
  delay(500); 
  if(pusat > 0){ //ke kanan
  for(i=0;i<langkah2;i++){ //balik ke kiri       
  digitalWrite(dirPin, HIGH); // putar CCW jarum jam
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  digitalWrite(stepPin, LOW);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  }
  pusat = 0;
  kiri = 0;
  kanan = 0;
  }

  if(pusat < 0){ // ke kiri
  for(i=0;i<langkah1;i++){ //nalik ke kanan      
  digitalWrite(dirPin, LOW); // putar CCW jarum jam
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  digitalWrite(stepPin, LOW);
  delayMicroseconds(700); // ganti delay untuk mempercepat motor
  }
  pusat = 0;
  kiri = 0;
  kanan = 0;
  }
}

delay(200);
}


c. VIDEO HASILNYA



Monitor BPM Wireless NRF24L01 Multiple Transmitter Receiver MAX30100 Server Thingspeak

Monitor BPM Wireless NRF24L01 Multiple Transmitter Receiver MAX30100 Server Thingspeak


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang dapat berfungsi sebagai penghitung Bpm pada 2 alat yang berbeda, alat ini menggunakan sistem wireless dengan 2 transmitter dan 1 receiver. untuk komunikasi wireless ini dengan menggunakan modul NRF24L01 pada 3 buah device tersebut. untuk sensor Bpmnya menggunakan MAX30100. untuk lebih jelasnya berikut adalah koding skemanya.



a. Skema Transmitter - Receiver



2. Program Arduino TRANSMITTER 1

#include <Wire.h>
#include <MAX30100_PulseOximeter.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

LiquidCrystal_I2C lcd(0x27,16,2); //library lcd

MAX30100* pulseOxymeter;   //library

float sensorValue;
float tegangan;
int bpmku;
int counter;
float spo;
float bpm;
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
int cacah;
 
PulseOximeter pox;

uint32_t tsLastReport = 0;
String hrData = "";

void onBeatDetected()
{
//    Serial.println("Beat!");
}

RF24 radio(9, 10); // CE, CSN

const uint64_t pipe = 0xE8E8F0F0E1LL;
float dataku[4];
float b;

void setup(void) {
lcd.begin();
lcd.clear();
lcd.noCursor();

Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);

pulseOxymeter = new MAX30100();
 
if (!pox.begin()) {
 //Serial.println("FAILED");
  for(;;);
 } else {
 //Serial.println("SUCCESS");
}
 
  pox.setIRLedCurrent(MAX30100_LED_CURR_11MA);
  pox.setOnBeatDetectedCallback(onBeatDetected);

}

void loop(void){

pox.update();    
b = pox.getHeartRate();
//s = pox.getSpO2();

lcd.setCursor(0,0);
lcd.print("BPM1:");
lcd.print(b,1);
lcd.print("   ");

dataku[0] = 231;  // code to identify the transmitter. 
dataku[1] = b; 
radio.write( dataku, sizeof(dataku) );
 
}



3. Program Arduino TRANSMITTER 2

#include <Wire.h>
#include <MAX30100_PulseOximeter.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

LiquidCrystal_I2C lcd(0x27,16,2); //library lcd

MAX30100* pulseOxymeter;   //library

float sensorValue;
float tegangan;
int bpmku;
int counter;
float spo;
float bpm;
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
int cacah;
float b,s,t;
float dataku[4];
 
PulseOximeter pox;

uint32_t tsLastReport = 0;
String hrData = "";

void onBeatDetected()
{
//    Serial.println("Beat!");
}

RF24 radio(9, 10); // CE, CSN

const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(void) {
lcd.begin();
lcd.clear();
lcd.noCursor();

Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);

pulseOxymeter = new MAX30100();
 
if (!pox.begin()) {
 //Serial.println("FAILED");
  for(;;);
 } else {
 //Serial.println("SUCCESS");
}
 
  pox.setIRLedCurrent(MAX30100_LED_CURR_11MA);
  pox.setOnBeatDetectedCallback(onBeatDetected);

}

void loop(void){

pox.update();    
s = pox.getHeartRate();

lcd.setCursor(0,0);
lcd.print("BPM2:");
lcd.print(s,1);
lcd.print("   ");

dataku[0] = 434;  // code to identify the transmitter. 
dataku[1] = s; 
radio.write( dataku, sizeof(dataku) );
 
}



4. Program Arduino Receiver

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); //library lcd

//Replace your wifi credentials here
const char* ssid     = "HOTSPOTHPKU";
const char* password = "123456789";

String apiKey = "UYT689JHVVNMI9UV";     //  Enter your Write API key from ThingSpeak
const char* resource = "/update?api_key=";
const char* server = "api.thingspeak.com";

int msg[1];
float b,s,t;
float data1; 
float data2; 
float dataku[4];
int cacah;

unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
 
RF24 radio(D4,D3);

const uint64_t pipe = 0xE8E8F0F0E1LL;

WiFiClient  client;

void setup(){
 
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();

// Connect to WiFi network
  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");

lcd.begin();
lcd.clear();
lcd.noCursor();
lcd.setCursor(0,0);
lcd.print("BPM1:");

}

void loop(){

if (radio.available()) { 
  
radio.read(dataku, sizeof(dataku));  
Serial.print(dataku[0]);
Serial.print(" : ");
Serial.println(dataku[1]);

if(dataku[0] == 231.0) // header
{
  data1 = dataku[1]; 
  lcd.setCursor(0,0);
  lcd.print("BPM1:");
  lcd.print(data1,1);
  lcd.print("   ");
}

if(dataku[0] == 434.0) // header
{
  data2 = dataku[1]; 
  lcd.setCursor(0,1);
  lcd.print("BPM2:");
  lcd.print(data2,1);
  lcd.print("   ");
}
 
}

if(cacah > 500){
cacah = 0;  
kirim();  
}

cacah++;
delay(10);      
}

void kirim(){
  
if (client.connect(server,80))   //   "184.106.153.149" or api.thingspeak.com
{
                            
                             String postStr = apiKey;
                             postStr +="&field1=";
                             postStr += String(data1);
                             postStr += "\r\n\r\n";

                             client.print(String("GET ") + resource + apiKey + "&field1=" + data1 + "&field2=" + data2 + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "Connection: close\r\n\r\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.println(". Send to Thingspeak.");
                        }
                        
          client.stop();

          Serial.println("Waiting...");
// thingspeak needs minimum 15 sec delay between updates, i've set it to 30 seconds
  delay(5000);
  
}



5. VIDEO HASILNYA