Le Pisillique – Un set clasic de sufragerie (IV) – Dulapul de sus

Într-un fel, corpul de sus reia temele și ideile servantei: împărțirea proporțională, profilele de tranziție, spatele din lemn masiv, îmbinările principale: cozi de rândunică sus, caneluri și falțuri jos, precum și un separator median. Împărțirea propriu-zisă, panoul din spate și alte câteva mici aspecte au, totuși, particularitățile lor și ar putea chiar prezenta interes.

Săniuța fuge

Săniuța fuge

Înălțimea consistentă de 1000 mm (efectiv 805 mm, 195 mm reținuți pentru intermezzo) este de natură a stârni tot felul de fantezii privitoare la împărțirea spațiului interior generos, dar m-am mulțumit cu câte două polițe simple de fiecare parte. A brodi o diviziune atât funcțională cât și estetică este mai dificil decât pare.

Corpul de sus când era doar scrisoare de dragoste

Corpul de sus când era doar scrisoare de dragoste

Mai mult, la prima vedere contraintuitiv, alăturarea a două șiruri de compartimentări identice nu este deloc plăcută și nici măcar extrem de utilă. Firește că nu-i bine să fie nici complet diferite fără un anume schepsis, așadar, în general, când nu am alte constrângeri, recurg la inversiune. Ochiul uman nu doar c-o tolerează, parcă o și cere.

Canelură

Canelură

Împărțirea pornește de la numărul de aur (s = 1.618), aplicată celor 805 mm disponibili. Principiul este simplu: segmentul este împărțit după rația s, apoi segmentul mai mare rezultat este împărțit din nou după aceeași rație și tot așa, până la obținerea numărului dorit de volume. Ordinea lor este apoi inversată de-o parte și de alta a separatorului median, iar grosimile materialului sunt distribuite între segmente astfel încât să afecteze mai ales volumele mai generoase.

Frezarea cozilor de rândunică

Frezarea cozilor de rândunică

Rezultatul brut este șirul: 307.5, 307.46, 190.04. Valorile apropiate sugerează că ar trebui umblat la compartimentul din mijloc: estetic, este o repetiție fără ritm, utilitar, obțin două volume practic identice acolo unde ar fi mai folositoare unul mai înalt și altul mai scund.. După o prelucrare sumară am obținut (exemplifcat pe partea stângă, dreapta e aproape identică, diferind ușor doar distribuirea grosimii polițelor și tavanului):

315 mm volumul mare de jos, tot golul, împrumută 8 mm de la nivelul de deasupra;
285 mm volumul median, cu tot cu polițe (249 mm util);
205 mm volumul de sus, cu tot cu tavan (180 mm util).

Asamblare inițială

Asamblare inițială

Pentru tocilari, să nu zicem că nu facem interdisciplinaritate, mai jos aveți și-un mic script Python care segmentează un segment dorit într-un număr specificat de sub-segmente segmentatoare:

import sys

# I use this for quick layouts of my cabinets, 
# 	not Voyager's trajectory. 
# 	Three dec. places will do.
GOLDEN_RATIO = 1.618
GOLDEN_RATIO_SQUARED = pow(GOLDEN_RATIO, 2)

DEFAULT_SEGMENT_COUNT = 2
DEFAULT_DRAW_BAR_WIDTH = 60

MAIN_DIMENSION_SYMB = "H"
# Basic assumptions are that you are providing 
# 	a measurement unit's worth of value, namely, 
# 	by default, millimeters, how regular people do it.
# However, if you are a Quarter Pound with Cheese Eater, 
# 	you might want to adjust this to your 
# 	inhumane measurement system, such as .01 of an inch, 
# 	although there are not many a Paul Sellers 
# 	and James Krenov walking around (sadly).
MIN_SEGMENT_WIDTH = 1

length = 0
segmentCount = 0

if len(sys.argv) < 2:
   print("Length is required.")
   sys.exit(1)

try:
   length = int(sys.argv[1])
   if (len(sys.argv) > 2):
      segmentCount = int(sys.argv[2])
   else:
      segmentCount = DEFAULT_SEGMENT_COUNT
except ValueError:
   print("Length and segment count must be valid integers.")
   sys.exit(1)

if (length <= 0 or segmentCount < 2):
   print("Length must be > 0 and segment count must be >= 2.")
   sys.exit(1)

def vSpace(lineCount=1):
   print("\n" * lineCount)

