ラズパイやPIC単独でもIOTを実現できるが、高速動作や非同期のセンサー入力やモーター制御はハードに強いPICで行い、ラズパイではシステム全体の制御、ネットアクセス、データの解析や分析・判断を行う分業システム構築のために、パソコン(TeraTerm使用)にUSB接続し、予備通信テストを行う。
具体的には、
今回、3つのLED(PWM)、ADCとI2Cも同時に利用するので、PWMが4つ使える14ピンPICの16F15325を使う(PWMが2以下で良い場合は同ピン配置の16F1824/5や16F1764/5等も利用可)。
回 路 図 | 試作テスト回路 (LCD、USB給電) |
通信テスト風景 ”621”の場合 |
SystemModule | Timer 2 | MSSP(I2C) |
Timer 0 | EUSRAT | Pin Module |
AD_Coverter | PWM3 PWM4 PWM5 |
<PWM無し> | <PWM有り> | |
#include "stdio.h" #include "mcc_generated_files/mcc.h" #include "lcd_lib.h" unsigned char sBuf[16]; unsigned char rBuf[16]; char Flag, mFlag; int Index, Val, LedCol, RedC, BluC, GrnC; void main(void){ SYSTEM_Initialize(); mFlag = 0; Flag = 0; Index = 0; INTERRUPT_GlobalInterruptEnable(); INTERRUPT_PeripheralInterruptEnable(); Lcd_init(); Lcd_str("Hellow"); LED_A2_SetHigh(); puts("Hellow"); while (1){ Val = ADC_GetConversion(ANA5); if(mFlag){ LED_A2_Toggle(); mFlag = 1; sprintf(sBuf,"AD=%4d\n\r", Val); Lcd_cmd(Lcd_L2); Lcd_str(sBuf); printf("%s",sBuf); } if(Flag){ Flag = 0; Lcd_clear(); Lcd_str(rBuf); printf("%s",rBuf); LedCol = atoi(rBuf[0]); RedC = LedCol % 2; GrnC = (LedCol / 2) % 2; BluC = (LedCol / 4) % 2; if(RedC){ RED_4_SetHigh(); }else{ RED_4_SetLow(); } if(GrnC){ GRN_8_SetHigh(); }else{ GRN_8_SetLow(); } if(BluC){ BLU_7_SetHigh(); }else{ BLU_7_SetLow(); } } } } |
#include "stdio.h" #include "mcc_generated_files/mcc.h" #include "lcd_lib.h" unsigned char sBuf[16]; unsigned char rBuf[16]; char Flag, mFlag; int Index, Val, LedCol, RedC, BluC, GrnC; void main(void){ SYSTEM_Initialize(); mFlag = 0; Flag = 0; Index = 0; INTERRUPT_GlobalInterruptEnable(); INTERRUPT_PeripheralInterruptEnable(); Lcd_init(); Lcd_str("Hellow"); LED_A2_SetHigh(); puts("Hellow"); while (1){ Val = ADC_GetConversion(ANA5); if(mFlag){ LED_A2_Toggle(); mFlag = 0; sprintf(sBuf,"AD=%4d\n\r", Val); Lcd_cmd(Lcd_L2); Lcd_str(sBuf); printf("%s",sBuf); } if(Flag){ Flag = 0; Lcd_clear(); Lcd_str(rBuf); RedC = rBuf[0] - 0x30; GrnC = rBuf[1] - 0x30; BluC = rBuf[2] - 0x30; if((RedC >= 0)&&(RedC < 8)) { PWM3_LoadDutyValue(RedC * 64); } if((GrnC >= 0)&&(GrnC < 8)) { PWM4_LoadDutyValue(GrnC * 64); } if((BluC >= 0)&&(BluC < 8)) { PWM5_LoadDutyValue(BluC * 64); } } } } |
風景画を模した編み物用の型紙を、女房が作りたいというので、5mmメッシュの用紙をエクセルで印刷し、印刷した写真を下に敷き、トレースして型紙を作ることにした。しかし、2枚の紙を重ねただけでは下の図柄は見えないので、むかし、蛍光灯で作ったトレース台を利用することにした。しかし、この蛍光灯はさすがに古く、明るさがかなり低下していた。
そこで、LEDを使って自作しようと、必要な材料を調べてみると、数万円も必要なことが判った。自作は、明るさやサイズを自由に設計できるが、もっと安価に出来ないか、「トレース台」で検索してみると、A4サイズのものが2000円程度で売られていることが判り、アマゾンで即ポチリ。
入手したトレース台(Seebaby)は4mm厚のアクリル製で、液晶パネルのバックライトのような導光板を使ったLEDエッジライト方式のものだった。USB電源が必要で、電源は付属しておらず、別途準備する必要がある(USBケーブルは付属)。電源のON/OFFはタッチ式で、ボタンを長押しすると明るさを変えることが出来る(明るくなったり暗くなったり、適当なところでボタンを離す)。
厚手のコピー用紙を重ねると、明るい環境では非常に見づらくなるが、作業環境を暗くすると綺麗にトレースすることが出来た(鉛筆でおおよそを下書き後、色鉛筆で色塗り)。暗がりでは色鉛筆の選択など作業時の手元がつらいので、LEDライトスタンドで筆記用具などを部分的に照らした。
このトレース台はA4サイズ+αのアクリルボードなので、USBケーブルを外すと、下敷きやバインダーのような使い方も出来るし、出っ張りもほとんど無く、収納も容易である
古いトレース台(ミニ蛍光灯3本) | 新しいトレース台(LED+導光板) |
印刷した写真と方眼用紙を置くと | 作成した型紙の例(下敷き?付) |