Perspektif, Protokol & Prototipe
Sudah menjadi rahasia umum bahwa bahan bakar fosil hampir habis di Bumi. Akibatnya, semakin banyak orang yang bergegas mencari sumber energi alternatif dan metode untuk memproduksinya. Mengemudi mobil listrik mungkin merupakan salah satu cara untuk mengurangi penggunaan bahan bakar fosil dan juga mengurangi jumlah CO2 yang dilepaskan ke atmosfer.
Mengapa tidak lebih banyak orang mengendarai mobil listrik, mengingat betapa bergunanya mereka? Dua frasa: harga dan pengisian. Saat ini, kendaraan listrik (EV) terlalu mahal untuk masyarakat umum, dan menemukan stasiun pengisian yang baik tidak mudah. Sementara kami tidak dapat memperbaiki masalah pertama, kami dapat membantu Anda dalam membangun stasiun pengisian EV rumah sementara kota pintar mengejar.
Perspektif Mobil Listrik
Ya, salah satu hambatan utama meluasnya penggunaan kendaraan listrik adalah harganya. Sebuah kendaraan listrik yang khas, seperti Nissan Leaf, harganya bisa sama dengan SUV mewah atau sedan keluarga. Baterai memainkan peran utama dalam menentukan daya tahan sebuah mobil listrik. biaya. Meskipun “tangki bahan bakar” besar harganya mahal, semakin lama kendaraan listrik Anda dapat berjalan dengan sekali pengisian daya, semakin besar baterainya. Jadi, mengingat tidak semua orang mampu membelinya, apakah kendaraan bertenaga baterai memiliki masa depan yang cerah?
Lihatlah statistik ini.
Seperti dapat dilihat, selama lima tahun terakhir, kapasitas baterai meningkat lebih dari tiga kali lipat sementara harga per kilowatt turun lebih dari 50%. Negara-negara seperti Belanda, yang telah berjanji untuk sepenuhnya menghilangkan mesin bensin pada tahun 2025-35, menunjukkan bahwa tren ini akan terus berlanjut.
Buka Protokol Titik Pengisian
Stasiun pengisian juga telah berkembang seiring dengan pesatnya perkembangan kendaraan listrik. Di kota-kota besar, Anda dapat menemukan setidaknya beberapa stasiun pengisian EV publik. Stasiun pengisian daya hanya memakan sedikit ruang dan biasanya tidak memerlukan kasir atau staf pemeliharaan.
Sebagian besar waktu, Anda dapat membeli listrik mobil melalui aplikasi seluler tertentu. Ini akan menyalakan stopkontak yang akan memberi daya pada kendaraan listrik Anda. Namun, bagaimana stopkontak mengetahui kapan dan kendaraan listrik mana yang perlu diisi?
Ada persyaratan mendesak untuk protokol komunikasi standar karena meningkatnya jumlah pemasok sistem pengawasan dan konstruktor stasiun pengisian. Open Charge Alliance (OCA) telah memutuskan untuk mengembangkan Open Charge Point Protocol (OCPP), protokol komunikasi standar. Ini akan memungkinkan berbagai pengguna untuk menghubungkan sistem mereka melalui protokol komunikasi standar.
Bagaimana Cara Kerja OCPP?
Sebelum kita mengetahui cara kerja OCPP, mari kita lihat komponen utamanya.
- Sistem pusat — sistem manajemen titik pengisian daya yang mengelola stasiun pengisian daya dan memberi wewenang kepada pengguna.
- Titik pengisian — stasiun pengisian fisik dengan satu atau lebih konektor.
- Konektor — stopkontak listrik yang dioperasikan dan dikelola secara independen pada titik pengisian daya. Biasanya, ini adalah konektor fisik tunggal, tetapi terkadang satu outlet mungkin memiliki berbagai jenis soket fisik dan pengaturan kabel/konektor yang ditambatkan.
Hasilnya, semua titik pengisian daya dikelola oleh sistem pusat. Titik tersebut mengirimkan data ke pusat saat dihidupkan atau dimatikan, atau saat ada parameter yang diubah. Untuk menghidupkan salah satu stasiun pengisian daya, pemilik mobil menggunakan aplikasi seluler untuk mengirim sinyal ke pusat. Titik muatan menerima perintah pengguna dengan cara ini dari sistem pusat.
Versi 1.0, 1.5, dan 1.6 protokol saat ini tersedia, sedangkan versi 2.0 masih dalam tahap draf. Dua format data didukung oleh Versi 1.x: JSON dan SOAP. Anda dapat menemukan OCPP-1.x-S atau OCPP -1.x-J, tergantung formatnya. Ada 28 operasi dalam Protokol OCPP Versi 1.6, dengan stasiun pengisian memulai 10 dan sistem pusat memulai 18 di antaranya. Dokumentasi berisi semua perintah ini.
Hanya format JSON yang akan didukung oleh OCPP Versi 2.0. SOAP terlalu redundan karena mentransmisikan data menggunakan XML. Karena SPBU terhubung ke Internet melalui penyedia seluler, ini sangat penting.
Titik Pengisian EV DIY
Kami ingin mencoba membuat stasiun pengisian DIY untuk mobil listrik karena kami adalah insinyur dan peneliti.
Menulis Protokol Uji
Sebelum memulai fase pengujian, kami perlu membuat protokol pengujian. Hal ini diperlukan untuk menentukan tindakan mana yang akan diuji dan pesan OCPP mana yang harus diantisipasi setelah setiap peristiwa ini. Kami akan dapat melihat bagaimana stasiun pengisian daya yang lengkap akan berinteraksi dengan pengguna akhir sebagai akibat dari ini.
Tindakan
- Mulai sesi pengisian daya. Mulai sesi pengisian daya dari antarmuka pengguna (UI) berbasis web. Pesan OCPP yang diharapkan:
- Transaksi Mulai Jarak Jauh
- Pemberitahuan Status —> Diduduki
- Mulai Transaksi
- Nilai Meter
- Hentikan sesi pengisian daya. Hentikan sesi pengisian daya dari UI web. Pesan OCPP yang diharapkan:
- Transaksi Berhenti Jarak Jauh
- Hentikan Transaksi
- Pemberitahuan Status -> Tersedia
// https://github.com/elifTech/cpd-ocpp/blob/pi/examples/centralSystem.js
cSystem.onRequest = async function (client, command) {
const connection = client.connection;
console.info(`New command from ${connection.url}`);
switch (true) {
case command instanceof OCPPCommands.BootNotification:
client.info = {
connectors: [],
...command
};
return {
status: BootNotificationConst.STATUS_ACCEPTED,
currentTime: new Date().toISOString(),
interval: 60
};
case command instanceof OCPPCommands.Authorize:
return {
idTagInfo: {
status: AuthorizeConst.STATUS_ACCEPTED
}
};
case command instanceof OCPPCommands.StartTransaction:
return {
transactionId: 1,
idTagInfo: {
status: StartTransactionConst.STATUS_ACCEPTED
}
};
case command instanceof OCPPCommands.StopTransaction:
return {
transactionId: 1,
idTagInfo: {
status: StartTransactionConst.STATUS_ACCEPTED
}
};
case command instanceof OCPPCommands.Heartbeat:
return {
currentTime: new Date().toISOString()
};
case command instanceof OCPPCommands.StatusNotification:
const connectorIndex = client.info.connectors.findIndex(item => command.connectorId === item.connectorId);
if (connectorIndex === -1) {
client.info.connectors.push({
...command
});
} else {
client.info.connectors[connectorIndex] = {
...command
};
}
await cSystem.onStatusUpdate();
return {};
default:
throw new OCPPError(ERROR_NOTIMPLEMENTED, 'Unknown command');
}
};
cSystem.toggleChargePoint = async (client, connectorId) => {
const connector = client.info.connectors.find(item => connectorId.toString() === item.connectorId.toString());
if (!connector) {
return null;
}
if (connector.status !== StatusNotificationConst.STATUS_AVAILABLE) {
let command = new OCPPCommands.RemoteStopTransaction({
transactionId: connectorId
});
await client.connection.send(command);
return;
}
let command = new OCPPCommands.RemoteStartTransaction({
connectorId: connectorId,
idTag: '' + connectorId
});
await client.connection.send(command);
};
// https://github.com/elifTech/cpd-ocpp/blob/pi/examples/chargingPoint.js const client = new ChargePoint({ centralSystemUrl: `https://ocpp-example.herokuapp.com/webServices/ocpp/CP${Math.floor(Math.random() * 9999)}`, connectors: [ connector1, connector2 ] }); try { await client.connect(); client.onRequest = async (command) => { switch (true) { case command instanceof OCPPCommands.RemoteStartTransaction: setTimeout(() => startTransaction(command), 1); return { status: RemoteStartTransactionConst.STATUS_ACCEPTED }; case command instanceof OCPPCommands.RemoteStopTransaction: setTimeout(() => stopTransaction(command), 1); return { status: RemoteStartTransactionConst.STATUS_ACCEPTED }; } }; const boot = new OCPPCommands.BootNotification({ chargePointVendor: 'BrandX', chargeBoxSerialNumber: 'SR' + Math.round(Math.random() * 100000), chargePointSerialNumber: '123', chargePointModel: '12' }); let answer = await client.send(boot); await client.sendCurrentStatus(); } catch (err) { console.error('--- Err', err); } async function startTransaction({ connectorId }) { const idTag = 'test'; const authCommand = new OCPPCommands.Authorize({ idTag }); await client.send(authCommand); const statusCommand = new OCPPCommands.StatusNotification({ connectorId, errorCode: StatusNotificationConst.ERRORCODE_NOERROR, status: StatusNotificationConst.STATUS_CHARGING }); await client.send(statusCommand); const startCommand = new OCPPCommands.StartTransaction({ connectorId, idTag, meterStart: 0, timestamp: new Date().toISOString(), }); await client.send(startCommand); connectorId === 1 ? pin17.reset() : pin27.reset(); } async function stopTransaction({ transactionId }) { const statusCommand = new OCPPCommands.StatusNotification({ connectorId: transactionId, errorCode: StatusNotificationConst.ERRORCODE_NOERROR, status: StatusNotificationConst.STATUS_AVAILABLE }); await client.send(statusCommand); const startCommand = new OCPPCommands.StopTransaction({ transactionId, meterStop: 1, timestamp: new Date().toISOString(), }); await client.send(startCommand); transactionId === 1 ? pin17.set() : pin27.set(); }
Merancang Perangkat Keras yang Tepat
Setelah melakukan perintah ini dan membuat UI web, kita dapat mulai membuat peralatan untuk titik pengisian Do-It-Yourself kita. Kami telah membuat model ini dari bagian-bagian sederhana, jadi Anda pasti dapat membuatnya sendiri.
Untuk membuat prototipe titik pengisian daya, Anda memerlukan komponen berikut:
- Kotak berpenampilan industri yang bagus sesuai selera Anda
- Beberapa soket (kami menggunakan tipe UE yang umum)
- Raspberry PI 3
- Modul relai (kami menggunakan dua saluran; saluran tambahan akan berguna untuk peningkatan di masa mendatang)
- Catu daya (yang generik dengan output 5V 2A akan baik-baik saja)
- Kabel dan konektor (seperti kabel WAGO 222 dan 19 AWG)
Tidak perlu menyolder!
Mari gabungkan semua bagian untuk membuat model yang tepat sekarang. Gambarkan skema produk Anda yang disederhanakan: Hal pertama yang pertama.
Modul relai kemudian harus dihubungkan ke Raspberry PI 3 melalui port GPIO bawaan. Sesuai dengan diagram, kami akan menghubungkan Raspberry 3.3V, GPIO 17 dan GPIO 27, dan membumikannya. Modul relai Anda harus dapat untuk dipicu pada 3.3V (port Raspberry tidak dapat digunakan untuk memicu model yang diaktifkan pada 12V).
Pin GPIO17 dan GPIO27 dapat ditemukan dengan melihat tata letak Raspberry PI GPIO di bawah.
Nyalakan Raspberry PI Anda dan verifikasi modul relai:
- Login ke Raspberry menggunakan perintah SSH: ssh [email protected]
- Gunakan aplikasi baris perintah gpio bawaan untuk mengaktifkan pin:gpio -g mode 17 outgpio -g mode 27 out
- Gunakan aplikasi baris perintah gpio untuk menghidupkan/mematikan saluran relai:gpio -g tulis 17 0gpio -g tulis 17 1
Pasang soket pengisi daya eksternal, kabel daya, dan bagian dalam menggunakan sekrup, lem termal, dan pengikat ritsleting yang baik.
Sekarang, mari kita sambungkan beberapa kabel daya. Menggunakan konduktor WAGO adalah metode yang paling nyaman. Selain itu, kami menyarankan untuk mengeritingkan kabel menggunakan konektor yang sesuai. Kabelnya akan terlihat seperti ini:
Sebelum menyalakan komponen tegangan tinggi, pastikan untuk menguji kabel. Menggunakan multimeter dan mengganti suplai tegangan rendah (seperti baterai 1.5V atau 12V DC) untuk 220V adalah yang kami sarankan.
Anda sekarang siap untuk menyiapkan stasiun pengisian daya mobil EV Anda sendiri dan menginstal perangkat lunaknya!
Kesimpulan
Untuk menyebarkan popularitas kendaraan listrik, orang-orang di seluruh dunia membuat langkah kecil. Menurut perkiraan dari Bloomberg New Energy Finance, kendaraan listrik akan mencapai sebanyak 35% dari semua penjualan mobil baru di seluruh dunia pada tahun 2040. mahal, memiliki kendaraan bertenaga baterai tidak sesulit yang Anda bayangkan. Anda dapat melihat sendiri bahwa membangun stasiun pengisian rumah untuk mobil listrik benar-benar dapat dilakukan. Anda dapat mencobanya!