def printSegments(segments, header="Required segments are"):
   if (header is not None and len(header) > 0):
      print(f'{header}:')

   for segmentIndex, segment in enumerate(segments, start=1):
      print(f'\t- S{segmentIndex} = {segment}')

def drawSegments(segments, 
   defaultDrawBarWidth=DEFAULT_DRAW_BAR_WIDTH, 
   mainDimensionSymb=MAIN_DIMENSION_SYMB,
   header="Visual representation"):

   if not segments:
      return

   if (header is not None and len(header) > 0):
      print(f'{header}:')

   total = sum(segments)
   # Anyone who has more than a handful of shelves 
   # 	has bigger problems than this drawing routine can solve
   # 	and would surely get what's coming to them...
   barWidth = max(defaultDrawBarWidth, len(segments) * 4)

   # Pre-compute widths for each segment
   widths = [max(4, round(segment / total * barWidth)) 
         for segment in segments]

   # Last one gets the difference
   widths[-1] += (barWidth - sum(widths))

   bar = ""
   labels = ""
   
   for index, width in enumerate(widths, start=1):
      label = f"S{index}"
      labels += " " + label.center(width) \
         if width >= len(label) \
         else label[:width]	
      bar += "|" + "-" * width

   print(labels)
   print(bar + "|")

   dimensionLine = "<" + "-" * (len(bar) - 1) + ">"
   roundedMidPoint = len(dimensionLine) // 2

   dimensionLine = dimensionLine[:roundedMidPoint] \
      + mainDimensionSymb  \
      + dimensionLine[roundedMidPoint + 1:]

   print(dimensionLine)

def compute(length, segmentCount, minSegmentWidth=MIN_SEGMENT_WIDTH):
   segmentA = 0
   segmentB = 0
   workingLength = length
   segments = []
   iterationCount = segmentCount - 1

   while (iterationCount > 0):
      segmentB = round(workingLength / GOLDEN_RATIO_SQUARED, 2)
      segmentA = round(workingLength - segmentB, 2)

      # If you can split below mm level, chapeau!
      if segmentA <= minSegmentWidth or segmentB <= minSegmentWidth:
         segments.append(workingLength)
         break

      workingLength = segmentA

      if (iterationCount == 1):
         segments.append(segmentA)
         segments.append(segmentB)
      else:
         segments.append(segmentB)

      iterationCount -=1

   return segments

# Could this be called furniture-driven-development?
segments = compute(length, segmentCount)

vSpace()
printSegments(segments)
vSpace()
drawSegments(segments)
vSpace()

În fine, odată stabilite dimensiunile, ca să plasez polițele cât de cât corect, am canelat toate pozițiile pe separatorul din mijloc, am montat toate polițele acolo și, ulterior, tot ansamblul deodată. Le-am calat cu vincluri și m-am asigurat că distanțele dintre polițe corespund și-n laterale, cu ajutorul unor marcaje de ghidaj.

Structura de bază e gata

Structura de bază e gata

Înainte de-a trece mai departe, întrucât mi-a plăcut tare mult cum dădeau profilele acelea triunghiulare de tranziție ce mărginesc în stânga și-n dreapta polițele servantei, am procedat la fel și-aici, numai că am teșit fața de atac doar pentru cele exterioare.

Susținere improvizată

Existența acelui spațiu intermediar de la bază însemna că pereții carcasei nu vor avea aceleași constrângeri și-aceeași susținere pentru a-și putea menține forma, afară de panoul din spate ce-a fost gândit să vie până jos, servind implicit și ca mecanism de prevenire a forfecării laterale (racking).

Tălpicii

Tălpicii

Simultan, urmau să preia toată greutatea corpului, problematic la o adică și pentru dânsele, și pentru blatul bazei. Cum ar fi urmat să aplic o mască de 75 mm, mi-ar fi rămas un spațiu de manevră de 50 mm, diferența dintre lățimea măștii și grosimea peretelui (24-25 mm).

Interior, profil de tranziție

Interior, profil de tranziție

Am profitat, așadar, de ocazie, și-am aplicat doi tălpici pe toată lungimea (minus 2 mm), lați de 50 mm și teșiți agresiv pe cantul liber. Sunt prinși în două șuruburi concentrate într-o zonă de 75 mm din centrul lungimii, deci permit pereților să și lucreze dacă vor.

Nici nemascați nu arată rău

Nici nemascați nu arată rău

Nu pare mare lucru, dar, cu aceeași lungime, suprafața de contact e practic de trei ori mai mare:

