Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Max Lab

#1


ร้าน IOXhop ขอเสนอบอร์ด Arduino Uno R3 SMD ราคา 180 บาท ! ใช้งานได้แบบเดียวกับ Arduino Uno R3 เพียงแต่ไอซีอบนบอร์ดใช้ SMD และใช้ไอซี USB to TTL เบอร์ CH340G แทน เมื่อติดตั้งไดร์เวอร์ และโปรแกรม Arduino เลือกบอร์ด Arduino Uno R3 ก็สามารถโปรแกรมใช้งานได้เลย

ทางร้านได้ทดสอบก่อนส่งแล้ว สามารถใช้งานได้แน่นอน หากไม่สามารถใช้งานได้ สามารถส่งกลับมาเปลี่ยนได้เลยครับ ;D



สินค้านี้ให้สาย USB ที่ใช้ร่วมกับบอร์ดนี้ไปให้ด้วยครับ

สามารถสั่งซื้อได้ที่ : Arduino Uno R3 SMD พร้อมสาย USB
-----------------------------------------
ร้าน IOXhop - www.ioxhop.com
นายสนธยา  นงนุช
#2
ขออนุญาตขยายตัวอักษรให้ใหญ่นะครับ จะได้มองเห็นชัดๆ



ตัวนี้เป็นกราว์ดแยกครับ มีออปโต้อยู่ใต้ปริ้นสำหรับวงจรป้อนกลับป้องกันไฟตก ไฟเกิน สายช๊อต Over Load งานชิ้นนี้เป็นงานจีนแท้ๆครับ ไม่ใช่จีนแดงแบบที่ขายในที่ชาร์จโทรศัพท์อันละ 20 บาท อันนั้นคุณภาพไม่ดีครับ อันนี้ด้านล่างปริ้นมีไอซีสวิทชิ้ง SMD อยู่ ผมลองใช้งานกับ ESP8266 ESP-12 เปิดค้างไว้ 3 - 4 วันได้แล้วครับ ยังทำงานปกติดี



สามารถนำไปต่อขาออกมา แล้วเอาไปเสียบกับแผ่นปริ้นใช้งานได้เลยครับ รองรับแรงดันไฟตั้งแต่ 85 - 250V ครับ แรงดันคงที่แน่นอน

ราคาเพียง 90 บาท

สนใจสั่งซื้อกับผมโดยตรงเลยก็ได้ครับ 084 107 9779 หรือสั่งผ่านหน้าเว็บ http://www.ioxhop.com/product/19/%E0%B8%AA%E0%B8%A7%E0%B8%B4%E0%B8%97%E0%B8%8A%E0%B8%B4%E0%B9%88%E0%B8%87-220v-to-5v-700ma

ของมีแค่ 4 ตัว ถ้าสนใจรีบๆสั่งนะครับ เดี๋ยวจะหมดซะก่อน ;D
#3
Projects / oLamp คืนชีพ
May 01, 2015, 10:47:13 AM
ที่ล่มเพราะใช้ ESP8266 แล้วสตรีมมิ่งผ่านโปรโตคอล TCP ไม่มีสเถียรภาพครับ เลยยกเลิกโครงการเลย หลักยกเลิกแล้วเลยเอาโค้ดมาแบ่งกันครับ เผื่อใครสนใจจะนำไปพัฒนาต่ออีก

ESP8266 by Arduino IDE

#include <ESP8266WiFi.h>

char ssid[20] = "Max Home 2";
char pass[20] = "987654321";
char host[20] = "maxlabapi.com";
int tcpPort = 8086;

WiFiClient client;

void ConnectHost();

void setup() {
  Serial.begin(115200);
  delay(10);
 
  // put your setup code here, to run once:
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, pass);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected"); 
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  Serial.println("Start TCP client");
  ConnectHost();
 
  /* client.print("{\"a\":\"NwDv\",\"uid\":\"5540911a6d5d905477a3199d\"}");
  while(client.connected()){
    while(client.available()){
      String line = client.readStringUntil('\r');
      Serial.println(line);
    }
  }
 
  client.flush();
  client.stop();
  Serial.println("closing connection");
  */
}

