JLCPCBでマルチカラーシルクを注文した

概要

JLCPCBでついにマルチカラーのシルク印刷が開始されましたので検証用の基板を注文してみました。おもったより安かったですが、仕上がりを見てみないとどうも評価できません。

マルチカラーシルクとは?

インクジェットで紫外線で固まるUVインキを利用して、カラー印刷をするサービスです。UV印刷は特殊インキを利用するので普通のカラー印刷よりも画質は落ちるはずです。

ただし、インクの種類が違うので通常印刷できないようなガラスなど特殊な素材にも印刷可能です。インキも紫外線で即固まるので耐久性や耐熱性も高いもののはずです。

Breaking Stereotypes: Embrace JLCPCB's New Multi-color Silkscreen Service
Hey tech guys! Break free from the stereotypes of being nerdy and unleash your creativity. Discover how to create stunni...

上記にJLCPCBのブログ記事があります。最後の方にフェースブックのグループに入ると7ドルのクーポンもらえると書いてありますね。ちなみに私は自腹レビュアーなのでもらっていません。(見落とした、、、)

データの準備

とりあえずネタが思いつかなかったので、印刷テスト用のチャート画像を自作してみました。

import svgwrite


def draw_color_bar():
    dwg = svgwrite.Drawing("color_bar.svg", profile="tiny", size=("100mm", "100mm"))

    # 色のバー
    dx = 5
    dy = 3
    dw = 4
    dh = 5
    for i in range(10):
        red = svgwrite.rgb(100, i * 10, i * 10, "%")
        green = svgwrite.rgb(i * 10, 100, i * 10, "%")
        blue = svgwrite.rgb(i * 10, i * 10, 100, "%")
        black = svgwrite.rgb(i * 10, i * 10, i * 10, "%")

        dwg.add(
            dwg.rect(
                insert=(f"{dx + i * dw}mm", f"{dy}mm"),
                size=(f"{dw}mm", f"{dh}mm"),
                fill=red,
            )
        )
        dwg.add(
            dwg.rect(
                insert=(f"{dx + i * dw}mm", f"{dy + dh}mm"),
                size=(f"{dw}mm", f"{dh}mm"),
                fill=green,
            )
        )
        dwg.add(
            dwg.rect(
                insert=(f"{dx + i * dw}mm", f"{dy + dh * 2}mm"),
                size=(f"{dw}mm", f"{dh}mm"),
                fill=blue,
            )
        )
        dwg.add(
            dwg.rect(
                insert=(f"{dx + i * dw}mm", f"{dy + dh * 3}mm"),
                size=(f"{dw}mm", f"{dh}mm"),
                fill=black,
            )
        )
    dwg.add(dwg.text("R", insert=(f"{1}mm", f"{dy + dh * 1 - 1}mm"), fill="red"))
    dwg.add(dwg.text("G", insert=(f"{1}mm", f"{dy + dh * 2 - 1}mm"), fill="green"))
    dwg.add(dwg.text("B", insert=(f"{1}mm", f"{dy + dh * 3 - 1}mm"), fill="blue"))
    dwg.add(dwg.text("K", insert=(f"{1}mm", f"{dy + dh * 4 - 1}mm"), fill="black"))

    # 文字
    dx = 5
    dy = 4
    dw = 4
    dh = 5
    y = dy
    dwg.add(
        dwg.rect(
            insert=(f"{75}mm", f"{dy-1}mm"),
            size=(f"{25}mm", f"{22}mm"),
            fill="black",
        )
    )
    for i in range(1, 9):
        size = i * 0.5
        dwg.add(
            dwg.text(
                f"Size{size}mm",
                insert=(f"{50}mm", f"{y}mm"),
                fill="black",
                font_size=f"{size}mm",
            )
        )
        dwg.add(
            dwg.text(
                f"Size{size}mm",
                insert=(f"{75}mm", f"{y}mm"),
                fill="white",
                font_size=f"{size}mm",
            )
        )
        y += size + 0.75

    # ライン
    y = dy + dh * 4 + 1
    dwg.add(
        dwg.rect(
            insert=(f"{50}mm", f"{y-1}mm"),
            size=(f"{95}mm", f"{16}mm"),
            fill="black",
        )
    )
    for i in range(1, 11):
        dwg.add(
            dwg.line(
                (f"{dx}mm", f"{y}mm"),
                (f"{45}mm", f"{y}mm"),
                stroke="black",
                stroke_width=0.2 * i,
            )
        )
        dwg.add(
            dwg.text(
                "{:.1f}mm".format(0.1 * i),
                insert=(f"{1}mm", f"{y}mm"),
                fill="black",
                font_size=4,
            )
        )
        dwg.add(
            dwg.line(
                (f"{dx+50}mm", f"{y}mm"),
                (f"{45+50}mm", f"{y}mm"),
                stroke="white",
                stroke_width=0.2 * i,
            )
        )
        dwg.add(
            dwg.text(
                "{:.1f}mm".format(0.1 * i),
                insert=(f"{1+50}mm", f"{y}mm"),
                fill="white",
                font_size=4,
            )
        )
        y += 0.1 * i + 1

    # 色名
    color_names = [
        "black",
        "gray",
        "silver",
        "white",
        "maroon",
        "red",
        "purple",
        "fuchsia",
        "green",
        "lime",
        "olive",
        "yellow",
        "navy",
        "blue",
        "teal",
        "aqua",
        "orange",
        "indigo",
        "violet",
        "pink",
        "brown",
        "gold",
        "ivory",
        "beige",
    ]
    dx = 1
    dy = 42
    dw = 4
    dh = 4
    for i in range(24):
        dwg.add(
            dwg.rect(
                insert=(f"{dx + i * dw}mm", f"{dy}mm"),
                size=(f"{dw}mm", f"{dh}mm"),
                fill=color_names[i],
            )
        )
        dwg.add(
            dwg.text(
                color_names[i],
                insert=(f"{dx + i * dw}mm", f"{dy+dw+1}mm"),
                fill="black",
                font_size=4,
            )
        )

    # グラデーション
    square_size = 3
    dx = 1
    dy = 50
    r = 0
    g = 0
    b = 0
    for i in range(0, 8):
        x = dx + i * 12
        dwg.add(
            dwg.text(
                " R ",
                insert=(f"{x+3}mm", f"{dy-1}mm"),
                fill="black",
                font_size=4,
                **{"xml:space": "preserve"},
            )
        )
        dwg.add(
            dwg.text(
                " G ",
                insert=(f"{x+6}mm", f"{dy-1}mm"),
                fill="black",
                font_size=4,
                **{"xml:space": "preserve"},
            )
        )
        dwg.add(
            dwg.text(
                " B ",
                insert=(f"{x+9}mm", f"{dy-1}mm"),
                fill="black",
                font_size=4,
                **{"xml:space": "preserve"},
            )
        )
        for j in range(0, 16):
            color = svgwrite.rgb(min(r, 255), min(g, 255), min(b, 255))
            y = dy + j * square_size
            dwg.add(
                dwg.rect(
                    insert=(
                        f"{x}mm",
                        f"{y}mm",
                    ),
                    size=(f"{square_size}mm", f"{square_size}mm"),
                    fill=color,
                )
            )
            dwg.add(
                dwg.text(
                    "%3d" % min(r, 255),
                    insert=(f"{x+3}mm", f"{y+2}mm"),
                    fill="black",
                    font_size=4,
                    **{"xml:space": "preserve"},
                )
            )
            dwg.add(
                dwg.text(
                    "%3d" % min(g, 255),
                    insert=(f"{x+6}mm", f"{y+2}mm"),
                    fill="black",
                    font_size=4,
                    **{"xml:space": "preserve"},
                )
            )
            dwg.add(
                dwg.text(
                    "%3d" % min(b, 255),
                    insert=(f"{x+9}mm", f"{y+2}mm"),
                    fill="black",
                    font_size=4,
                    **{"xml:space": "preserve"},
                )
            )
            b += 64
            if b > 256:
                b = 0
                g += 64
                if g > 256:
                    g = 0
                    r += 64
                    if r > 256:
                        break

    dwg.save()


