@ -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 |
@ -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> |
||||||
|