void loop() {
  if (!client.connected())
    ConnectHost();
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.println(line);
    if (line == "T"){
      client.print("{\"a\":\"K\"}");
    }
  }
  delay(100);
}

void ConnectHost(){
  while (!client.connect(host, tcpPort)) {
    Serial.println("Connection failed");
    delay(1000);
  }
  Serial.println("Connection success");
}


TCP Server ใช้ภาษา NodeJS ร่วมกับ MongoDB ครับ

#!/bin/env node

// Settings
var settings = {
WebservicePort: 8080,
SocketPort: 8086,
loginDB: {
host: '127.0.0.1',
port: 27017,
user: "admin",
pass: "YOUPASSWORD",
dbName: "olamp",
}
};

var collection = {};
var clients = [];
var NumID = 0;

// Retrieve
var MongoClient = require('mongodb').MongoClient;
net = require('net'),
app = require('express')(),
bodyParser = require('body-parser'),
multer = require('multer'),
sha1 = require('sha1'),
md5 = require('MD5');

// function
var passEncode = function(psw){
return md5(sha1(psw) + "thisoLampPass");
}
var isEmail = function(email) {
    var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    return re.test(email);
}
var testLogin = function(collection, login, callback) {
collection.findOne({email: login.email, pass: login.pass}, function(err, items) {
if (typeof callback === 'function')
callback((items ? false : true), (items ? items._id.toHexString() : 0));
});
}
var isDataLogin = function(login, callback) {
if (typeof callback !== 'function')
return false;
if (!login.email || !login.pass){
callback('Please enter your email address and password');
return;
}
if (!isEmail(login.email)){
callback('Email Address in invalid format');
return;
}
if (login.pass.length < 6){
callback('Passwords must be at least 6 characters');
return;
}
callback(false);
}