(25 mm x 2 = 50 mm) x lungimea 250 mm = 12 500 mm2 deja existenta amprentă la bază a pereților;
(50 mm x 2 = 100 mm) x lungimea 250 mm = 25 000 mm2 în plus amprenta la bază a tălpicilor;
– total 37 500 mm2.

Vizual arată surprinzător de civilizat și nu m-au incomodat neam în aproape doi ani de când l-am instalat.

Spate ca la carte

Spuneam anterior că nu eram tocmai la curent cu toate aspectele mișcării lemnului. Ei bine, între timp, adică până am ajuns să construiesc și panoul din spatele acestui corp, am mai învățat niște carte. Stilul a rămas același: șipci verticale de 75 mm încadrate într-o ramă ce oferă vizual tot 75 mm (deci late de 100 mm, întrucât ~25 mm sunt necesari pentru împerecherea cu cantul posterior al dulapului).

Diferă, în schimb, substanțial, abordarea constructivă: totul este îmbinat în nut și feder de 8 mm. Ramele au federe (adică limbi de lemn) de jur împrejur, iar șipcile nuturi (caneluri) corespunzătoare-n capete. Ca regulă, am preferat în capete să tai doar caneluri fiindcă este mult mai ușor de lucrat și eventualele imperfecțiuni sunt mai ușor de prevenit ori ascuns, important e să-ncapă.

Nut de capăt

Nut de capăt

Nu aveam pe-atunci o rindea specială de tăiat așa ceva (vezi aici Stanley #48) și-am înfăptuit totul c-o simplă rindea de canelat. Nu-i taman greu, necesită doar metod și răbdare. Mult metod și multă răbdare. Întâi și-ntâi, a fost nevoie să marchez primele piese până am prins mersul. Apoi:

– am reglat lama pe centrul grosimii șipcilor și-am tăiat toate canelurile;
– apoi am ajustat-o astfel încât să tai restul de material de o parte a federelor;
– în sfârșit, am potrivit-o și pentru cealaltă parte; chit că e pe centru, micile erori de mișcare, de ascuțire etc. se adună și produc un profil mai lat decât lățimea nominală a lamei și eventual ușor decalat (pinul, compresibil de felul lui, este-n mod deosebit afectat de micul tangaj inerent).

Panoul, la început

Panoul, la început

Le-am montat rând pe rând: mai întâi o coloană și o traversă din cadru, apoi șipcă după șipcă pe măsură ce erau gata, iar la sfârșit am închis ansamblul cu cealaltă traversă și cealaltă coloană. Fiecare șipcă poate lucra independent, fiind lipită doar pe aproximativ 10 mm în centrul lățimii nuturilor de la capete. Ca să aibă loc de joacă le-am calat cu ajutorul unor… cărți de joc, câte două per luft. Rezultă aproximativ 0.45 mm, în funcție de cum se trezește zero-ul șublerului în ziua aia, deci o șipcă se poate mișca până-n 0.225 mm în fiecare parte.

Panoul finalizat

Panoul finalizat

Mai la urmă am teșit toate muchiile panoului, am teșit și muchiile din spatele corpului, ceea ce înseamnă că există un profil depresionar în V între ele, nu o trecere la ras cum are servanta. Mi se pare mai drăguț așa, însă decizia a fost mai degrabă motivată utilitar: șuruburile au și ele 0.5 – 1 mm loc să lucreze (nu sunt strânse la cuplul maxim, ci la mână, axul nefiletat este mai mic decât gaura de trecere și ghidaj, capul șurubului este mai mic decât scobitura unde-i ascuns), permițând variațiile dimensionale fără a forța muchia comună.

Talaș de la fininsarea șipcilor

Talaș de la fininsarea șipcilor

Dat fiind că va avea uși vitrate, spatele mai elaborat mi se pare potrivit ca decor latent. Fără el, carcasa este foarte liniară și cam scheletică; cu șipcile verticale apare o textură secundară, regulată, peste fibra țaca-țaca a pinului, la rândul ei constrânsă într-un element ordonator. Pe scurt, chiar participă la compoziție.

Ca un post-comentariu, îmi place atât de mult acest procedeu pentru panoul de-nchidere posterioară încât l-am folosit și la birou. Iar simplul nut și simplul feder pot crea împreună o lume-ntreagă de combinații, nu doar un simplu tablou vertical, ce poate unora le aduce aminte de ecranul TVR-ului în orele situate-n afara emisiei. Cu o rindea dedicată se poate confecționa de mână poate chiar mai ușor decât la o freză și la o fracțiune de preț.