Translate

Arduino Alat Pengukur Berat dan Tinggi Badan Menggunakan Sensor Loadcell Hx711 dan Hc-SRF04 Interface LCD Oled dan Hasilnya bisa di Print !!!

Arduino Alat Pengukur Berat dan Tinggi Badan Menggunakan Sensor Loadcell Hx711 dan Hc-SRF04 Interface LCD Oled dan Hasilnya bisa di Print !!!

          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berfungsi untuk mengukur berat dan tinggi badan dengan menggunakan Arduino dan juga hasilnya bisa di print menggunakan printer thermal. alat ini sangat cocok sekali jika digunakan untuk sehari-hari atau di klinik yang mmbutuhkan data tinggi dan berat badan. untuk lebih jelasnya berikut adalah daftar komponen dan programnya. 




a. Arduino Uno




b. Modul Amplifier Hx711




c. Sensor Jarak HC-SRF04




d. Loadcell 300kg




e. Lcd Oled




f. Printer Thermal






g. Program Arduino IDE

#include <Wire.h>
#include "HX711.h"
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);
#include <SoftwareSerial.h>
SoftwareSerial Thermal(2, 3);

// HX711.DOUT    - pin #4
// HX711.PD_SCK    - pin #5

#define trigPin 6
#define echoPin 7

HX711 scale(4, 5);       

long duration, distance;
float tera = 0;
int berat;
float fix;
int x;
char tmp_string1[8];
char tmp_string2[8];

int zero=0;
int heatTime = 80;
int heatInterval = 255;
char printDensity = 15;
char printBreakTime = 15;

void draw(void) {

  itoa(distance, tmp_string1, 8);
  itoa(berat, tmp_string2, 8);
  
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr(5, 25, "S= ");
  u8g.drawStr(30, 25, tmp_string1);
  u8g.drawStr(5, 40, "W= ");
  u8g.drawStr(30, 40, tmp_string2);
 
}

void initPrinter()
{
 //Modify the print speed and heat
 Thermal.write(27);
 Thermal.write(55);
 Thermal.write(7); //Default 64 dots = 8*('7'+1)
 Thermal.write(heatTime); //Default 80 or 800us
 Thermal.write(heatInterval); //Default 2 or 20us
 //Modify the print density and timeout
 Thermal.write(18);
 Thermal.write(35);
 int printSetting = (printDensity<<4) | printBreakTime;
 Thermal.write(printSetting); //Combination of printDensity and printBreakTime

}

int btprint = A0;
int btprintx;

void setup() {

  Wire.begin();
  Serial.begin(9600);
  Thermal.begin(9600); // to write to our new printer
  initPrinter();
 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(btprint, INPUT_PULLUP);
 
  scale.set_scale(2280.f);       // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();                  // reset the scale to 0


  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
 
 
}

void loop() {

  btprintx = digitalRead(btprint);
 
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
 
  Serial.println(distance);
 
  berat = scale.get_units(10) * -1;
  fix = ((berat + 1.523) / 0.223) - tera ;

 if (fix < 0 ) {
  fix = 0;
  }

    u8g.firstPage();
  do {
    draw();

  } while( u8g.nextPage() );

 
  scale.power_down();                  
  delay(1000);
  scale.power_up();
 
if (btprintx == 0) {    

   Serial.println("print ready");
   Serial.println("printing....");
   delay(1000);

  //print
  Thermal.write(27);
  Thermal.write(45);
  Thermal.write(1);
  Thermal.print("Tinggi= ");
  Thermal.print(distance);
  Thermal.println(" cm");
  Thermal.print("Berat= ");
  Thermal.print(berat);
  Thermal.println(" kg");
  Thermal.write(10);
  Thermal.write(10);

  }

}



h. VIDEO HASILNYA









Nodemcu esp8266 Monitor Suhu LM35 Interface 7Segment IC 4094

Nodemcu esp8266 Monitor Suhu LM35 Interface 7Segment IC 4094


           Pada kesempatan kali ini saya akan menjelaskan mengenai sebuah alat menggunakan interface 7segment untuk monitor suhu ruangan. alat ini menggunakan sensor LM35 dan juga mikrokontroller Nodemcu esp8266. nodemcu memiliki satu buah pin ADC sehngga bisa digunakan untuk satu sensor analog. untuk lebih jelasnya berikut adalah program dan daftar komponennya.




a. Nodemcu ESP8266




b. Interface 7segment IC 4094




c. Sensor Suhu LM35






d. Program Arduino IDE

#include <ESP8266WiFi.h>