// Connect to the db
MongoClient.connect('mongodb://' + settings.loginDB.user + ':' + settings.loginDB.pass + '@' + settings.loginDB.host + ':' + settings.loginDB.port + '/' + settings.loginDB.dbName, function(err, db) {
if(!err) {
console.log("We are connected");

/* db.listCollections({name: 'member'}, function(err, collinfo) {
if (!collinfo)
db.createCollection('member');
});

db.listCollections({name: 'device'}, function(err, collinfo) {
if (!collinfo)
db.createCollection('device');
});

db.listCollections({name: 'clients'}).next(function(err, collinfo) {
if (!collinfo)
db.createCollection('clients');
}); */

// Collection
collection.member = db.collection('member');
collection.device = db.collection('device');
collection.clients = db.collection('clients');

collection.device.update({}, { $set: { socket: -1 }}, function (err, result) {
if (err) console.log(err);
});

/* collection.member.find().toArray(function(err, items) {
console.log(items);
var jsonTotext = JSON.stringify(items);
}); */

// Keep track of the chat clients
// var clients = [];

console.log('TCP Server');

net.createServer(function (socket) {
// Put this new client in the list
var clientsId = ++NumID;
clients[clientsId] = socket;

socket.on('data', function (data) {
console.log(data.toString());
try{
var revData = JSON.parse(data.toString());
if (revData.a == 'NwDv'){
collection.device.insert({ uid: revData.uid, status: 0, socket: clientsId }, function(err, result) {
if (err) console.log("MongoDB err: " + err);

var dvID = result.ops[0]._id;
socket.write('id:' + dvID + "\r");
});
}else if (revData.a == 'LiN'){
collection.device.updateOne({_id: revData.id}, { $set: { socket: clientsId }}, function(err, result) {
if (err) console.log("MongoDB err: " + err);

socket.write("OK\r");
});
}else if(revData.a == 'K'){
setTimeout(function(){
socket.write("T\r");
// console.log('TestConK' + clientsId);
}, 10000);
}
} catch (e) {
console.log(e);
}
});

var onEndSocket = function() {
console.log(clients.indexOf(socket) + ' end');
clients.splice(clients.indexOf(socket), 1);
}

// Remove the client from the list when it leaves
socket.on('end', onEndSocket);

socket.on('error', onEndSocket);

setTimeout(function(){
socket.write("T\r");
// console.log('TestCon' + clientsId);
}, 10000);

console.log((clients.length - 1) + ' connected');

// socket.write("Welcome " + socket.name + "\n");
}).listen(settings.SocketPort, function() {
console.log("Port: " + settings.SocketPort + " listener");
});

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data

app.all('/', function (req, res) {
res.send('<h1>Hello! this oLamp system.</h1>');
});

app.post('/register', function (req, res) {
var post = req.body;
// console.log(post);
if (!post){
res.json({ err: 'post null for \'name\' \'email\' and \'pass\'' });
return;
}
isDataLogin({email: post.email, pass: post.pass}, function(err) {
if (err){
res.json({ err: err });
return;
}
if (!post.name){
res.json({ err: 'Please enter your name' });
return;
}
if (post.name.length < 3){
res.json({ err: 'Name must be at least 3 characters' });
return;
}

var name = post.name,
email = post.email,
pass = post.pass,
ENpass = passEncode(post.pass);

collection.member.findOne({email: email }, function(err, items) {
if (err) {
console.log("MongoDB err: " + err);
res.json({ err: err });
return;
}

if (items){
res.json({ err: 'Sorry. This email account is already used.' });
return;
}

collection.member.insertOne({ name: name, email: email, pass: ENpass }, function(error, result) {
if (err) {
console.log("MongoDB err: " + err);
res.json({ err: err });
return;
}
res.json({ err: false });
});
});
});
});

app.post('/login', function (req, res) {
var post = req.body;
// console.log(post);
if (!post){
res.json({ err: 'post null for \'email\' and \'pass\'' });
return;
}
isDataLogin({email: post.email, pass: post.pass}, function(err) {
if (err){
res.json({ err: err });
return;
}

var email = post.email,
pass = post.pass,
ENpass = passEncode(post.pass);

testLogin(collection.member, {email: email, pass: ENpass}, function(err) {
if (err){
res.json({ err: 'email or password is incorrect.' });
return;
}
res.json({ err: false });
});
});
});

app.get('/device/list', function (req, res) {
var get = req.query;
if (!get){
res.json({ err: 'get null for \'email\' and \'pass\'' });
return;
}
isDataLogin({email: get.email, pass: get.pass}, function(err) {
if (err){
res.json({ err: err });
return;
}

var email = get.email,
pass = get.pass,
ENpass = passEncode(get.pass);

testLogin(collection.member, {email: email, pass: ENpass}, function(err, userid) {
if (err){
res.json({ err: 'login fail.' });
return;
}

collection.device.find({ uid: userid }).toArray(function(err, items) {
if (err)
console.log(err);

res.json({err: false, device: items});
});
});
});
});

app.listen(settings.WebservicePort, function() {
console.log('Starting web service port ' + settings.WebservicePort);
});
}else{
console.log(err);
}
});


