Plot Suhu sensor temperature arduino


Setelah sebelumnya kita membuat Sensor suhu sederhana Arduino dan koneksi serial data arduino ke Phyton ke php. Kali ini kita mencoba untuk membuat grafik atau plot suhu yang kita dapatkan melalui data serial.

Script yang digunakan untuk arduino tidak kita rubah, namun disarankan untuk menempatkan delay (misal” delay(1000);) agar plot dapat berjalan dengan baik

float temp;
int tempPin = 2;
 
void setup()
{
Serial.begin(9600);
}
 
void loop()
{
 temp = analogRead(tempPin);
 temp = temp * 0.48828125; //(5V * 100C)/1024
 Serial.print("TEMPERATURE = ");
 Serial.print(temp);
 Serial.print("*C");
 Serial.println();
 delay(1000);
}

Sedangkan untuk display grafik plot dengan koneksi serial kita menggunakan pemograman python dengan script sebagai berikut:

import serial # import Serial Library
import numpy  # Import numpy
import matplotlib.pyplot as plt #import matplotlib library
from drawnow import *
 
tempF= []
arduinoData = serial.Serial('/dev/ttyACM0', 9600) #Creating our serial object named arduinoData
plt.ion() #Tell matplotlib you want interactive mode to plot live data
cnt=0
 
def makeFig(): #Create a function that makes our desired plot
    plt.ylim(int(temp)-5,int(temp)+5)                                 #Set y min and max values
    plt.title('My Live Streaming Sensor Data')      #Plot the title
    plt.grid(True)                                  #Turn the grid on
    plt.ylabel('Temp C')                            #Set ylabels
    plt.plot(tempF, 'ro-', label= str(temp) + ' Celcius')       #plot the temperature
    plt.legend(loc='upper left')                    #plot the legend
  

while True: # While loop that loops forever
    while (arduinoData.inWaiting()==0): #Wait here until there is data
        pass #do nothing
    arduinoString = arduinoData.readline() #read the line of text from the serial port
    kata2=arduinoString.rsplit(None,3)[2]
    dataArray = kata2.split('*')
    temp = float( dataArray[0])            #Convert first element to floating number and put in temp
    tempF.append(temp)                     #Build our tempF array by appending temp readings
    drawnow(makeFig)                       #Call drawnow to update our live graph
    plt.pause(.000001)                     #Pause Briefly. Important to keep drawnow from crashing
    cnt=cnt+1
    if(cnt>50):                            #If you have 50 or more points, delete the first one from the array
        tempF.pop(0)                       #This allows us to just see the last 50 data point

hasil grafik yang kita dapatkan sebagai berikut:

Screenshot from 2015-09-19 00:00:28

koneksi serial data arduino ke Phyton ke php


dari postingan sebelum nya membuat sensor temperature sederhana kita ingin menampilkan dalam web browser berikut step2 nya:

– install python
– install pyserial

script python sebagai berikut

import serial
ser = serial.Serial('/dev/ttyACM1',9600)
print ser.readline()

simpan dalam format .py misal deteksisuhu.py

setelah itu coba run di terminal

python /home/alibaba/deteksisuhu.py

akan muncul di terminal text yg kita lihat di serial monitor arduino, namun tidah berulang

setelah itu jika ingin ditampilkan dalam format php ketik script sebagai berikut

<?php
//header("refresh" 2");
$command = "python /home/alibaba/suhutest.py 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) )
{
 echo fread($pid, 256);
 flush();
 ob_flush();
 usleep(100000);
}
pclose($pid);
//header("Refresh: 2")
//header('Refresh: 1; url=localhost/arduinotemp15.php');
?>

jika permission denied
ubah permission dengan mengetik

sudo chmod 666 /dev/ttyACM1

tampilan dalam browser akan sebagai berikut

Screenshot from 2015-04-30 01:23:04

Sensor suhu sederhana Arduino