byte zero  = B00000011;
byte one   = B10011111;
byte two   = B00100101;
byte three = B00001101;
byte four  = B10011001;
byte five  = B01001001;
byte six   = B01000001;
byte seven = B00011111;
byte eight = B00000001;
byte nine  = B00001001;

    int latchPin = D1;  //Pin connected to STR(pin 1) of HEF4094
    int clockPin = D2; //Pin connected to CP(pin 3) of HEF4094
    int dataPin = D3;  //Pin connected to D(pin 2) of HEF4094
    int oe = D0;  //Pin connected to OE(pin 2) of HEF4094

    int temp;
    int x = 5;
    int y;
   
void setup() {   
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      pinMode(oe, OUTPUT);
      //digitalWrite(oe,LOW);
          
      digitalWrite(oe,HIGH);

 }
    
void loop()
 {

  int sensorValue = analogRead(A0);
  int suhu = sensorValue * (3.3/1023) * 100;

  temp = suhu;
  int ribuan = temp / 1000;
  temp = temp % 1000;
  int ratusan = temp / 100;
  temp = temp % 100;
  int puluhan = temp / 10;
  int satuan = temp % 10;

 switch(ribuan){
   case 0:
   ribuan = zero;
   break;
   case 1:
   ribuan = one;
   break;
   case 2:
   ribuan = two;
   break;
   case 3:
   ribuan = three;
   break;
   case 4:
   ribuan = four;
   break;
   case 5:
   ribuan = five;
   break;
   case 6:
   ribuan = six;
   break;
   case 7:
   ribuan = seven;
   break;
   case 8:
   ribuan = eight;
   break;
   case 9:
   ribuan = nine;
   break;  
 }

 switch(ratusan){
   case 0:
   ratusan = zero;
   break;
   case 1:
   ratusan = one;
   break;
   case 2:
   ratusan = two;
   break;
   case 3:
   ratusan = three;
   break;
   case 4:
   ratusan = four;
   break;
   case 5:
   ratusan = five;
   break;
   case 6:
   ratusan = six;
   break;
   case 7:
   ratusan = seven;
   break;
   case 8:
   ratusan = eight;
   break;
   case 9:
   ratusan = nine;
   break;  
 }

 switch(puluhan){
   case 0:
   puluhan = zero;
   break;
   case 1:
   puluhan = one;
   break;
   case 2:
   puluhan = two;
   break;
   case 3:
   puluhan = three;
   break;
   case 4:
   puluhan = four;
   break;
   case 5:
   puluhan = five;
   break;
   case 6:
   puluhan = six;
   break;
   case 7:
   puluhan = seven;
   break;
   case 8:
   puluhan = eight;
   break;
   case 9:
   puluhan = nine;
   break;  
 }

 switch(satuan){
   case 0:
   satuan = zero;
   break;
   case 1:
   satuan = one;
   break;
   case 2:
   satuan = two;
   break;
   case 3:
   satuan = three;
   break;
   case 4:
   satuan = four;
   break;
   case 5:
   satuan = five;
   break;
   case 6:
   satuan = six;
   break;
   case 7:
   satuan = seven;
   break;
   case 8:
   satuan = eight;
   break;
   case 9:
   satuan = nine;
   break; 
 }

        digitalWrite(latchPin, HIGH); //Pull latch HIGH to send data
        shiftOut(dataPin, clockPin, LSBFIRST, satuan);
        shiftOut(dataPin, clockPin, LSBFIRST, puluhan);
        shiftOut(dataPin, clockPin, LSBFIRST, ratusan);
        digitalWrite(latchPin, LOW); //Pull latch HIGH to send data
        delay(1000);

}





e. VIDEO HASILNYA









NODEMCU ESP8266 INTERFACE 7SEGMENT MONITOR TEGANGAN ADC IC 4094 ARDUINO

NODEMCU ESP8266 INTERFACE 7SEGMENT MONITOR TEGANGAN ADC IC 4094 ARDUINO


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berfungsi untuk monitor tegangan yang telah dikonversi oleh ADC sehingga data menjadi digital. interface yang digunakan yaitu 3 buah 7segment CA yang disusun berjajar. mikrokontroller yang digunakan yaitu nodemcu esp8266. untuk lebih jelasnya berikut adalah program dan daftar komponennya.




a. Nodemcu ESP8266




b. Rangkaian 7Segment






c. Program Arduino IDE

#include <ESP8266WiFi.h>