draw_color_bar()

最初は画像を探したのですが、いまいち正方形できれいなものがなかったのと、著作権的に微妙なのとサイズが明確に確認できるものがなかたので、PythonからSVG形式でプログラムから出力しています。

SVG形式の画像の中身はテキストで座標等を指定してあり、レンダリングして描画する画像形式になります。そのため拡大してもきれいな画像のままですし、任意の解像度で出力も可能です。またSVGだとmm単位で座標指定が可能ですので印字したときにサイズがわかりやすいです。

SVGからPNGへ変換

変換にはInkscapeを利用します。SVGファイルで画像のサイズは100mm x 100mmと指定して作っています。黒バックのライン背景が激しく右にはみ出ていますが、はみ出た部分は無視されるのでこのまますすめます。

開いたらエクスポートでPNGに出力するだけです。確認する場所はサイズが100mmになっていることと、今回のUVプリンタは1200dpiとかいてあったのでDPIを1200にすることです。

基板設計

JLCPCBだとEasyEDAのProでしかデータ作成ができません。私はこれを使っているので特に問題がないのですがまずは100mm x 100mmの四角い基板を作ります。裏側に製造番号の印字用に「JLCJLCJLCJLC」の文字列を配置しておきました。

画像をはりつけます。このとき赤くなっているカラーシルクを選択する必要があります。そしてImage Sizeは75mmぐらいの自動設定になるので、100mmに手で修正します。