ปัญหาที่ผมเจอคือเปิด Socket แล้ว แต่พอเชื่อมต่อไปได้ซัพพัก ตัว ESP8266 ก็หลุดออกจากเซิฟเวอร์ไปครับ ต้องเชือมต่อใหม่ กว่าจะเชื่อมต่อได้ก็ยากเย็นมากครับ Fail อยู่หลายรอบเลย อีกอย่างคือพอหลุดจากเซิฟเวอร์แล้ว เซิฟเวอร์ก็ไม่รับรู้ว่าหลุดไปแล้วด้วยครับ มันเลยไม่ยอมปิด Socket ทิ้งไปซักที :-[
ตสใปกติแล้วถ้าโครงการนี้สำเร็จ ก็แค่ผลิตตัวชิ้นอุปกรณ์อย่างเดียว ส่วนเรื่องเซิฟเวอร์เราเอาไปไว้บน Cloud ครับ มีแอพควบคุมได้จากทุกส่วนบนโลก

Edit: ในขณะที่ความหวังริปหรี่กับ ESP8266 (03) ก็พบว่า ESP-12 น่าจะทำงานได้ดีกว่า โครงการนี้อาจจะมีชีวิตกลับมาอีกครั้งครับ
#4
AC Voltage Detector หรือเครืองวัดไฟแบบไม่ต้องสัมผัส ใช้ในการตรวจสอบว่าภายในสายไฟ ปลั้กเสียบ มีกระแสไฟไหลอยู่หรือไม่ครับ โดยใช้ IC CMOS เบอร์ 74HC14 (เบอร์อื่นๆก็ใช้ได้ครับ)
แนวความคิดมาจากปากกาวัดไฟอันนี้ครับ (ดูน่าใช้กว่าทำเองเยอะเลย 555)


วงจร




เอามาจิ้มๆเล่น
ในรูปจะเห็นจั้มเปอร์เยอะๆ เพราะออกแบบ PCB ผิดครับ (ตามเคย = =")








### Ans. ###
บล็อกไร้สาระ ไม่มีอะไรที่น่าสนใจอยู่ครับ : AC Voltage Detector : เครื่องวัดไฟ 220V ไม่ต้องสัมผัส (ขอโปรโมทเว็บซะหน่อย)
#5
หลอด LED 220V ผมอยากจะหรี่แสงมันลงครับ ลองใช้วงจร SSR ที่ใช้ BT136 กับ MOC3020 แล้วใช้

int pin = 9;
int i = 20;

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(pin, OUTPUT);
  pinMode(13, INPUT);
}

void loop() {
  for (int i=0;i<=100;i++){
    analogWrite(pin, (255/100)*i);
    delay(50);
  }
}

ปรากฏว่าไม่เวิคเลยครับ :(
#6
มือ 1 ตอนนี้ถูกสุดๆอยู่ 110 บาทครับ ตัวที่เอามาขายนี่มีทั้งโดนไฟแล้ว แล้วก็ยังไม่โดน สามารถใช้งาน โปรแกรมได้ปกติครับ ;D

ตามรูปเลยครับ (ก็ว่าตอนถ่ายมันก็ชัดดีนะ ทำไมเอาลงคอมแล้วมันเบลอ) มีดังนี้
- ESP-01 โดนไฟไปแล้ว โปรแกรมไปแล้วประมาณ 5 - 6 ครั้ง มี 2 ตัวครับ
- ESP-07 ยังไม่เคยโดนไฟเลย ซื้อมาก็ดองไว้ :-X มี 1 ตัว <-- ขายแล้วครับ
- ESP-12 ตอนมีคนเอามาขายก็รีบซื้อ แล้วก็ไม่ได้เอาออกมาเลยครับ ยังไม่เคยโดนไฟซักครั้ง มี 1 ตัว <-- ขายแล้วครับ

ทุกตัวขายที่ 80 บาทครับ ตัว ESP-07, 12 มีบอร์ดแปลงตามที่เห็น รับส่ง EMS อย่างเดียว ค่าส่งที่ 70 บาทครับ
ลองคิดถึงเรื่องความคุ้ม ราคาที่ผมซื้อมาแบบถูกสุดๆ 130 บาท ทั้ง 07 และ 12 ค่าส่งจากร้าน 50 ถ้าซื้อกับร้าน 130 * 2 + 50 = 310 บาท ถ้าซื้อจากผมแค่ 80 * 2 + 70 = 230 บาท ความคุ้มอยู่ที่ 310 - 230 = 80 บาท !

ติดต่อ
E-mail: max30012540[at]hotmail.com
FB: fb.me/maxthai2
#7
นั่งคิด นั่งมั่วมาหลายคืน ไม่ได้ซักทีครับ :'(
#8


เพราะมีปัญหา จึงต้องแก้ปัญหา  ;D เครื่องตั้งเวลานี้ออกแบบมาใช้สำหรับตั้งเวลาต้มมาม่า นอกจากมันจะเป็นเครื่องตั้งเวลาเพื่อแจ้งเตือนแล้ว ยังมีฐานเป็นแผ่นอคิลิกใส ช่วยให้สามารถปิดชามหรือถ้วยได้อย่างสะดวกสบาย อีกทั้งยังสามารถดูความอืดได้ทันทีเนื่องจากมันใส (แต่จะโดนไอน้ำเกาะ อาจจะมองยากหน่อย)

วงกลม

คิสตอลแล้วแต่จะใช้นะครับ แต่ผมใช้ 4MHz ในรูปด้านบนจะไม่เห็นทรานซิสเตอร์เพราะว่าตอนออกแบบปริ้ดออกแบบผิดครับ ส่วนไมโครฯ ผมใช้เบอร์ PIC16F627A ครับ

โค้ก

// MaMa Time by Max Lab

int TimeS = 0, i, t, Ar = 0;

void OnNumber(int number);

void main() {
  // set port
  TRISA = 0x00;
  TRISB = 0x0C;
  PORTA = 0;
  PORTB = 0x02;
  TimeS = 1;
 
  while(1){
    while(!PORTB.F3){
      if (PORTB.F2){
        delay_ms(200);
        while(PORTB.F2) ;
        TimeS++;
        if (TimeS > 5)
          TimeS = 1;
        OnNumber(TimeS);
      }
    }
    delay_ms(200);
    while(PORTB.F3) ;
    for (i=TimeS;i>=1;i--){
      for (t=0;t<=59;t++){
        OnNumber(i);
        delay_ms(500);
        OnNumber(i-1);
        delay_ms(500);
      }
    }
    PORTB = 0x10;
    while(!PORTB.F3) ;
    delay_ms(200);
    while(PORTB.F3) ;
    PORTB = 0x02;
    TimeS = 1;
    delay_ms(200);
  }
}
void OnNumber(int number){
  switch(number){
    case 1:
      PORTA = 0;
      PORTB = 0x02;
      break;
    case 2:
      PORTA = 0;
      PORTB = 0x03;
      break;
    case 3:
      PORTA = 0x01;
      PORTB = 0x03;
      break;
    case 4:
      PORTA = 0x09;
      PORTB = 0x03;
      break;
    case 5:
      PORTA = 0x0D;
      PORTB = 0x03;
      break;
    default:
      PORTA = 0x00;
      PORTB = 0x00;
      break;
  }
}


ผมเขียนด้วย mikroC นะครับ เบิร์นลงไปแล้วต่อวงจรก็น่าจะใช้งานได้เลย

รายละเอียดอื่นๆ (มีสาระและไม่มีสาระ) อ่านได้ในบล็อกของผมเองครับ
http://www.elec-za.com

ขอบคุณอ่านครับ

#9
ตั้งแต่มีคนออกให้เขียนโปรแกรมจาก Arduino IDE ลง ESP8266 ได้ ก็ทำให้อะไรๆง่ายขึ้นเยอะเลยครับ ทั้งการดีบัค และการเขียนโปรแกรม แต่ติดตรงที่เอกสารมันน้อยไปหน่อย (จริงๆมีน้อยมากเลยละ รายละเอียดแต่ละฟังก์ชั่นก็มีมาให้) ผมเลยคิดว่าจะทำแอพขึ้นมา เป็นแอพง่ายๆ ใช้ควบคุมพอร์ตของ ESP8266 ที่ใช้การเชื่อมต่อผ่าน WiFi



สำหรับแอพตัวนี้นะครับ ผมแนะนำให้ใช้งานร่วมกับ NodeMCU ก็จะทำให้ง่ายต่อการทดลอง แต่ต้องมีการเปรียบเทียบขากันซักนิดนึง เพราะว่า NodeMCU มีการจัดขาบนบอร์ดไม่ได้เรียงแบบเดียวกับที่เรียงในตัวแอพ



ในแอพสามารถแก้ IP ได้นะครับ ใช้สำหรับรันในโหมด STA หรือ STA+AP ซึ่งจะทำให้ยืดหยุ่นในการใช้งาน

สนใจสามารถโหลดได้เลยที่ : https://play.google.com/store/apps/details?id=com.ioesp.android
สำหรับโค้ดที่จะอัพลง ESP8266 สามารถก๊อบมาจากในบล็อกวิธีใช้ได้เลย : http://www.elec-za.com/ioesp-app/
แอพพัฒนาด้วยภาษาบนเว็บ แล้ว Export ออกมาเป็นแอพด้วย PhoneGap ครับ ไฟล์โค้ดของแอพแจกเป็นโอเพ่นซอร์สครับ โหลดได้ที่ : https://github.com/max30012540/ioESP

ยังไงถ้าใช้งานแล้วพบบัค หรือจะสอบถาม สามารถคอมเม้นมาได้เลยครับ  ;D

ต้องขอโทษ MOD ด้วยนะครับ ทีแรกนึกว่ามันควรจะอยู่ห้อง Projects เพราะมันคือโปรเจคที่ทำเสร็จจนเผยแพร่แล้ว :-X