byte zero  = B00000011;
byte one   = B10011111;
byte two   = B00100101;
byte three = B00001101;
byte four  = B10011001;
byte five  = B01001001;
byte six   = B01000001;
byte seven = B00011111;
byte eight = B00000001;
byte nine  = B00001001;


    int latchPin = D1;  //Pin connected to STR(pin 1) of HEF4094
    int clockPin = D2; //Pin connected to CP(pin 3) of HEF4094
    int dataPin = D3;  //Pin connected to D(pin 2) of HEF4094
    int oe = D0;  //Pin connected to OE(pin 2) of HEF4094

    int temp;
    int x = 5;
    int y;
   
void setup() {   
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      pinMode(oe, OUTPUT);
      //digitalWrite(oe,LOW);
          
      digitalWrite(oe,HIGH);

 }
    
void loop()
 {

  int sensorValue = analogRead(A0);

  temp = sensorValue;
  int ribuan = temp / 1000;
  temp = temp % 1000;
  int ratusan = temp / 100;
  temp = temp % 100;
  int puluhan = temp / 10;
  int satuan = temp % 10;

 switch(ribuan){
   case 0:
   ribuan = zero;
   break;
   case 1:
   ribuan = one;
   break;
   case 2:
   ribuan = two;
   break;
   case 3:
   ribuan = three;
   break;
   case 4:
   ribuan = four;
   break;
   case 5:
   ribuan = five;
   break;
   case 6:
   ribuan = six;
   break;
   case 7:
   ribuan = seven;
   break;
   case 8:
   ribuan = eight;
   break;
   case 9:
   ribuan = nine;
   break;  
 }

 switch(ratusan){
   case 0:
   ratusan = zero;
   break;
   case 1:
   ratusan = one;
   break;
   case 2:
   ratusan = two;
   break;
   case 3:
   ratusan = three;
   break;
   case 4:
   ratusan = four;
   break;
   case 5:
   ratusan = five;
   break;
   case 6:
   ratusan = six;
   break;
   case 7:
   ratusan = seven;
   break;
   case 8:
   ratusan = eight;
   break;
   case 9:
   ratusan = nine;
   break;  
 }

 switch(puluhan){
   case 0:
   puluhan = zero;
   break;
   case 1:
   puluhan = one;
   break;
   case 2:
   puluhan = two;
   break;
   case 3:
   puluhan = three;
   break;
   case 4:
   puluhan = four;
   break;
   case 5:
   puluhan = five;
   break;
   case 6:
   puluhan = six;
   break;
   case 7:
   puluhan = seven;
   break;
   case 8:
   puluhan = eight;
   break;
   case 9:
   puluhan = nine;
   break;  
 }

 switch(satuan){
   case 0:
   satuan = zero;
   break;
   case 1:
   satuan = one;
   break;
   case 2:
   satuan = two;
   break;
   case 3:
   satuan = three;
   break;
   case 4:
   satuan = four;
   break;
   case 5:
   satuan = five;
   break;
   case 6:
   satuan = six;
   break;
   case 7:
   satuan = seven;
   break;
   case 8:
   satuan = eight;
   break;
   case 9:
   satuan = nine;
   break; 
 }

        digitalWrite(latchPin, HIGH); //Pull latch HIGH to send data
        shiftOut(dataPin, clockPin, LSBFIRST, satuan);
        shiftOut(dataPin, clockPin, LSBFIRST, puluhan);
        shiftOut(dataPin, clockPin, LSBFIRST, ratusan);
        digitalWrite(latchPin, LOW); //Pull latch HIGH to send data
        delay(1000);

    }





d. VIDEO HASILNYA








ARDUINO FREQUENCY COUNTER DAN SENSOR KAPASITIF

ARDUINO FREQUENCY COUNTER DAN SENSOR KAPASITIF


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat berbasis sensor kapasitif dan frequency counter. alat ini menggunakan mikrokontroller Arduino Uno dan IC NE555. alat ini dapat digunakan untuk berbagai macam fungsi. salah satunya yaitu monitor ketinggian air atau bisa juga untuk sensor sentuhan.  



a. Arduino Uno




b. Rangkaian Sensor Kapasitf IC NE555




c. LCD 16x2 + I2C






d. Program Arduino IDE

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

int Htime;              //integer for storing high time
int Ltime;                //integer for storing low time
float period;            // integer for storing total time of a cycle
float frequency;        //storing frequency
float kapasitansi;
float kapasitansi2;

void setup() {
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  pinMode(8,INPUT);
  Serial.begin(9600);
}