bahan:
Arduino (Uno)
LM 35


LM 35 mempunyai 3 kaki yaitu (Vin, Out, ground).

LM35 Vin – Arduino +5V
LM35 Reference – Arduino A1
LM35 ground – Arduino Ground

Upload kode sebagai berikut:

float temp;
int tempPin = 2;
 
void setup()
{
Serial.begin(9600);
}
 
void loop()
{
 temp = analogRead(tempPin);
 temp = temp * 0.48828125; //(5V * 100C)/1024
 Serial.print("TEMPERATURE = ");
 Serial.print(temp);
 Serial.print("*C");
 Serial.println();
}

setelah itu lihat data di serial sebagai berikut (ctr+shift+m)

Screenshot from 2015-04-29 21:09:51
untuk pengembangan selanjutnya bisa dapat ke LCD, atau dengan mengunakan kombinasi If dan LeD

Water level Sensor dengan Arduino


Peralatan:

Beardboard & Jumper
Arduino (saya menggunakan Uno)
Resistor 470 ohm (3)
Resistor 22 Kohm (4)
Transistor BC548C (3)
LED (3)
Kabel secukupnya

kali ini saya menggunakan sensor sebanyak 3 titik sebab itu resistor, transistor dan LED juga berjumlah 3. Khusus resistor 22 Kohm diperlukan 1 buah lagi.

Media percobaan
Botol bekas yang sudah dibolongi sebanyak 4 titik. Bolong 1 adalah tegangan referensi, bolong 2,3, dan 4 adalah sensor yang kita inginkan.

masukan keempat kabel kedalam lobang masing2 botol tersebut, gunakan lem plastik agar tidak keluar air. setelah itu sambungkan ke Breadboard untuk selanjutnya masuk kedalam rangkaian

untuk lebih jelasnya lihat rangkaian berikut

DSC_0659

untuk program arduino sebagai berikut


byte sensorPin[] = {8, 9, 10};
byte ledPin[] = {11, 12, 13}; 
const byte sensors = 3;
void setup() {
  for(int i = 0; i < sensors; i++) {
     pinMode(sensorPin[i], INPUT); 
     pinMode(ledPin[i], OUTPUT);
  }
 
}


 
void loop() {
 
  if(digitalRead(sensorPin[0]) == HIGH && digitalRead(sensorPin[1]) == LOW && digitalRead(sensorPin[2]) == LOW )   {                                                                                                                                                                                                                          
        digitalWrite(ledPin[0], HIGH);
        digitalWrite(ledPin[1], HIGH);
        digitalWrite(ledPin[2], HIGH);
     } 
  else if (digitalRead(sensorPin[0]) == HIGH && digitalRead(sensorPin[1]) == HIGH && digitalRead(sensorPin[2]) == HIGH){
        digitalWrite(ledPin[0], LOW);
        digitalWrite(ledPin[1], LOW);
        digitalWrite(ledPin[2], LOW);
       }    
       
  else if (digitalRead(sensorPin[0]) == HIGH && digitalRead(sensorPin[1]) == LOW && digitalRead(sensorPin[2]) == HIGH){
        digitalWrite(ledPin[0], HIGH);
        digitalWrite(ledPin[1], HIGH);
        digitalWrite(ledPin[2], LOW);
       }    
       
  else if (digitalRead(sensorPin[0]) == LOW && digitalRead(sensorPin[1]) == HIGH && digitalRead(sensorPin[2]) == HIGH){
        digitalWrite(ledPin[0], HIGH);
        digitalWrite(ledPin[1], LOW);
        digitalWrite(ledPin[2], LOW);
       }    
       
       
  delay(5);  
 }


kira-kira hasil yang akan dihasilkan sebagai berikut

untuk advancenya dapat mengunakan alarm, motor, pompa, LCD, dan lain lain

Link inspirasi: http://www.electroschematics.com/9964/arduino-water-level-indicator-controller/