画像を見ると背景色の部分が抜け色になり、明示的に白を描画しているところは残っていますね。実際に印字にこのまま反映されるかは謎です。今回はパッドもなにもないので完全に色味だけを確認する基板となっています。

貼り付けて座標を調整すれば基板完成です。

ちなみにレビューだとデフォルトではカラー画像は反映されません。カラーシルクを表示するモードにすることで画面上で確認可能です。

画面から注文をすると上記の警告がでます。カラーシルクを使うのでYesを選択します。

次に実装サービスを使う場合の注意事項がでてきます。今回は使わないので「I Got it, Continue」を選びます。

DRCチェックをするかを聞いてきます。どちらでも構いません。今回は回路ががないですしね。。。

最後に確認がありますので「Confirm」を選択します。

注文画面に遷移します。一番上に日本語版を使うかがあるのでOKを選択します。

日本語にかわりました。

ガーバービュアーを表示させて、カラーシルクが反映されているのかを確認します。大丈夫そうですね。

しかし重大な問題が発生しています。基板のサイズが100.25mmになっています。カラーシルクだとなぜか0.25mm大きくなってしまうようです。

これの影響は基板製造にはほぼないのですが、送料に影響します。一番安い1ドル送料が使えなくなり、2ドルになります。

大きくなるのはバグだと思いますが、とりあえず基板外形を99.75mmにします。画像はそのままのサイズで触らないのがよいと思います。

これで出力しなおすと100mmになりました。100mmぎりぎりでなければ大きくなったもので注文しても基板サイズはたぶん指定サイズででてくると思います。そして送料を1ドル多く払っても大丈夫なはずです。今回は基板サイズがあまり関係ないのでデータ側で調整してしまいました。

カラーシルクの場合には何個か注文条件があります。PCBの厚さは1.6mmが無難です。他の厚さだと高額な追加料金が発生します。あとPCBカラーは白になります。そして表面仕上げはENIGの金メッキを選択する必要があります。本来ENIGはこのサイズだと$16.70のオプションになりますがカラーシルクの場合には無料で選択可能です。これはHASLなどのハンダを付けてしまうと表面がでこぼこしてUV印刷できなくなるからだと思います。

高度なオプションでは発注番号の場所の指定を選択します。カラーシルクなのに変な場所に発注番号が印字されるとちょっと困りますもんね。そして下にある詳細オプションを開いてシルクの指定をします。

ここでマルチカラーシルクを選択することでガッツリ金額が下がります。

選択するまえはENIG加工の16ドルがかかっています。

選択すると表面仕上げが無料になり、シルクスクリーン工程で$4.71追加されました。

注文

レビュー後の支払いにして注文しましたが、回路なくてもレビュー通るのか心配だったのですが問い合わせがやっぱり来ました。

「ドリルホールもカッパーもないですが正常ですか?」

はい、カラーシルク印刷のテストですと返信したらレビューOKになりました。最初から備考欄に書いておけばよかったかもしれません。昔は回路なし基板はNGになった事例を聞いたのですが、いまは大丈夫みたいですね。

まとめ

とりあえず注文ができました。到着がたのしみですが、届いてみないとどうもよくわかりません。

カラーシルクが使えるようになると、上記のような化粧パネルをPCBで作るのがかなりやりやすくなると思います。本当はなにか作りたかったのですが、どうせ色見本は作る必要がありそうだったので今回は色見本だけにしました。届いたらまた記事にしたいと思います。

コメント