2023年09月22日
バリアブルサイトについて
10月からインボイス制度がスタートしますが
制度もよくわからないので、今までバリアブルサイトの販売をしていましたが
この機会に販売を停止します
いままで、購入してくださった方々ありがとうございました
個人的な話になりますが、子供が2人になりまして
絶賛子育て中の身であります
子どもが意思疎通ができるぐらいまでに大きくなったら
また、会場に行ってAPSをやりたいと思っています
もし、ほしい方は、何個か取り置きしておいたので
また話かけてください
制度もよくわからないので、今までバリアブルサイトの販売をしていましたが
この機会に販売を停止します
いままで、購入してくださった方々ありがとうございました
個人的な話になりますが、子供が2人になりまして
絶賛子育て中の身であります
子どもが意思疎通ができるぐらいまでに大きくなったら
また、会場に行ってAPSをやりたいと思っています
もし、ほしい方は、何個か取り置きしておいたので
また話かけてください
2023年06月19日
スマホで動くミニ四駆を作ってみた!
スマホで動くミニ四駆を制作しました
チャットgtpさんと相談しながらつくったものです
動画
以下
プログラム
#include "Arduino.h"
#include
#include "BluetoothSerial.h"
#include
#define NUM_LEDS 1
#define DATA_PIN 27
CRGB leds[NUM_LEDS];
int pinForward = 25;//ta7291p
int pinBack = 22;
int pinSpeedForwardBack = 21;//vref
int pinFrontSteering = 32;
Servo servo1;
byte commands[4] = {0x00, 0x00, 0x00, 0x00};
byte prevCommands[4] = {0x01, 0x01, 0x01, 0x01};
unsigned long timer0 = 2000;
unsigned long timer2 = 0;
BluetoothSerial BTSerial;
void setup() {
FastLED.addLeds(leds, NUM_LEDS);
servo1.setPeriodHertz(50);
servo1.attach(pinFrontSteering, 500, 2400);
BTSerial.begin("7805mini");
Serial.begin(115200);
pinMode(pinForward, OUTPUT);
pinMode(pinBack, OUTPUT);
pinMode(pinSpeedForwardBack, OUTPUT);
leds[0] = CRGB(0x06, 0x06, 0x04); // LEDカラー: 16進数表記
FastLED.show();
}
void loop() {
if (BTSerial.available() == 4) {
timer2 = millis();
memcpy(prevCommands, commands, 4);
for (int i = 0; i < 4; i++) {
commands[i] = BTSerial.read();
}
Serial.print("Received commands: ");
for (int i = 0; i < 4; i++) {
Serial.print(commands[i], DEC);
Serial.print(" ");
}
Serial.println();
if (commands[0] == 241) {
digitalWrite(pinForward, HIGH);
digitalWrite(pinBack, LOW);
analogWrite(pinSpeedForwardBack, commands[1]);
int val = commands[2];
servo1.write(val);
leds[0] = CRGB(0xF0, 0x00, 0x00); // LEDカラー: 赤 (16進数表記)
FastLED.show();
} else if (commands[0] == 242) {
digitalWrite(pinForward, LOW);
digitalWrite(pinBack, HIGH);
analogWrite(pinSpeedForwardBack, commands[1]);
int val = commands[2];
servo1.write(val);
leds[0] = CRGB(0x00, 0xF0, 0x00); // LEDカラー: 緑 (16進数表記)
FastLED.show();
} else if (commands[0] == 243) {
digitalWrite(pinForward, LOW);
digitalWrite(pinBack, LOW);
analogWrite(pinSpeedForwardBack, 0);
int val = commands[2];
servo1.write(val);
leds[0] = CRGB(0xA0, 0x00, 0xA0); // LEDカラー: 紫 (16進数表記)
FastLED.show();
}
timer0 = timer2;
}
}
チャットgtpさんと相談しながらつくったものです
動画
以下
プログラム
#include "Arduino.h"
#include
#include "BluetoothSerial.h"
#include
#define NUM_LEDS 1
#define DATA_PIN 27
CRGB leds[NUM_LEDS];
int pinForward = 25;//ta7291p
int pinBack = 22;
int pinSpeedForwardBack = 21;//vref
int pinFrontSteering = 32;
Servo servo1;
byte commands[4] = {0x00, 0x00, 0x00, 0x00};
byte prevCommands[4] = {0x01, 0x01, 0x01, 0x01};
unsigned long timer0 = 2000;
unsigned long timer2 = 0;
BluetoothSerial BTSerial;
void setup() {
FastLED.addLeds
servo1.setPeriodHertz(50);
servo1.attach(pinFrontSteering, 500, 2400);
BTSerial.begin("7805mini");
Serial.begin(115200);
pinMode(pinForward, OUTPUT);
pinMode(pinBack, OUTPUT);
pinMode(pinSpeedForwardBack, OUTPUT);
leds[0] = CRGB(0x06, 0x06, 0x04); // LEDカラー: 16進数表記
FastLED.show();
}
void loop() {
if (BTSerial.available() == 4) {
timer2 = millis();
memcpy(prevCommands, commands, 4);
for (int i = 0; i < 4; i++) {
commands[i] = BTSerial.read();
}
Serial.print("Received commands: ");
for (int i = 0; i < 4; i++) {
Serial.print(commands[i], DEC);
Serial.print(" ");
}
Serial.println();
if (commands[0] == 241) {
digitalWrite(pinForward, HIGH);
digitalWrite(pinBack, LOW);
analogWrite(pinSpeedForwardBack, commands[1]);
int val = commands[2];
servo1.write(val);
leds[0] = CRGB(0xF0, 0x00, 0x00); // LEDカラー: 赤 (16進数表記)
FastLED.show();
} else if (commands[0] == 242) {
digitalWrite(pinForward, LOW);
digitalWrite(pinBack, HIGH);
analogWrite(pinSpeedForwardBack, commands[1]);
int val = commands[2];
servo1.write(val);
leds[0] = CRGB(0x00, 0xF0, 0x00); // LEDカラー: 緑 (16進数表記)
FastLED.show();
} else if (commands[0] == 243) {
digitalWrite(pinForward, LOW);
digitalWrite(pinBack, LOW);
analogWrite(pinSpeedForwardBack, 0);
int val = commands[2];
servo1.write(val);
leds[0] = CRGB(0xA0, 0x00, 0xA0); // LEDカラー: 紫 (16進数表記)
FastLED.show();
}
timer0 = timer2;
}
}
2022年06月03日
16F1503忘却の中で
16F1503を使用したライントレースのためのデータ
PWM出力とAD変換をしたプログラム
忘れたとき用に残す
/*
* File: analog.c
* Author: teacher
*
* Created on 2020/07/11, 14:32
*/
#include
#include
#include
#define _XTAL_FREQ 4000000
// PIC16F1503 Configuration Bit Settings
// 'C' source line config statements
#include
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
#define FOSC (4000000L)
#define FCYC (FOSC/4)
/* required for __delay_ms() macros */
#define _XTAL_FREQ FOSC
/* set PWM period to FCYC/(250 * 4) or 1000Hz when using 4MHz oscillator */
#define PWM_PERIOD 249
#define TMR2IF_MASK 0b00000010
/*
* Initialize PWM1
*/
void PWM1_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM1CON = 0; /* stop PWM1 */
PWM1DCH = 0; /* set duty cycle to 0% */
PWM1DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/
PWM1CON = PWM1CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISC = 0b00100000; /* Make GPIO for PWM1 an output RC5*/
PWM1CON = PWM1CON | 0b01100000; /* enable PWM1 output */
}
void PWM2_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM2CON = 0; /* stop PWM1 */
PWM2DCH = 0; /* set duty cycle to 0% */
PWM2DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/
PWM2CON = PWM2CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISC = 0b00001000; /* Make GPIO for PWM2 an outputRC3 */
PWM2CON = PWM2CON | 0b01100000; /* enable PWM1 output */
}
/*PWM3setiup*/
void PWM3_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM3CON = 0; /* stop PWM1 */
PWM3DCH = 0; /* set duty cycle to 0% */
PWM3DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/
PWM3CON = PWM3CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISA = 0b00000100; /* Make GPIO for PWM3 an output RA2*/
PWM3CON = PWM3CON | 0b01100000; /* enable PWM1 output */
}
void PWM4_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM4CON = 0; /* stop PWM1 */
PWM4DCH = 0; /* set duty cycle to 0% */
PWM4DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler p153*/
PWM4CON = PWM4CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISC = 0b00000010; /* Make GPIO for PWM4 an output RC1*/
PWM4CON = PWM4CON | 0b01100000; /* enable PWM1 output */
}
/*
* Set PWM1 duty cycle
*/
void PWM1_SetDutyCycle( unsigned int DutyCycle1 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
//PWM1DCH = DutyCycle >> 8;
// PWM1DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM1DCH = DutyCycle1;
PWM1DCL = 0b00000000;
DutyCycle1=0x0000;
}
void PWM2_SetDutyCycle( unsigned int DutyCycle2 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
//PWM2DCH = DutyCycle >> 8;
//PWM2DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM2DCH = DutyCycle2;
PWM2DCL = 0b00000000;
DutyCycle2=0x0000;
}
void PWM3_SetDutyCycle( unsigned int DutyCycle3 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
//PWM3DCH = DutyCycle >> 8;
//PWM3DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM3DCH = DutyCycle3;
PWM3DCL =0x00;
DutyCycle3=0x0000;
}
void PWM4_SetDutyCycle( unsigned int DutyCycle4 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
// PWM4DCH = DutyCycle >> 8;
// PWM4DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM4DCH = DutyCycle4;
PWM4DCL = 0x00;
DutyCycle4=0x0000;
}
int adconv1();
int adconv2();
int adconv3();
unsigned int ADdata1;
unsigned int ADdata2;
unsigned int ADdata3;
unsigned int total;
unsigned int data;
/*
*
*/
int main(int argc, char** argv) {
// int ADVcc=0;
INTCON = 0b00000000;//P64
PIE1 = 0b00000000;//P65
PIE2 = 0b00000000;//P66
OSCCON = 0b01101000; //4mhz
OPTION_REG = 0b11111111;
PORTA = 0b00010000;
PORTC = 0b00000101;
TRISA = 0b00011000;//????
TRISC = 0b00000101;//PORTC????
LATA = 0b00000000;//Hi or Low
LATC = 0b00000000;//Hi or Low
ANSELA = 0b00010000;//analog to "1" digital to"0"
ANSELC = 0b00000101;//poot"C"
WPUA = 0b00000000;//pullup
while(1){
adconv1();
adconv2();
adconv3();
PWM1_Init();
PWM2_Init();
PWM3_Init();
PWM4_Init();
int p1=0xFF;
int p2=0x00;
int p3=0x0F;
int p4=0xB0;
int p5=0xA0;
int p6=0x0A;
// AN4 mannaka(AD1 AN6 hidari(AD2 AN3 migi(AD3 (sinnkouhoukonitaisite)
if( ADdata2>=0 && ADdata2<=300 && ADdata1>=300 && ADdata1<=1000 && ADdata3>=0 && ADdata3<=300){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
else if( ADdata2>=300 && ADdata2<=1000 && ADdata1>=0 && ADdata1<=300 && ADdata3>=0 && ADdata3<=300){
PWM1_SetDutyCycle(p4);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p4);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}else if( ADdata2>=0 && ADdata2<=300 && ADdata1>=0 && ADdata1<=300 && ADdata3>=300 && ADdata3<=1000){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}/*else if( ADdata2>=0 && ADdata2<=400 && ADdata1>=400 && ADdata1<=1000 && ADdata3>=0 && ADdata3<=400){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
* */else{
PWM1_SetDutyCycle(p2);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p2);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
return (EXIT_SUCCESS);
}
}
int adconv1(){
ADCON0=0b00010011; //
ADCON1=0b10010000; //Fosc8 001 FOSC16 101
_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value1= ADRESH << 8| ADRESL;
ADdata1=value1;
}
int adconv2(){
ADCON0=0b00011011; //6-2bit 0011=3
ADCON1=0b10010000; //Fosc8 001 FOSC16 101
_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value2= ADRESH << 8| ADRESL;
ADdata2=value2;
}
int adconv3(){
ADCON0=0b00001111; //
ADCON1=0b10010000; //Fosc8 001 FOSC16 101
_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value3= ADRESH << 8| ADRESL;
ADdata3=value3;
}
PWM出力とAD変換をしたプログラム
忘れたとき用に残す
/*
* File: analog.c
* Author: teacher
*
* Created on 2020/07/11, 14:32
*/
#include
#include
#include
#define _XTAL_FREQ 4000000
// PIC16F1503 Configuration Bit Settings
// 'C' source line config statements
#include
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
#define FOSC (4000000L)
#define FCYC (FOSC/4)
/* required for __delay_ms() macros */
#define _XTAL_FREQ FOSC
/* set PWM period to FCYC/(250 * 4) or 1000Hz when using 4MHz oscillator */
#define PWM_PERIOD 249
#define TMR2IF_MASK 0b00000010
/*
* Initialize PWM1
*/
void PWM1_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM1CON = 0; /* stop PWM1 */
PWM1DCH = 0; /* set duty cycle to 0% */
PWM1DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/
PWM1CON = PWM1CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISC = 0b00100000; /* Make GPIO for PWM1 an output RC5*/
PWM1CON = PWM1CON | 0b01100000; /* enable PWM1 output */
}
void PWM2_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM2CON = 0; /* stop PWM1 */
PWM2DCH = 0; /* set duty cycle to 0% */
PWM2DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/
PWM2CON = PWM2CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISC = 0b00001000; /* Make GPIO for PWM2 an outputRC3 */
PWM2CON = PWM2CON | 0b01100000; /* enable PWM1 output */
}
/*PWM3setiup*/
void PWM3_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM3CON = 0; /* stop PWM1 */
PWM3DCH = 0; /* set duty cycle to 0% */
PWM3DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/
PWM3CON = PWM3CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISA = 0b00000100; /* Make GPIO for PWM3 an output RA2*/
PWM3CON = PWM3CON | 0b01100000; /* enable PWM1 output */
}
void PWM4_Init(void)
{
T2CON = 0; /* stop TIMER2 */
PWM4CON = 0; /* stop PWM1 */
PWM4DCH = 0; /* set duty cycle to 0% */
PWM4DCL = 0;
PR2 = PWM_PERIOD - 1; /* set PWM period */
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler p153*/
PWM4CON = PWM4CON | 0b10000000; /* enable PWM1 */
/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
TRISC = 0b00000010; /* Make GPIO for PWM4 an output RC1*/
PWM4CON = PWM4CON | 0b01100000; /* enable PWM1 output */
}
/*
* Set PWM1 duty cycle
*/
void PWM1_SetDutyCycle( unsigned int DutyCycle1 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
//PWM1DCH = DutyCycle >> 8;
// PWM1DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM1DCH = DutyCycle1;
PWM1DCL = 0b00000000;
DutyCycle1=0x0000;
}
void PWM2_SetDutyCycle( unsigned int DutyCycle2 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
//PWM2DCH = DutyCycle >> 8;
//PWM2DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM2DCH = DutyCycle2;
PWM2DCL = 0b00000000;
DutyCycle2=0x0000;
}
void PWM3_SetDutyCycle( unsigned int DutyCycle3 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
//PWM3DCH = DutyCycle >> 8;
//PWM3DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM3DCH = DutyCycle3;
PWM3DCL =0x00;
DutyCycle3=0x0000;
}
void PWM4_SetDutyCycle( unsigned int DutyCycle4 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */
/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);
/* update PWM duty cycle for the next period */
// PWM4DCH = DutyCycle >> 8;
// PWM4DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM4DCH = DutyCycle4;
PWM4DCL = 0x00;
DutyCycle4=0x0000;
}
int adconv1();
int adconv2();
int adconv3();
unsigned int ADdata1;
unsigned int ADdata2;
unsigned int ADdata3;
unsigned int total;
unsigned int data;
/*
*
*/
int main(int argc, char** argv) {
// int ADVcc=0;
INTCON = 0b00000000;//P64
PIE1 = 0b00000000;//P65
PIE2 = 0b00000000;//P66
OSCCON = 0b01101000; //4mhz
OPTION_REG = 0b11111111;
PORTA = 0b00010000;
PORTC = 0b00000101;
TRISA = 0b00011000;//????
TRISC = 0b00000101;//PORTC????
LATA = 0b00000000;//Hi or Low
LATC = 0b00000000;//Hi or Low
ANSELA = 0b00010000;//analog to "1" digital to"0"
ANSELC = 0b00000101;//poot"C"
WPUA = 0b00000000;//pullup
while(1){
adconv1();
adconv2();
adconv3();
PWM1_Init();
PWM2_Init();
PWM3_Init();
PWM4_Init();
int p1=0xFF;
int p2=0x00;
int p3=0x0F;
int p4=0xB0;
int p5=0xA0;
int p6=0x0A;
// AN4 mannaka(AD1 AN6 hidari(AD2 AN3 migi(AD3 (sinnkouhoukonitaisite)
if( ADdata2>=0 && ADdata2<=300 && ADdata1>=300 && ADdata1<=1000 && ADdata3>=0 && ADdata3<=300){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
else if( ADdata2>=300 && ADdata2<=1000 && ADdata1>=0 && ADdata1<=300 && ADdata3>=0 && ADdata3<=300){
PWM1_SetDutyCycle(p4);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p4);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}else if( ADdata2>=0 && ADdata2<=300 && ADdata1>=0 && ADdata1<=300 && ADdata3>=300 && ADdata3<=1000){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}/*else if( ADdata2>=0 && ADdata2<=400 && ADdata1>=400 && ADdata1<=1000 && ADdata3>=0 && ADdata3<=400){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
* */else{
PWM1_SetDutyCycle(p2);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p2);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
return (EXIT_SUCCESS);
}
}
int adconv1(){
ADCON0=0b00010011; //
ADCON1=0b10010000; //Fosc8 001 FOSC16 101
_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value1= ADRESH << 8| ADRESL;
ADdata1=value1;
}
int adconv2(){
ADCON0=0b00011011; //6-2bit 0011=3
ADCON1=0b10010000; //Fosc8 001 FOSC16 101
_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value2= ADRESH << 8| ADRESL;
ADdata2=value2;
}
int adconv3(){
ADCON0=0b00001111; //
ADCON1=0b10010000; //Fosc8 001 FOSC16 101
_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value3= ADRESH << 8| ADRESL;
ADdata3=value3;
}
2021年02月20日
aps-3グリップ3D化計画8
2021年02月15日
aps-3グリップ3D化計画7
おはようございます
先日スキャンしたデータをもとにフォームで作ってたんですけど
なんと、、パソコンが落ちまして
データがぁぁあああああああ
ということで、泣いてます
もうやめよ・・・
思ったんだけど、スキャンしたデータそのまま出せばいいじゃん!
はめる所だけまじめにそろえて引いて
試しに、出力してみました
試し出力なんで精度をがっつり落としてスピード優先で!
早速つけてみます
いっぱつでついたぁ
何回か出力して調整しようかと思ってましたが
しっかりとついてます
木製グリップの重量
今回作った重量
さて、今回 密度を5%にしたのですごいスッカスカです
思いっきり握るとギシギシするのでもうちょっと密度上げなきゃ
そうすると重量が増えるかも
ということで、あとはもう少し精度と密度を上げて出力してみようと思います
左手用も作っとくか?だれかほしいひといたら作ってみるか
先日スキャンしたデータをもとにフォームで作ってたんですけど
なんと、、パソコンが落ちまして
データがぁぁあああああああ
ということで、泣いてます
もうやめよ・・・
思ったんだけど、スキャンしたデータそのまま出せばいいじゃん!
はめる所だけまじめにそろえて引いて
試しに、出力してみました
試し出力なんで精度をがっつり落としてスピード優先で!
早速つけてみます
いっぱつでついたぁ
何回か出力して調整しようかと思ってましたが
しっかりとついてます
木製グリップの重量
今回作った重量
さて、今回 密度を5%にしたのですごいスッカスカです
思いっきり握るとギシギシするのでもうちょっと密度上げなきゃ
そうすると重量が増えるかも
ということで、あとはもう少し精度と密度を上げて出力してみようと思います
左手用も作っとくか?だれかほしいひといたら作ってみるか
2021年02月13日
aps-3グリップ3D化計画6
おはようございます
そういえば、LE2020出てたんですね
なんや、リアサイトの幅が変えられるって!
やっと公式が出してくれましたか、前々からバリアブルサイトだしてくださいよぉって言い続けたのが聞いてくれたのかな?
でも、LEかぁ 6万近くするのかぁ
難しいよぉ
パーツだけで出してくれないかな
あと欲を言うと、リアサイトが手前に来てしまうと、目が疲れるからなるべく通常のリアサイトとあまり距離が離れないでほしい
フロントサイトを下げられるようにしたのは、サイト間の距離が変わるからなのか
でも、リアサイトとフロントサイトを離した方が命中力が上がる気がするけど・・・
さて、今回も、APSのグリップを3dです
といっても、あれから進展はなく、パソコンのスペックが足りないのか重くて重くて
泣きそうです、なので、スキャンした生データを使うんじゃなくて、フォームっていう機能で改めて作り直す方向にします
まぁ、これから修正なんかしていくならフォームがいいでしょう
んで、思ったんですが、左手用のグリップって公式が木のグリップでだしてたり
昔フロンティアさんで(今も販売してるのか?)販売してたぐらいで記憶になかったんですが
3dプリンタなんて、こういうのに得意なんじゃないかなって
とりあえず、反転してみた
あとは、aps-3側の方をくぼませてしまえば、はまっちゃうだろうし
すぐ作れそう
高スペックPCほしいよぉ
3dCADがぬるぬる動くのほしいよぉ
3dマウスもほしいよぉ視点変更めんどいよぉ
お金がないよぉ
そういえば、LE2020出てたんですね
なんや、リアサイトの幅が変えられるって!
やっと公式が出してくれましたか、前々からバリアブルサイトだしてくださいよぉって言い続けたのが聞いてくれたのかな?
でも、LEかぁ 6万近くするのかぁ
難しいよぉ
パーツだけで出してくれないかな
あと欲を言うと、リアサイトが手前に来てしまうと、目が疲れるからなるべく通常のリアサイトとあまり距離が離れないでほしい
フロントサイトを下げられるようにしたのは、サイト間の距離が変わるからなのか
でも、リアサイトとフロントサイトを離した方が命中力が上がる気がするけど・・・
さて、今回も、APSのグリップを3dです
といっても、あれから進展はなく、パソコンのスペックが足りないのか重くて重くて
泣きそうです、なので、スキャンした生データを使うんじゃなくて、フォームっていう機能で改めて作り直す方向にします
まぁ、これから修正なんかしていくならフォームがいいでしょう
んで、思ったんですが、左手用のグリップって公式が木のグリップでだしてたり
昔フロンティアさんで(今も販売してるのか?)販売してたぐらいで記憶になかったんですが
3dプリンタなんて、こういうのに得意なんじゃないかなって
とりあえず、反転してみた
あとは、aps-3側の方をくぼませてしまえば、はまっちゃうだろうし
すぐ作れそう
高スペックPCほしいよぉ
3dCADがぬるぬる動くのほしいよぉ
3dマウスもほしいよぉ視点変更めんどいよぉ
お金がないよぉ
2021年02月11日
aps-3グリップ3D化計画5
2021年02月05日
サイトの外し方
バリアブルサイトの付け方って?
まず、今ついているサイトを外さなきゃいけませんよね
外し方
そういえば、かいてなかったっけ?って
Eリングをマイナスドライバなどで、取ります
取り方的には、マイナスドライバを差し込んで回すようにすると外れます
大体 幅1.2㎜のマイナスドライバ―がいいです
外したら、プラスドライバーでフタを固定しているネジを外します
この時、後ろにあるナットが落下する恐れがあるので、グリップを外しておいた方がよいです
外すとこんな感じになっているので
ノブを左に回し続けて、取ります
ノブを取った後、バネを取ります(飛んでいかないように)
取り付けは逆をすればいいのですが
Eリングを取り付けるときは、ノブにすこしはめるようにしてペンチなどではめてあげてください
一部写真は過去の投稿から持ってきました
思うとバリアブルサイト2013年ぐらいからやってるのか・・・ながいな
まず、今ついているサイトを外さなきゃいけませんよね
外し方
そういえば、かいてなかったっけ?って
Eリングをマイナスドライバなどで、取ります
取り方的には、マイナスドライバを差し込んで回すようにすると外れます
大体 幅1.2㎜のマイナスドライバ―がいいです
外したら、プラスドライバーでフタを固定しているネジを外します
この時、後ろにあるナットが落下する恐れがあるので、グリップを外しておいた方がよいです
外すとこんな感じになっているので
ノブを左に回し続けて、取ります
ノブを取った後、バネを取ります(飛んでいかないように)
取り付けは逆をすればいいのですが
Eリングを取り付けるときは、ノブにすこしはめるようにしてペンチなどではめてあげてください
一部写真は過去の投稿から持ってきました
思うとバリアブルサイト2013年ぐらいからやってるのか・・・ながいな
2021年02月05日
新しい3Dプリンタ
おはようございます
更新が止まってましたが
やっと、仕事が落ち着いてきました
3年生グッバイ!!
さて、今まで使ってた3Dプリンタは16万円もする3Dプリンタだったんですが
もう何年も昔に販売開始したものなんですよ
たしか4年位前かそのくらい
最新の3dプリンタってどうなんもんなんやって探してたら
なんと、2万円台で買えるじゃないですか!
今回は、デルタ型と言われている3Dプリンタを購入してみました
なぜデルタ型にしたのかというと、テーブルを動かすタイプは予想以上に場所を取り
テーブルの重量があるためモータに負荷がかかり、騒音のもとになっている可能性を感じ
可動部分が軽量で、テーブルが動かないデルタ型に挑戦です
ただ、制御が難しいらしく、今まではなんだかなぁって感じだったらしいですが
昨年の11月ぐらいに発売開始した FLSUN社のQ5を使ってみます
ここを押すとアマゾンに飛びます
アマゾンで2万円台で買えてたんですが、2月から値上がりして3万円になりました
ただ、クーポンを使うと1万円引きになるので、実際は2万円台でかえるってことですね
なんだろうこの値上げは
そんなこったで、色々と設定を変えたり、メカトロニクス的な部分も調整をしまくって
めっちゃきれいに出力できるようになりました
なんといっても、Z軸の分解能が0.06㎜ともうわけわからん数値まで来てるところですね
今まで使ってたのは、0.1㎜がマックスだったので期待できます
試しにバリアブルサイトを出力してみました
出力した感じはとてもきれいに出力できていてこれは使える!って感じです
今まではDMM.comに頼んで作ってもらってたけど
自分でも作れそう
ただ、M3 のネジがうまく出力できていなくて
ここは、データをM4に変更したりしてみようかと
ここで、FLSUN Q5 のメリットデメリットを書いてみます
メリット
まず、静か!めっちゃ静か
今までは押し入れに入れて作動させても3つ離れた部屋まで作動音が響いていました
重量があるテーブルを動かしたりするときのモータ音と振動がすごかったです
今も、押し入れに入れて作動させていますが、扉を閉めた段階で冷却用のファンの音しかしません
テーブルが動かないので細い造形物なども倒れす出力できる!
以前のプリンタでマスクを出力していましたが、途中倒れてしまうことが何度かありました
テーブルが前後に動くことによって剥がれてしまっていました
まぁ方向を変えれば剥がれなくなったのですが、今回のはテーブルがそもそも動かないので
安定して出力できているようです
あと、組み立てしやすい、箱から出して30分くらいで組み立て完成です
説明書もいらないくらい(説明書あったのか?)簡単です
画面がタッチパネル!直接的な操作ができて便利
デメリット
専用のスライサーが・・・あんま使えん
自分はCURAというスライサーを使っているのですが、細かい設定やプラグインなどを入れて出力しています
専用のスライサーがちょっとなぁって感じ
ほかの方も、専用のスライサーじゃないみたいなので、CURAの情報が多いので特段苦労していません
SDカード挿入口が後ろ・・・
これは、いちいち後ろに回らないといけないのでめんどいです
解決策は見つけてるので、後日記事にしてみます
特にデメリットも少なく、すごく使いやすいと思います
最初のプリンタは75万もしたのに、いつまにか2万円台まで来ちゃいましたね
樹脂も豊富で、700g 3万5千円だったのに、いまでは1Kg 2000円台 しかも樹脂の精度も上がっていて
どんどん進化してるって感じですね
更新が止まってましたが
やっと、仕事が落ち着いてきました
3年生グッバイ!!
さて、今まで使ってた3Dプリンタは16万円もする3Dプリンタだったんですが
もう何年も昔に販売開始したものなんですよ
たしか4年位前かそのくらい
最新の3dプリンタってどうなんもんなんやって探してたら
なんと、2万円台で買えるじゃないですか!
今回は、デルタ型と言われている3Dプリンタを購入してみました
なぜデルタ型にしたのかというと、テーブルを動かすタイプは予想以上に場所を取り
テーブルの重量があるためモータに負荷がかかり、騒音のもとになっている可能性を感じ
可動部分が軽量で、テーブルが動かないデルタ型に挑戦です
ただ、制御が難しいらしく、今まではなんだかなぁって感じだったらしいですが
昨年の11月ぐらいに発売開始した FLSUN社のQ5を使ってみます
ここを押すとアマゾンに飛びます
アマゾンで2万円台で買えてたんですが、2月から値上がりして3万円になりました
ただ、クーポンを使うと1万円引きになるので、実際は2万円台でかえるってことですね
なんだろうこの値上げは
そんなこったで、色々と設定を変えたり、メカトロニクス的な部分も調整をしまくって
めっちゃきれいに出力できるようになりました
なんといっても、Z軸の分解能が0.06㎜ともうわけわからん数値まで来てるところですね
今まで使ってたのは、0.1㎜がマックスだったので期待できます
試しにバリアブルサイトを出力してみました
出力した感じはとてもきれいに出力できていてこれは使える!って感じです
今まではDMM.comに頼んで作ってもらってたけど
自分でも作れそう
ただ、M3 のネジがうまく出力できていなくて
ここは、データをM4に変更したりしてみようかと
ここで、FLSUN Q5 のメリットデメリットを書いてみます
メリット
まず、静か!めっちゃ静か
今までは押し入れに入れて作動させても3つ離れた部屋まで作動音が響いていました
重量があるテーブルを動かしたりするときのモータ音と振動がすごかったです
今も、押し入れに入れて作動させていますが、扉を閉めた段階で冷却用のファンの音しかしません
テーブルが動かないので細い造形物なども倒れす出力できる!
以前のプリンタでマスクを出力していましたが、途中倒れてしまうことが何度かありました
テーブルが前後に動くことによって剥がれてしまっていました
まぁ方向を変えれば剥がれなくなったのですが、今回のはテーブルがそもそも動かないので
安定して出力できているようです
あと、組み立てしやすい、箱から出して30分くらいで組み立て完成です
説明書もいらないくらい(説明書あったのか?)簡単です
画面がタッチパネル!直接的な操作ができて便利
デメリット
専用のスライサーが・・・あんま使えん
自分はCURAというスライサーを使っているのですが、細かい設定やプラグインなどを入れて出力しています
専用のスライサーがちょっとなぁって感じ
ほかの方も、専用のスライサーじゃないみたいなので、CURAの情報が多いので特段苦労していません
SDカード挿入口が後ろ・・・
これは、いちいち後ろに回らないといけないのでめんどいです
解決策は見つけてるので、後日記事にしてみます
特にデメリットも少なく、すごく使いやすいと思います
最初のプリンタは75万もしたのに、いつまにか2万円台まで来ちゃいましたね
樹脂も豊富で、700g 3万5千円だったのに、いまでは1Kg 2000円台 しかも樹脂の精度も上がっていて
どんどん進化してるって感じですね
2020年10月18日
忙しいでも時間を見てやっても怒られる
おはようございます
最近いろんなことがあって
大変です
まず、子供が生まれました
3年生の就活まじ忙しい
忙しい中、合間を縫ってトランペットを吹いていると
こんな忙しいのになにやってるのって
いやぁもう勤務時間外だしゆっくりさせてくれよ
勤務時間なのにたばこ吸ってる方はなんにも言われないのに
たばこはそんなに偉いのか
さて、本題ですね
一番最初に書いちゃったけど
元気な男の子が誕生しました
これからも、がんばっていきましょう
APS-3のグリップを3D化したくいろいろやってますが
もう少し精度の高いスキャナじゃないと厳しそうです・・・
最近いろんなことがあって
大変です
まず、子供が生まれました
3年生の就活まじ忙しい
忙しい中、合間を縫ってトランペットを吹いていると
こんな忙しいのになにやってるのって
いやぁもう勤務時間外だしゆっくりさせてくれよ
勤務時間なのにたばこ吸ってる方はなんにも言われないのに
たばこはそんなに偉いのか
さて、本題ですね
一番最初に書いちゃったけど
元気な男の子が誕生しました
これからも、がんばっていきましょう
APS-3のグリップを3D化したくいろいろやってますが
もう少し精度の高いスキャナじゃないと厳しそうです・・・