Add hardware articles
@@ -0,0 +1,91 @@
|
|||||||
|
---
|
||||||
|
title: "Bank ATM"
|
||||||
|
description: "Bank ATM."
|
||||||
|
navigation: true
|
||||||
|
date: "2018-03-18"
|
||||||
|
img: "/img/bank-atm/arduino-fritzing.png"
|
||||||
|
tags:
|
||||||
|
- C++14
|
||||||
|
- Qt4
|
||||||
|
- Software
|
||||||
|
- Hardware
|
||||||
|
---
|
||||||
|
|
||||||
|
<small>Bank ATM.<br>
|
||||||
|
|
||||||
|
The goal of this project was to create a banking system, including an ATM
|
||||||
|
client. It was created for one of the courses (project 3) at Hogeschool
|
||||||
|
Rotterdam and was written in C++14 and Qt4.
|
||||||
|
|
||||||
|
The
|
||||||
|
[slides](https://docs.google.com/presentation/d/1W0L4e7r0Vqp5Qp3RaNcMhqrt1gkLSrU4T6heOZz_IqQ){target="_blank"}
|
||||||
|
for the presentation that I gave at Hogeschool Rotterdam.
|
||||||
|
|
||||||
|
## Product demo
|
||||||
|
|
||||||
|
Korte video waarin de meeste functionaliteit van de bank ATM wordt getoond.
|
||||||
|
|
||||||
|
::VideoLazy{:src="https://riyyi.com/media/bank-atm-demo.webm"}
|
||||||
|
::
|
||||||
|
|
||||||
|
## Overzicht componenten
|
||||||
|
|
||||||
|
- Bank
|
||||||
|
- MySQL server
|
||||||
|
- Native applicatie
|
||||||
|
- Arduino Nano
|
||||||
|
- RFID-RC522
|
||||||
|
- Matrix membrane 4x4 keypad
|
||||||
|
- USB kabel voor seriële communicatie
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Overzicht systeem
|
||||||
|
|
||||||
|
De applicatie bestaat uit 3 threads, welke allemaal een unieke functie hebben.
|
||||||
|
De main thread bevat de GUI. De database thread voert alle queries uit en slaat
|
||||||
|
deze data op. En als laatst de serial thread, deze thread bevat een listener die
|
||||||
|
alle seriële data ontvangt. Afhankelijk van wat de serial thread aan user input
|
||||||
|
ontvangt zal de SerialCommand class "commando's" uitvoeren die de GUI en
|
||||||
|
database thread gebruiken.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Database ERD
|
||||||
|
|
||||||
|
Hieronder is de ER (Entity-relationship) diagram te vinden.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Database ontwerp
|
||||||
|
|
||||||
|
- MySQL server
|
||||||
|
- Lokaal opgeslagen
|
||||||
|
|
||||||
|
Hieronder is de EER (Enhanced entity-relationship) diagram te vinden.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Arduino - fritzing
|
||||||
|
|
||||||
|
- Arduino Nano
|
||||||
|
- RFID-RC522
|
||||||
|
- Matrix membrane 4x4 keypad
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## GUI
|
||||||
|
|
||||||
|
- Native applicatie
|
||||||
|
- Geschreven in C++14 en Qt4
|
||||||
|
- Cross platform (build tool: qmake)
|
||||||
|
- Multithreaded
|
||||||
|
|
||||||
|
Ten alle tijden kan de sessie worden afgebroken door de pas uit de pinautomaat
|
||||||
|
te verwijderen, de interface wordt daarna naar de inlogpagina doorgestuurd. Alle
|
||||||
|
velden waar de gebruiker gegevens kan invoeren, hebben de mogelijkheid voor het
|
||||||
|
weergeven van foutmeldingen.
|
||||||
|
|
||||||
|
Hieronder zijn schermvoorbeelden te vinden.
|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
title: "Elevator Floor Module"
|
||||||
|
description: "Elevator floor module."
|
||||||
|
navigation: false
|
||||||
|
date: "2017-12-02"
|
||||||
|
img: "/img/elevator-floor-module/backside-view-final.jpg"
|
||||||
|
tags:
|
||||||
|
- Hardware
|
||||||
|
---
|
||||||
|
|
||||||
|
The goal of this project was to create a working miniature elevator. Each member
|
||||||
|
of the team made his own level, which we would stack on top of each other in the
|
||||||
|
end. The engine room was a combined effort of the team and it would talk to all
|
||||||
|
the levels via I2C. This was my first project at Hogeschool Rotterdam.
|
||||||
|
|
||||||
|
Het houten frame van de verdieping.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Hardware schema van alle sensoren, de Arduino Mega representeerd de motorkamer.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Het bedieningspaneel aan de voorkant van de lift. De 2 pushbuttons worden
|
||||||
|
gebruikt om de lift op te roepen. Het segment display geeft de huidige locatie
|
||||||
|
van de liftkooi weer en het ledje aan de bovenkant simmuleert de deur.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
De sensoren worden aangestuurt met een Arduino Uno.
|
||||||
|
De uiteindelijke aansluiting ziet er als volgt uit.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Alle lift verdiepingen van ons project groepje opgestapeld tot een toren.
|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
---
|
||||||
|
title: "Guinea Pig Cage"
|
||||||
|
description: "Pet guinea pig cage."
|
||||||
|
navigation: true
|
||||||
|
date: "2018-06"
|
||||||
|
img: "/img/guinea-pig-cage/pig.jpg"
|
||||||
|
tags:
|
||||||
|
- Hardware
|
||||||
|
---
|
||||||
|
|
||||||
|
This is a custom designed and build cage for the guinea pigs of my girlfriend.
|
||||||
|
|
||||||
|
## Design
|
||||||
|
|
||||||
|
3D model of the cage.<br>
|
||||||
|
[View](https://www.tinkercad.com/embed/jtFlKzD78Hj)
|
||||||
|
the model in 3D.<br>
|
||||||
|
See the project at
|
||||||
|
[Thinkercad](https://www.tinkercad.com/things/jtFlKzD78Hj).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
::GridWithImage
|
||||||
|
---
|
||||||
|
rows:
|
||||||
|
- title: Saw
|
||||||
|
- title: File
|
||||||
|
- title: Sandpaper
|
||||||
|
- title: Drill
|
||||||
|
- title: Phillips head screwdriver
|
||||||
|
- title: Paint brush
|
||||||
|
- title: Tape measure
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
|
## Shopping list
|
||||||
|
|
||||||
|
::GridWithImage
|
||||||
|
---
|
||||||
|
rows:
|
||||||
|
- title: OSB (244x122cm)
|
||||||
|
src: "/img/guinea-pig-cage/osb.jpg"
|
||||||
|
- title: Pond liner (200x250cm)
|
||||||
|
src: "/img/guinea-pig-cage/pond-liner.jpg"
|
||||||
|
- title: Timberboards (250cm)
|
||||||
|
src: "/img/guinea-pig-cage/timberboard-before.jpg"
|
||||||
|
count: 3
|
||||||
|
- title: Dimensional lumber (270cm)
|
||||||
|
src: "/img/guinea-pig-cage/dimensional-lumber.jpg"
|
||||||
|
count: 4
|
||||||
|
- title: Screws (5cm)
|
||||||
|
src: "/img/guinea-pig-cage/screws-5cm.jpg"
|
||||||
|
count: 50
|
||||||
|
- title: Screws (3.5cm)
|
||||||
|
src: "/img/guinea-pig-cage/screws-3-5cm.jpg"
|
||||||
|
count: 10
|
||||||
|
- title: Wind hook / window buckle
|
||||||
|
src: "/img/guinea-pig-cage/wind-hook.jpg"
|
||||||
|
- title: Metal rings
|
||||||
|
src: "/img/guinea-pig-cage/metal-rings.jpg"
|
||||||
|
count: 9
|
||||||
|
- title: Hinges
|
||||||
|
src: "/img/guinea-pig-cage/hinges.jpg"
|
||||||
|
count: 1
|
||||||
|
- title: Child safe paint (375ml)
|
||||||
|
src: "/img/guinea-pig-cage/paint.jpg"
|
||||||
|
- title: Brick
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
All measurements of the wooden materials.
|
||||||
|
|
||||||
|
| OSB | | Timberboard | | Dimensional lumber |
|
||||||
|
|---------------------------------------------------|---|------------------------------------------------------------|---|------------------------------------------------------------------|
|
||||||
|
|  | |  | |  |
|
||||||
|
|
||||||
|
\* = optional<br>
|
||||||
|
~ = around
|
||||||
|
|
||||||
|
### Construction
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The timberboard has to be painted on the inward facing side, for wear protection.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
title: "Smart Outlet"
|
||||||
|
description: "Home automation smart outlet."
|
||||||
|
navigation: false
|
||||||
|
date: "2018-10-31"
|
||||||
|
img: "/img/smart-outlet/result.jpg"
|
||||||
|
tags:
|
||||||
|
- Hardware
|
||||||
|
---
|
||||||
|
|
||||||
|
This page describes my version of a smart socket for home automation.
|
||||||
|
The device can be toggled via the button on the enclosure or a wireless signal.
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Pictured below is a scetch of the concept of the project.<br>
|
||||||
|
As well as an electrical circuit.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The MDF enclosure is cut out with a laser cutter. The base of the design is
|
||||||
|
generated via
|
||||||
|
[boxes.py](https://www.festi.info/boxes.py/ClosedBox).
|
||||||
|
Holes have been added to the base so that the cable,
|
||||||
|
socket, LED and button can be mounted.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The button is printed with a 3D printer, the bottom part of the button is
|
||||||
|
extended by 2mm on each side (4mm in total), so that it stays in place.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This is the final electrical circuit that was used, which is made in Fritzing.
|
||||||
|
All hardware components (minus the power supply) are incorporated in this
|
||||||
|
circuit. A red LED is used as an example appliance that can be toggled.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Pictured below is a model of the design in Tinkercad, the button will be printed
|
||||||
|
in 3D and the housing will be cut out with the laser cutter. The black cylinder
|
||||||
|
represents the power cable.
|
||||||
|
|
||||||
|
Front view.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Side view.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Back view.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Box cut out.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
3D printed button.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Overview of all the electronics.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The electronics mounted in the box.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Completed assembly.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Domoticz is used as a controller, which completes the smart outlet project. View
|
||||||
|
the demo below.
|
||||||
|
|
||||||
|
::VideoLazy{:src="https://riyyi.com/media/smart-outlet-demo.webm"}
|
||||||
|
::
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
---
|
||||||
|
title: "Xbox 360 Controller Type-C Mod"
|
||||||
|
description: "Mod to change the Xbox 360 wired controller to Type-C."
|
||||||
|
navigation: false
|
||||||
|
date: "2022-11-28"
|
||||||
|
img: "/img/type-c-mod/controller-after.jpg"
|
||||||
|
tags:
|
||||||
|
- Hardware
|
||||||
|
---
|
||||||
|
|
||||||
|
<small>Mod to change the Xbox 360 wired controller to Type-C.<br>
|
||||||
|
|
||||||
|
## Result
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Tools
|
||||||
|
|
||||||
|
::GridWithImage
|
||||||
|
---
|
||||||
|
rows:
|
||||||
|
- title: Soldering iron
|
||||||
|
- title: Wire stripper
|
||||||
|
src: "/img/type-c-mod/wire-stripper.jpg"
|
||||||
|
- title: Round file
|
||||||
|
src: "/img/type-c-mod/round-file.jpg"
|
||||||
|
- title: Nail file
|
||||||
|
src: "/img/type-c-mod/nail-file.jpg"
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
|
## Shopping list
|
||||||
|
|
||||||
|
::GridWithImage
|
||||||
|
---
|
||||||
|
rows:
|
||||||
|
- title: Solder
|
||||||
|
- title: 3D printed bezel
|
||||||
|
src: "/img/type-c-mod/printed-bezel.jpg"
|
||||||
|
- title: USB Type-C female socket
|
||||||
|
src: "/img/type-c-mod/port.jpg"
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
|
Unfortunately, the original design was a little fragile at the round part that
|
||||||
|
would slide into the housing and it would snap off. I tweaked the design by
|
||||||
|
moving the USB port up by 1mm and reinforcing it by attaching it on the sides,
|
||||||
|
as there was space to do so. The 3D bezel design was taken from here:
|
||||||
|
[thingiverse.com/thing:3066354](https://thingiverse.com/thing:3066354).<br>
|
||||||
|
The new edited design:
|
||||||
|
[thingiverse.com/thing:5664077](https://thingiverse.com/thing:5664077).<br>
|
||||||
|
This is the USB-C port I used:
|
||||||
|
[aliexpress.com/item/1005002328403673.html](https://aliexpress.com/item/1005002328403673.html)
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Unmodified, the original cable hole is a little too narrow to fit a Type-C port.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
I used the nail file to slightly widen the hole, this is what it looks like afterwards.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Initially, my plan was to replace the original connector with a male pin header
|
||||||
|
and dupont connectors, but my soldering iron couldn't get hot enough to melt the
|
||||||
|
solder of the thick pins. So instead, I repurposed the original wires.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
I used a third hand to help keep the port in place while soldering.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Finished soldering.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Test fitting everything together.
|
||||||
|
|
||||||
|

|
||||||
|
After Width: | Height: | Size: 316 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 176 KiB |
|
After Width: | Height: | Size: 255 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 344 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 460 KiB |
|
After Width: | Height: | Size: 336 KiB |
|
After Width: | Height: | Size: 386 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 646 KiB |
|
After Width: | Height: | Size: 352 KiB |
|
After Width: | Height: | Size: 626 KiB |
|
After Width: | Height: | Size: 461 KiB |
|
After Width: | Height: | Size: 510 KiB |
|
After Width: | Height: | Size: 384 KiB |
|
After Width: | Height: | Size: 572 KiB |
|
After Width: | Height: | Size: 584 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 372 KiB |
|
After Width: | Height: | Size: 664 KiB |
|
After Width: | Height: | Size: 607 KiB |
|
After Width: | Height: | Size: 436 KiB |
|
After Width: | Height: | Size: 627 KiB |
|
After Width: | Height: | Size: 478 KiB |
|
After Width: | Height: | Size: 479 KiB |
|
After Width: | Height: | Size: 472 KiB |
|
After Width: | Height: | Size: 477 KiB |
|
After Width: | Height: | Size: 558 KiB |
|
After Width: | Height: | Size: 422 KiB |
|
After Width: | Height: | Size: 315 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 470 KiB |
|
After Width: | Height: | Size: 379 KiB |
|
After Width: | Height: | Size: 431 KiB |
|
After Width: | Height: | Size: 373 KiB |
|
After Width: | Height: | Size: 575 KiB |
|
After Width: | Height: | Size: 609 KiB |
|
After Width: | Height: | Size: 604 KiB |
|
After Width: | Height: | Size: 475 KiB |
|
After Width: | Height: | Size: 243 KiB |
|
After Width: | Height: | Size: 605 KiB |
|
After Width: | Height: | Size: 680 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 379 KiB |
|
After Width: | Height: | Size: 247 KiB |
|
After Width: | Height: | Size: 352 KiB |
|
After Width: | Height: | Size: 792 KiB |
|
After Width: | Height: | Size: 266 KiB |
|
After Width: | Height: | Size: 277 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 396 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 212 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 302 KiB |
|
After Width: | Height: | Size: 257 KiB |
|
After Width: | Height: | Size: 176 KiB |
|
After Width: | Height: | Size: 89 KiB |
@@ -20,6 +20,7 @@ declare module 'vue' {
|
|||||||
IFaGithub: typeof import('~icons/fa/github')['default']
|
IFaGithub: typeof import('~icons/fa/github')['default']
|
||||||
IFaGitlab: typeof import('~icons/fa/gitlab')['default']
|
IFaGitlab: typeof import('~icons/fa/gitlab')['default']
|
||||||
IFaHome: typeof import('~icons/fa/home')['default']
|
IFaHome: typeof import('~icons/fa/home')['default']
|
||||||
|
IFaImage: typeof import('~icons/fa/image')['default']
|
||||||
IFaLink: typeof import('~icons/fa/link')['default']
|
IFaLink: typeof import('~icons/fa/link')['default']
|
||||||
IFaLinkedinSquare: typeof import('~icons/fa/linkedin-square')['default']
|
IFaLinkedinSquare: typeof import('~icons/fa/linkedin-square')['default']
|
||||||
IFaMoonO: typeof import('~icons/fa/moon-o')['default']
|
IFaMoonO: typeof import('~icons/fa/moon-o')['default']
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
<template>
|
||||||
|
<ul class="list-group pb-3">
|
||||||
|
<li v-for="(row, index) in props.rows" :key="index" class="list-group-item d-flex justify-content-between align-items-start">
|
||||||
|
{{ row.title }}
|
||||||
|
<div>
|
||||||
|
<span v-if="row.count" class="badge text-bg-primary rounded-pill">{{row.count}}</span>
|
||||||
|
<template v-if="row.src && row.count">
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<a v-if="row.src" :href="getPublicPath(row.src)" class="text-end" target="_blank">
|
||||||
|
<IFaImage class="text-end" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const props = defineProps<{
|
||||||
|
rows: {
|
||||||
|
title: string,
|
||||||
|
src?: string,
|
||||||
|
count?: number
|
||||||
|
}[]
|
||||||
|
}>();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
YAML method.
|
||||||
|
|
||||||
|
::GridWithImage
|
||||||
|
---
|
||||||
|
rows:
|
||||||
|
- title: My title
|
||||||
|
- title: Another title
|
||||||
|
src: "/img/path-to-img.jpg"
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
|
Inline method.
|
||||||
|
|
||||||
|
::GridWithImage{:rows='[ {"title": "My title" }, {"title": "Another title", "src": "/img/path-to-img.jpg"} ]'}
|
||||||
|
::
|
||||||
|
-->
|
||||||
@@ -1,3 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
Man of few words.
|
<h2>CV</h2>
|
||||||
|
<p>
|
||||||
|
Download the PDF here:
|
||||||
|
<a href="https://riyyi.com/media/cv-en-rick-van-vonderen.pdf">English</a>,
|
||||||
|
<a href="https://riyyi.com/media/cv-rick-van-vonderen.pdf">Nederlands</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<object data="https://riyyi.com/media/cv-en-rick-van-vonderen.pdf" type="application/pdf"
|
||||||
|
style="width: 100%; height: calc(100vh - 280px)"></object>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||