void loop()
{
  
    Htime=pulseIn(8,HIGH);      //read high time
    Ltime=pulseIn(8,LOW);        //read low time
    
    period = Htime+Ltime;
    kapasitansi = period / 34.650;
    
    frequency=1000000/period;    //getting frequency with Ttime is in Micro seconds

    lcd.setCursor(0,0);
    lcd.print("C= ");
    lcd.print(kapasitansi);
    lcd.print("      ");
    lcd.setCursor(0,1);
    lcd.print("F= ");
    lcd.print(frequency);
    lcd.print("      ");
    
    Serial.println(kapasitansi);
    
    delay(1000);
}





e. Program Interface VB 6.0


Option Explicit
Dim arrdata()
Dim TotalBaca As Integer
Dim BMI As Single
Dim Keterangan As String
Const MAKSBACA = 10
Dim sHari As String
Dim aHari

Private Sub berhenti_Click()
  start.Enabled = True
    berhenti.Enabled = False
    TimerBaca.Enabled = False
End Sub

Private Sub Command2_Click()
Unload Me
End Sub

Private Sub Command3_Click()
Text1.Text = " "
Label1.Caption = " "

End Sub

Private Sub Form_Load()
Dim i As Byte
For i = 1 To 16
    ComboCOM.AddItem (i)
Next i

 aHari = Array("Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu")

End Sub

Private Sub start_Click()
Dim u As Integer

    On Error GoTo ada_eror
    
    MSComm2.CommPort = ComboCOM.Text
    MSComm2.Settings = "9600,N,8,1"
    MSComm2.RThreshold = 15
    MSComm2.InputLen = 15
    MSComm2.InputMode = comInputModeText
    MSComm2.PortOpen = True ' buka port
    
    ReDim arrdata(1 To MAKSBACA + 1)
    For u = 1 To MAKSBACA
        arrdata(u) = 0
    Next
    TotalBaca = 0
    start.Enabled = False
    berhenti.Enabled = True
    TimerBaca.Enabled = True
ada_eror:
 If ComboCOM.ListIndex < 1 Then
    MsgBox "COM berada di Nomor : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "ERROR"
    start.Enabled = True
    berhenti.Enabled = True
    ComboCOM.Text = "Pilih COM"
End If
End Sub

Private Sub Timer1_Timer()
 sHari = aHari(Abs(Weekday(Date) - 1))
 lbltanggal.Caption = "" & sHari & "," & Format(Date, "dd mmmm yyyy")
 lbljam.Caption = Format(Time, "hh:mm:ss")

Open "C:\Users\Acer\Desktop\monitor ketinggian air kapasitance\VB Interface SErial" & "\record.txt" For Append As #1
Print #1, "======================"
Print #1, " Data dalam satu menit "
Print #1, "======================"
Print #1, "Tanggal = "; lbltanggal.Caption
Print #1, "  Jam   = "; lbljam.Caption
Print #1, " NIlai  = "; Label1.Caption
Print #1,
Close #1

End Sub

Private Sub TimerBaca_Timer()
Dim strInput As String
Dim strPotong As String
Dim singleInput As Single
Dim u As Integer
    strInput = MSComm2.Input
        strPotong = strInput
        Text1.Text = Text1.Text + strPotong + vbCrLf
        singleInput = Val(strPotong)
        Label1.Caption = singleInput
        If TotalBaca >= MAKSBACA Then
            TimerBaca.Enabled = False
            If MSComm2.PortOpen = True Then MSComm2.PortOpen = False
            Call berhenti_Click
        End If
  
End Sub




f. VIDEO HASILNYA








ARDUINO NODEMCU ESP8266 FREQUENCY GENERATOR PWM

ARDUINO NODEMCU ESP8266 FREQUENCY GENERATOR PWM


        Pada kesempatan kali ini saya akan menjelaskan tentang Nodemcu yang bisa mengeluarkan pwm dengan frequency yang bisa diatur. pada percobaan kali ini yang diatur hanya frequency saja dan untuk PWM Duty Cycle tetap di kurang lebih 50 %. alat ini sangat cocok untuk difungsikan pada alat yang bermain frequency seperti Audiometri  dll. untuk lebih jelasnya berikut adalah program dan daftar komponennya.



a. NodeMCU ESP8266




b. Led 

   




c. Program Arduino IDE

#include <ESP8266WiFi.h>

uint8_t LEDpin = D6;
uint16_t dutycycle = 512;     

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

void loop(){

  int dataadc = analogRead(A0);

  analogWriteFreq(dataadc); //Freq in Hz
  analogWrite(LEDpin, dutycycle);

  Serial.println(dataadc);

 delay(200);  
}





d. VIDEO HASILNYA